文档
部署
私有化 · Docker · 云上多子域架构
沐安平台采用前后端分离 + 多子域路由架构:前端(Next.js)部署到 Vercel,后端(Spring Boot)以 Docker 容器运行在 Linux 服务器,经 middleware 按 Host 分流到不同子域。
生产架构
| 子域 | 用途 | 运行位置 |
|---|---|---|
| www.acb.social | 官网 + 文档站 | Vercel |
| bus.acb.social | 公交智慧运营控制台 | Vercel |
| energy.acb.social | 智慧能源管理控制台 | Vercel |
| api.acb.social | 后端 REST API | Linux 服务器(Docker) |
路由分流在 middleware.ts 完成:按 Host 识别子域 → 加载对应控制台(公交/能源),未登录访问控制台自动重定向到 /login。子域访问时隐藏产品切换器并显示“返回官网”。

Docker 部署(后端)
后端含多阶段 Dockerfile(Maven 打包 + JRE 运行,最终镜像仅运行时):
cd backend docker build -t autobus-backend:latest . docker run -d --name autobus-backend --restart unless-stopped \ -p 127.0.0.1:8080:8080 \ -e JAVA_TOOL_OPTIONS="-Xmx512m" \ autobus-backend:latest
容器仅监听本机 127.0.0.1:8080,对外经 Nginx 反向代理(api.acb.social)。
环境变量
后端
| 变量 | 说明 |
|---|---|
| PORT | 监听端口(默认 8080) |
| app.simulator.vehicle-count | 公交模拟台数(湘西州 229) |
| app.regulatory.mode | 监管上报模式 mock/http |
| app.regulatory.endpoint | 监管网关地址( http 模式必填 ) |
| app.regulatory.token | 监管平台接入密钥 |
| app.site-device.video-preview | 现场安防视频预览 mock/http |
前端(Vercel)
NEXT_PUBLIC_API_MODE=http NEXT_PUBLIC_API_URL=https://api.acb.social/api
前端 lib/api 层按 NEXT_PUBLIC_API_MODE 切换数据源:默认 mock(演示/断网场景),http 连接真实后端。
云上部署(一键脚本)
通用 Ubuntu 服务器(腾讯云/阿里云/Vultr)一键脚本,自动完成依赖安装、Docker 构建、容器启动、Nginx 反代、HTTPS 证书:
sudo bash scripts/deploy-linux.sh <域名> <邮箱> # 例: sudo bash deploy-linux.sh api.acb.social admin@acb.social
步骤
| 步骤 | 内容 |
|---|---|
| 1/6 | 安装 Docker/Nginx/Certbot |
| 2/6 | 拉取仓库构建后端镜像(多阶段,首次约 5 分钟) |
| 3/6 | 启动后端容器(只监听本机 8080) |
| 4/6 | 配置 Nginx 反向代理 |
| 5/6 | 申请 Let's Encrypt HTTPS 证书(需域名已解析到本机) |
| 6/6 | 健康检查 /api/health |
注意事项
- 数据库:默认内存 H2,重启重置;生产建议换 PostgreSQL(改 spring.datasource)。
- CORS:已允许 acb.social 与 Vercel 域名;跨域 OPTIONS 预检放行。
- 探活:GET /api/health 返回 { status: "UP" }。
- 私有化:docker compose up -d 前后端一键拉起;前端可静态导出自托管。