文档

部署

私有化 · 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 APILinux 服务器(Docker)

路由分流在 middleware.ts 完成:按 Host 识别子域 → 加载对应控制台(公交/能源),未登录访问控制台自动重定向到 /login。子域访问时隐藏产品切换器并显示“返回官网”。

图 1 · 生产部署架构(Vercel 前端多子域 + Docker 后端 + Nginx 反代)
图 1 · 生产部署架构(Vercel 前端多子域 + Docker 后端 + Nginx 反代)

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 前后端一键拉起;前端可静态导出自托管。