生产部署(Docker)

生产实例使用 MySQL、Redis、Redis TLS 网关、Node.js 后端和部署注册服务容器。MySQL、后端与注册服务只监听内部网络或服务器回环地址;Nginx 暴露 ck.yydd.ai:8443,Redis TLS 网关暴露 ck.yydd.ai:6380。

服务器目录约定:

  • /opt/cangku/app:仓库代码和前端构建结果
  • /opt/cangku/shared:权限为 0700 的环境配置
  • /opt/cangku/data:MySQL、Redis 和部署注册服务持久数据
  • /www/wwwroot/cangku-acme:Let's Encrypt HTTP-01 校验目录

真实密码、JWT 密钥、部署 Key 和第三方数据库配置不得写入仓库。mysql.env、redis.env、backend.env 和 bootstrap.env 只在服务器生成并保持 0600 权限。

SSH 隧道账号只接受由注册服务 CA 签发的短期证书,只允许转发到服务器 127.0.0.1:3307,并关闭终端、TTY、代理转发和密码认证。生产主机的 SSH 管理账号使用独立密钥,关闭密码登录。

Redis 原始端口不映射到宿主机,容器以镜像内置的非特权 redis 用户运行。公网 6380 只接受 TLS,注册服务为每台设备创建独立 ACL 账号;停用安装会删除该账号。ACL 保存在 Redis 数据卷的 users.acl,注册与撤销后立即执行 ACL SAVE,容器重启不会丢失设备账号。证书文件应归属 HAProxy 容器的 99:99 并保持 0600,续期后需重新生成 /opt/cangku/shared/redis-tls.pem、恢复该属主并重启 TLS 网关。