官网 · 文档中心 · 完整环境搭建

完整环境搭建

DEV / UAT / PROD 三档一站式部署 · 云驰智运 YunChi · Smart Logistics Cloud

云驰智运 · 完整环境搭建文档(v1.0 / Sprint 24 截稿)

适用范围:开发环境(本地)/ 测试环境(小型云)/ 生产环境(K8s 多集群)三档。 版本基线见 versions.txt,请严格对齐避免"在我电脑上能跑"问题。


0. 三档环境一览

维度 DEV(本地) UAT(云单机) PROD(K8s 多集群)
节点 1 台 16C32G 1 台 32C64G ≥6 台 32C64G + GPU 可选
编排 Docker Compose Docker Compose K8s 1.28+ + Istio Ambient
数据库 MySQL 单点 MySQL 主从 MySQL InnoDB Cluster
缓存 Redis 单点 Redis 哨兵 Redis Cluster 6 节点
存储 MinIO 单点 MinIO 4 节点 OSS / S3 / 私有 Ceph
监控 Prom 单点 Prom + Grafana Prom + VM + Tempo + Loki + Pyroscope + Pixie
必启项 server + admin-pc + 监控 + Istio + KBS + ArgoCD + Kyverno

1. 前置依赖(所有档次通用)

# JDK 17 (Temurin)
curl -L https://api.adoptium.net/v3/binary/latest/17/ga/linux/x64/jdk/hotspot/normal/eclipse \
  -o jdk17.tar.gz && tar xzf jdk17.tar.gz

# Maven 3.9.6 / Node 20 / pnpm 8 / Docker 24+
sudo apt install -y maven nodejs npm docker.io docker-compose-plugin
npm i -g pnpm@8 @vue/cli @dcloudio/uvm

# 校验
java -version  # ≥17.0.10
mvn -v         # ≥3.9
node -v        # ≥20.11
docker compose version  # ≥v2.24

2. DEV 本地一键起步

2.1 起依赖(MySQL/Redis/MinIO/RabbitMQ)

cd logistics-platform/deploy
docker compose -f docker-compose.dev.yml up -d
# 默认账号密码 见 .env.prod.example(开发环境用默认 root/123456)

2.2 初始化数据库

# 进入 mysql 容器
docker exec -i logistics-mysql mysql -uroot -p123456 < sql/init.sql
docker exec -i logistics-mysql mysql -uroot -p123456 < sql/seed.sql
# 国产化 DM8 用:sql/init-dm.sql

2.3 启动后端

cd ../server
./mvnw -pl logistics-app -am spring-boot:run
# 默认 8080,Swagger: http://localhost:8080/swagger-ui/index.html

2.4 启动 PC 后台

cd ../admin-pc
pnpm i && pnpm dev
# 默认 5173,登录 admin/admin123

2.5 启动移动端 H5

cd ../client-app
pnpm i && pnpm dev:h5
# 默认 5174

3. 可观测三件套(DEV 可选)

cd deploy
docker compose -f docker-compose.observability.yml up -d
# Grafana: http://localhost:3000  admin/admin
# Tempo:   http://localhost:3200
# Loki:    http://localhost:3100
# Pyroscope: http://localhost:4040

后端只需在 application.yml 加:

otel:
  enabled: true
  exporter:
    otlp:
      endpoint: http://localhost:4317
spring:
  application:
    name: logistics-app

4. UAT 云单机部署

# 1. 克隆 + 配置 .env
cd /opt && git clone <repo> logistics-platform && cd $_/deploy
cp .env.prod.example .env.prod
vim .env.prod   # 填真实数据库 / OSS / 短信 / 支付密钥

# 2. 一键起栈(应用 + 监控 + 审计)
docker compose --env-file .env.prod \
  -f docker-compose.prod.yml \
  -f docker-compose.monitor.yml \
  -f docker-compose.audit.yml \
  up -d

# 3. 冒烟测试
bash scripts/smoke-test.sh https://api.your-domain.com

域名 + HTTPS(Nginx + acme.sh):

# Let's Encrypt 自动续期
acme.sh --issue --nginx -d api.your-domain.com -d admin.your-domain.com

5. PROD 生产 K8s 部署

5.1 集群准备

  • K8s 1.28+ × 3 集群(沪 / 穗 / 海外) — 见 docs/29-Istio多集群联邦.md
  • 节点 OS:Ubuntu 22.04 / 麒麟 V10(信创)
  • CNI:Cilium 1.15(启用 Hubble)
  • Kernel:≥ 5.8(eBPF CO-RE 必需)
  • 证书:cert-manager + Let's Encrypt 或私有 CA

