Docker 本地发布:开发版与生产版
在本地通过 Docker 运行 开发版 和 生产版,互不干扰,便于联调与发布验证。
一、环境与端口
| 环境 | 后端 API | Admin UI | 数据库 (Postgres) | Redis | Compose 文件 |
|---|---|---|---|---|---|
| 开发版 | http://localhost:8001 | http://localhost:3000 | 5433 | 6381 | docker-compose.dev.yml |
| 生产版 | http://localhost:8000 | http://localhost:3000 | 不暴露 | 不暴露 | docker-compose.prod.yml |
- 开发版、生产版使用不同网络与数据卷,可同时运行。
- 生产版数据库/Redis 不映射到宿主机,仅容器内访问。
二、首次使用:构建并发布
需先构建镜像,再启动容器。在项目根目录 d:\Mises 下执行:
开发版(构建 + 启动)
.\release-dev.ps1
或仅构建不启动:
.\release-dev.bat
# 若使用 PowerShell 且要仅构建:
& "$PSScriptRoot\scripts\release.ps1" -Target dev -BuildOnly
生产版(构建 + 启动)
.\release-prod.ps1
会提示确认后构建并启动;仅构建:
& "$PSScriptRoot\scripts\release.ps1" -Target prod -BuildOnly
三、日常启停(已构建过镜像)
镜像已存在时,只需启停容器,无需再构建。
开发版
# 启动
.\docker-up-dev.ps1
# 停止
.\docker-down-dev.ps1
生产版
# 启动
.\docker-up-prod.ps1
# 停止
.\docker-down-prod.ps1
脚本会进入 mises-behavior-engine 目录执行对应 docker-compose.*.yml。
四、手动命令(在 mises-behavior-engine 目录下)
cd mises-behavior-engine
# 开发版
docker-compose -f docker-compose.dev.yml up -d # 启动
docker-compose -f docker-compose.dev.yml down # 停止
docker-compose -f docker-compose.dev.yml logs -f # 日志
# 生产版
docker-compose -f docker-compose.prod.yml up -d
docker-compose -f docker-compose.prod.yml down
docker-compose -f docker-compose.prod.yml logs -f
五、本地开发版(带热重载)
若需要挂载源码、热重载的纯本地环境(端口 8002),在 mises-behavior-engine 下:
cd mises-behavior-engine
docker-compose -f docker-compose.local.yml up -d
- API: http://localhost:8002
- 数据库: 5434,Redis: 6382
六、健康检查与日志
# 开发版
curl http://localhost:8001/api/health
# 生产版
curl http://localhost:8000/api/health
# 查看容器
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | findstr mbe
七、常见问题
提示镜像不存在
先执行一次.\release-dev.ps1或.\release-prod.ps1完成构建。开发版带 Tunnel(cloudflared)
docker-compose.dev.yml内含 cloudflared,需配置CLOUDFLARE_TUNNEL_TOKEN_DEV;若仅本地访问可注释该服务或忽略隧道错误。生产版部署前确认
release-prod.ps1会要求输入yes确认,并尝试备份生产数据库后再部署。端口占用
开发 8001/3000、生产 8000/3000 若被占用,需先关闭占用进程或修改 compose 中ports。
八、公网部署(带密码保护)
将服务发布到公网,使用 HTTP Basic Authentication 保护访问。
8.1 生成密码文件
首次部署前,需要生成密码文件:
cd mises-behavior-engine
python scripts/generate_auth_password.py
按提示输入用户名和密码(默认用户名为 admin)。
8.2 启动公网服务
cd mises-behavior-engine
docker-compose -f docker-compose.public.yml up -d
8.3 访问服务
- 访问地址:
http://your-server-ip:9080或http://your-domain.com:9080 - 需要输入: 用户名和密码(在步骤 8.1 中设置)
8.4 配置说明
| 配置项 | 说明 |
|---|---|
| Nginx 端口 | 9080 (HTTP), 9443 (HTTPS,需配置 SSL) |
| 密码文件 | config/nginx/.htpasswd |
| Nginx 配置 | config/nginx/nginx.public.conf |
| 容器名 | mbe-nginx-public, mbe-api-public 等 |
8.5 添加/删除用户
添加用户:
python scripts/generate_auth_password.py
删除用户:
手动编辑 config/nginx/.htpasswd,删除对应行。
8.6 停止公网服务
cd mises-behavior-engine
docker-compose -f docker-compose.public.yml down
8.7 安全建议
- 使用 HTTPS: 配置 SSL 证书,启用 HTTPS(修改
nginx.public.conf) - 强密码: 使用复杂密码(至少 12 位,包含大小写字母、数字、特殊字符)
- 防火墙: 仅开放必要端口(9080, 9443)
- 定期更新: 定期更新密码和 Docker 镜像
- 日志监控: 监控 Nginx 访问日志,发现异常访问
8.8 与本地版本的区别
| 特性 | 本地版 (dev/prod) | 公网版 (public) |
|---|---|---|
| 端口暴露 | 直接暴露 API/UI | 仅暴露 Nginx (9080/9443) |
| 密码保护 | 无 | HTTP Basic Auth |
| 网络隔离 | 独立网络 | 独立网络 |
| 适用场景 | 本地开发/测试 | 公网访问 |
文档位置:docs/DOCKER_LOCAL.md