MBE 公网部署指南(带密码保护)

将 MBE 服务发布到公网,使用 HTTP Basic Authentication 保护访问。


快速开始

1. 生成密码文件

cd mises-behavior-engine
python scripts/generate_auth_password.py

按提示输入用户名和密码(默认用户名为 admin)。

2. 启动服务

方式一:使用快速设置脚本(推荐)

.\scripts\setup_public_deploy.ps1

方式二:手动启动

docker-compose -f docker-compose.public.yml up -d

3. 访问服务

  • 访问地址: http://your-server-iphttp://your-domain.com
  • 需要输入: 用户名和密码(在步骤 1 中设置)

配置说明

端口配置

服务 端口 说明
Nginx 80 HTTP 访问入口
Nginx 443 HTTPS 访问入口(需配置 SSL)
API 8000 仅内部访问,不暴露到宿主机
Admin UI 3000 仅内部访问,不暴露到宿主机

文件位置

文件 路径 说明
Docker Compose docker-compose.public.yml 公网部署配置
Nginx 配置 config/nginx/nginx.public.conf Nginx 反向代理配置
密码文件 config/nginx/.htpasswd HTTP Basic Auth 密码文件

用户管理

添加用户

python scripts/generate_auth_password.py

输入新的用户名和密码即可。

删除用户

手动编辑 config/nginx/.htpasswd,删除对应行:

admin:$apr1$...
user2:$apr1$...

删除 user2 那一行即可。

修改密码

重新运行密码生成脚本,使用相同用户名,输入新密码。


安全建议

1. 使用 HTTPS

配置 SSL 证书,启用 HTTPS:

  1. 将 SSL 证书放到 config/nginx/ssl/ 目录
  2. 修改 config/nginx/nginx.public.conf,取消注释 HTTPS server 块
  3. 更新证书路径

2. 强密码策略

  • 至少 12 位字符
  • 包含大小写字母、数字、特殊字符
  • 定期更换密码

3. 防火墙配置

仅开放必要端口:

# Windows Firewall
New-NetFirewallRule -DisplayName "MBE HTTP" -Direction Inbound -LocalPort 80 -Protocol TCP -Action Allow
New-NetFirewallRule -DisplayName "MBE HTTPS" -Direction Inbound -LocalPort 443 -Protocol TCP -Action Allow

4. 日志监控

定期检查 Nginx 访问日志:

docker logs mbe-nginx-public

或查看日志文件:

docker exec mbe-nginx-public tail -f /var/log/nginx/access.log

常用命令

启动服务

docker-compose -f docker-compose.public.yml up -d

停止服务

docker-compose -f docker-compose.public.yml down

查看日志

# 所有服务
docker-compose -f docker-compose.public.yml logs -f

# 特定服务
docker-compose -f docker-compose.public.yml logs -f nginx
docker-compose -f docker-compose.public.yml logs -f mbe-api

重启服务

docker-compose -f docker-compose.public.yml restart

查看服务状态

docker-compose -f docker-compose.public.yml ps

故障排除

问题:无法访问服务

检查步骤

  1. 确认服务已启动:

    docker-compose -f docker-compose.public.yml ps
    
  2. 检查端口是否被占用:

    netstat -ano | findstr :80
    
  3. 查看 Nginx 日志:

    docker logs mbe-nginx-public
    

问题:密码验证失败

检查步骤

  1. 确认密码文件存在:

    Test-Path config\nginx\.htpasswd
    
  2. 检查密码文件格式:

    Get-Content config\nginx\.htpasswd
    

    格式应为:username:$apr1$...username:$2y$...

  3. 重新生成密码文件:

    python scripts/generate_auth_password.py
    

问题:API 无法访问

检查步骤

  1. 确认 API 容器健康:

    docker ps | findstr mbe-api-public
    
  2. 检查 API 日志:

    docker logs mbe-api-public
    
  3. 测试内部连接:

    docker exec mbe-nginx-public wget -q -O- http://mbe-api:8000/api/health
    

与本地版本的区别

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

更新服务

更新代码

  1. 重新构建镜像:

    docker build -t mbe-api:latest .
    docker build -f admin-ui/Dockerfile -t mbe-admin-ui:latest admin-ui
    
  2. 重启服务:

    docker-compose -f docker-compose.public.yml up -d --force-recreate
    

更新配置

  1. 修改 config/nginx/nginx.public.conf
  2. 重启 Nginx:
    docker-compose -f docker-compose.public.yml restart nginx
    

文档位置:docs/PUBLIC_DEPLOYMENT.md