上线前必过 5 项:防火墙、postgres 不暴露、API key env 注入、admin 强密码、订阅鉴权开启。逐条打勾即可上生产。
6.1 防火墙
对外只开 22 / 80 / 443,其它收口。
- 看当前监听:
ss -tlnp - 用 ufw 或 firewalld 放行 22/80/443,其它拒绝
- 从外网
nmap -p 3001,5432 服务器IP验证扫不到
# Ubuntu / Debian
sudo ufw default deny incoming
sudo ufw allow 22/tcp && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
sudo ufw enable
# CentOS / RHEL
sudo firewall-cmd --permanent --add-service={ssh,http,https}
sudo firewall-cmd --reload
注意: 云上别忘云防火墙:阿里云安全组 / AWS SG 是另一层,要和系统防火墙同时收口。
6.2 postgres 不暴露公网
数据库永远不挂公网。小匠 postgres 容器默认只在 docker 内网监听,确认 3 处。
- 检查 compose 里 postgres 的
ports:——生产应整段删掉,或只绑127.0.0.1:5432:5432,绝不能写5432:5432 - 密码用 32 位以上强随机串,通过
.env注入 - 需远程连库走 SSH 隧道:
ssh -L 5432:localhost:5432 ops@服务器
注意: 不可逆事故:公网暴露 5432 + 弱密码 = 几小时内被勒索锁库。上线前用 nmap 反向扫一次,确认
psql -h 服务器IP连不上。
6.3 LLM API Key
DeepSeek / OpenAI key 统一走环境变量,不进 git、不进镜像、不进日志。
- key 写
.env,权限chmod 640,.gitignore排除 - compose 用
env_file: .env引用;每 90 天在管理后台「模型配置」轮换一次 - 在 DeepSeek / OpenAI 控制台设置月度花费上限告警
# /opt/jecloud-ai/.env
DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
POSTGRES_PASSWORD=<32 位随机串>
sudo chown root:ops /opt/jecloud-ai/.env
sudo chmod 640 /opt/jecloud-ai/.env
小贴士: 误提交了:立刻去 LLM 控制台吊销那把 key、重新生成、更新
.env。仅git rm没用,历史里还在。
6.4 admin 强密码
管理后台是钥匙串。默认初始密码 jecloud@123,不改等于裸奔。
- 首次部署后立刻登录「管理员」页面改密码,≥12 位含大小写 + 数字 + 符号
- 给每个管理员单独开账号,不共用 admin(审计能追到人)
- 离职 / 转岗当天在「管理员」页面禁用其账号
注意: 当前无 2FA:v1 仅密码 + Cookie,未集成短信 / TOTP。纵深防御 = 强密码 + 管理后台不开公网 + 离职即时禁用。
提示: 忘记密码:进容器跑
agent reset-admin <username> --yes,会重置成jecloud@123,登录后立刻再改。
6.5 订阅鉴权(License Guard)
AI 套件靠 per-server license 探测放行业务请求。位置在管理后台「系统设置 → 系统信息」面板的「订阅鉴权」卡片。
- 「订阅鉴权总开关」生产保持开启(关闭仅应急调试用)
- 查「license 状态」列表,确认各 JECloud 服务器都是
active;异常状态no_ai_plugin/idle直接读错误消息排查 - 需要立即生效改动时点「强制刷新」,否则调度器每 1 小时自动探测一次
注意: per-server,不是 global:登录服务器 A 有证书但请求路由到 B 而 B 没证书,会被拦下报
no_ai_plugin——设计如此,避免跨服务器授权泄漏。
6.6 上线前 check list
逐项打勾,全过才上生产。
- ☐ 防火墙只开 22/80/443,nmap 外网扫 3001 / 5432 都封死
- ☐ postgres 端口不绑公网,远程连库走 SSH 隧道
- ☐ LLM API key 在
.env、权限 640、不在 git 历史里 - ☐ admin 默认密码已改成 ≥12 位强密码,管理后台未暴露公网
- ☐ HTTPS 已上、证书有效期 ≥60 天(见反向代理 + HTTPS)
- ☐ 订阅鉴权总开关已开启,各服务器 license_status 全
active
提示: 下一步:看性能调优,做最后一道性能优化。