5.2 基础组件 Helm 部署顺序

顺序 组件 命名空间 备注
1 cert-manager cert-manager TLS 证书自动签发
2 Istio Ambient istio-system ambient-mode.yaml
3 ArgoCD argocd GitOps 控制面
4 Kyverno kyverno 准入策略
5 Prometheus + VM + Tempo + Loki observability docker-compose.observability.yml 转 Helm
6 Pyroscope observability pyroscope.yaml
7 Pixie px-operator ebpf-pixie-falco.yaml
8 Knative + KEDA knative-serving knative-service.yaml
9 Ollama(LLM 告警摘要) ai qwen2.5:7b 本地推理
10 logistics-app 业务 logistics ArgoCD Application 同步

5.3 SLSA L3 镜像签名(CI 侧)

# .github/workflows/slsa-l3-release.yml 已就绪
# 触发:git tag v1.0.0 && git push origin v1.0.0

5.4 KBS(Confidential Containers)

仅敏感业务(OCR / 跨境清算)启用:

helm install kbs ./deploy/security/kbs --namespace coco-tenant --create-namespace
kubectl label nodes <tdx-node> confidential-computing=tdx

6. 配置项一览(关键摘录)

6.1 后端 application.yml(按模块加)

# 数据库
spring.datasource.url: jdbc:mysql://mysql:3306/logistics?...
spring.redis.host: redis
spring.rabbitmq.host: rabbitmq

# 多租户
tenant:
  enabled: true
  default-id: 1

# OTel
otel.enabled: true
otel.exporter.otlp.endpoint: http://otel-collector:4317

# VM 时序写入
vm.write.url: http://victoria-metrics:8428/write

# LLM 告警摘要
ai.llm.url: http://ollama:11434/v1/chat/completions
ai.llm.model: qwen2.5:7b

# SSO
sso.callback-base: https://api.your-domain.com
sso.oidc.wework.client-id: ww...

6.2 前端 .env.production

VITE_API_BASE=https://api.your-domain.com
VITE_WS_BASE=wss://api.your-domain.com/ws
VITE_GAODE_KEY=xxx
VITE_OSS_HOST=https://oss.your-domain.com

7. 端口与防火墙

端口 用途 内/外
80/443 Nginx HTTP/HTTPS
8080 后端业务
8848 OpenAPI 外(沙箱)
4317/4318 OTel gRPC/HTTP
4040 Pyroscope
8428 VictoriaMetrics 写
4000 Apollo Router GraphQL
15008 Istio HBONE
9090 Prometheus
3000 Grafana
3306 MySQL
6379 Redis
5672/15672 RabbitMQ
9000/9001 MinIO API/Console

8. 数据库备份策略

  • 主:xtrabackup 每日全量 + binlog 每 5 分钟增量
  • 异地:跨区域 oss sync s3://logistics-backup/<date>/
  • 演练:每月恢复一次到隔离环境,跑 smoke-test.sh

9. 安全 Checklist(生产前)

  • [ ] 替换所有 Mock:docs/41-功能差距与待完善清单.md G1-G9
  • [ ] 数据库密码 / OSS AK / 微信支付证书 入 K8s Secret(不入代码)
  • [ ] HTTPS 全站 + HSTS
  • [ ] WAF / 限流(Nginx + Sentinel)
  • [ ] 审计日志开(docs/18-审计日志ES索引.md
  • [ ] 数据脱敏注解打满 PII 字段
  • [ ] cosign 签名 + Kyverno 拒绝未签名镜像
  • [ ] 灾备每月演练

10. 常见问题

问题 排查
Pod 启动慢 OTel 接 unreachable collector → 关 otel.enabled=false 临时观察
MySQL 连接池满 HikariCP maximum-pool-size 改 50;查 slow query
Redis OOM maxmemory + allkeys-lru 策略
Kafka lag 飙高 KEDA ScaledObject 自动扩,检查 bootstrapServers
WebXR 在 iOS 不工作 已知,回退 2D 画笔标记,见 docs/36
LLM 摘要超时 Ollama 模型未拉取:ollama pull qwen2.5:7b
Istio Ambient 升级后 502 检查 ztunnel DaemonSet 是否就绪:kubectl -n istio-system get pods -l app=ztunnel

11. 升级与回滚

# 升级(蓝绿)
argocd app sync logistics-app --revision v1.1.0

# 回滚(一键)
argocd app rollback logistics-app

WASM 业务规则回滚(毫秒级):

curl -F file=@freight_v1.wasm "https://api.your-domain.com/rule/wasm/freight/upload?version=v1"