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

六、健康检查与日志

# 开发版
curl http://localhost:8001/api/health

# 生产版
curl http://localhost:8000/api/health

# 查看容器
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | findstr mbe

七、常见问题

  1. 提示镜像不存在
    先执行一次 .\release-dev.ps1.\release-prod.ps1 完成构建。

  2. 开发版带 Tunnel(cloudflared)
    docker-compose.dev.yml 内含 cloudflared,需配置 CLOUDFLARE_TUNNEL_TOKEN_DEV;若仅本地访问可注释该服务或忽略隧道错误。

  3. 生产版部署前确认
    release-prod.ps1 会要求输入 yes 确认,并尝试备份生产数据库后再部署。

  4. 端口占用
    开发 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:9080http://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 安全建议

  1. 使用 HTTPS: 配置 SSL 证书,启用 HTTPS(修改 nginx.public.conf
  2. 强密码: 使用复杂密码(至少 12 位,包含大小写字母、数字、特殊字符)
  3. 防火墙: 仅开放必要端口(9080, 9443)
  4. 定期更新: 定期更新密码和 Docker 镜像
  5. 日志监控: 监控 Nginx 访问日志,发现异常访问

8.8 与本地版本的区别

特性 本地版 (dev/prod) 公网版 (public)
端口暴露 直接暴露 API/UI 仅暴露 Nginx (9080/9443)
密码保护 HTTP Basic Auth
网络隔离 独立网络 独立网络
适用场景 本地开发/测试 公网访问

文档位置:docs/DOCKER_LOCAL.md