Deployment and Configuration - wongyiuming/FrontierCloud-Gin GitHub Wiki

部署与配置

当前运维入口(2026-10-14)

当前 updater 清理交付见 PR #15,公开版本为 fc6adc75c7cdb9064163f938a31f176add843e0a。源码、Updater 镜像发布、fc 的 Updater 校验与旧 CD 入口已移除。保留证书 certificate-agent,它只负责 TLS 生命周期,不承担项目升级。

当前发布只编译、发布 Web/Nginx 两种镜像;证书 agent 使用 Web 镜像中的证书命令。升级由每台主机显式执行 fc upgrade plan/apply/open,无自动整群发布、后台 Docker socket 升级或现场源码编译。数据库代际为 7,本次没有 DDL 变化。

现行命令、备份和恢复边界见 fc 手动升级与边界,源码契约以 main 的 运维手册 和 升级契约 为准。RN 预生产和外部 CD 已退役,不能声称完成 live staging 验收。

本次生产执行状态见 fc 手动升级与边界;公开发布成功不等于生产更新完成。

2026-10-11 及此前的历史记录(旧命令及版本不用于当前部署)

自动 TLS 已发布并在生产业务、Direct、Relay 三个节点完成迁移。新装步骤仍不能当成原盘无损迁移步骤。

业务主节点默认 Gin + SQLite,唯一数据库替代是 Gin + MySQL。业务 Compose 保留 Nginx、Redis、可选 MySQL、coturn 和本机升级器。

自动 TLS 两参数基线(main/latest,785af2d2c459)

新版本 HTTPS 业务节点只需设置:

TLS_ENABLED=true
SERVER_NAME=4399.com
docker compose up -d --wait

域名必须满足公开 CA 的 DNS 与 HTTP-01 验证条件,公开 TCP 80/443 必须可达。Go 自动申请、校验、持久化和续期;Nginx 保留 HTTPS 入口。首次签发前的 HTTP 只接受 Challenge 和健康检查,不开放业务与管理后台。失败不会降级为明文。

其余新装参数采用默认值:main 发布的公开 latest、SQLite、./data、frontiercloud-gin 项目以及自动初始化的持久密钥。dev 推送不会更新 main/latest。当前 main/latest 三种镜像已经发布并独立验证匿名 digest;存量首次拓扑迁移必须按下述步骤保护数据和身份。

SSL_CERT_PATH、SSL_KEY_PATH、STORAGE_TLS_CERT、STORAGE_TLS_KEY、ACME_WEBROOT 和旧证书目录/控制地址选项已移除。遗留路径变量仅给出变量名警告,不读取其文件。HTTP_PORT、HTTPS_PORT 从公开配置移除;业务端口固定 80/443,非标准启动端口及公开 Origin 被拒绝。私有业务 Go 8000 与 STUN UDP 不属于公开 HTTP/HTTPS 配置。

现有部署的项目名、数据卷、节点身份和配对关系必须保留。首次自动证书拓扑迁移需独立冷备份及维护期 Compose 操作;升级器在拓扑尚未迁移时会提前拒绝,不能靠删卷重装。详见 迁移说明。

存储节点

存储保持 Go 原生 TLS,不引入 Nginx。certificate-agent 与 Web 常驻,三个初始化容器退出;账户私钥、发布证书和 Unix 控制通道使用三个隔离持久卷,无 Docker Socket 和宿主 systemctl。

  • Direct:STORAGE_TRANSPORT=direct,HTTPS 固定 443。
  • Relay:STORAGE_TRANSPORT=relay,节点通信端口默认 8443,不持续占用宿主 80/443。
  • 两类存储 HTTP-01 仅在签发验证时临时监听宿主 80,成功、失败或取消后释放。公开 CA 不能通过 8443 完成 HTTP-01。
  • HTTPS 与业务真实就绪后才生成五分钟配对包,证书申请失败保持诊断与退避重试。

配置示例 / 部署契约。

查看当前实例密钥

先依据 Compose 标签确认自己的 Web 容器;不需要进入某个源码目录。

docker ps --filter label=com.docker.compose.service=web
docker exec <自己的Web容器名> cat /run/frontiercloud-secrets/admin_key

Admin Key 是管理登录凭据。metrics_token 用于指标,mysql_password/mysql_root_password 用于数据库,node-vault.key 用于节点恢复;媒体预主密钥是 /app/data/media-keys/media-premaster.key 的二进制文件。不要将这些值写入公开 Wiki 或日志,也不要删除卷来更换 Key。

控制台只读显示每个节点的证书状态、到期时间、续期结果、真实 HTTPS 指纹和控制器状态;仅提供下载证书及私钥对。下载经过鉴权、CSRF 与审计,用浏览器临时公钥加密存储节点导出内容,主节点常规转发不接触存储私钥明文。下载文件本身包含私钥,须作为恢复材料保护。

预发布状态

2026-10-11 经所有者明确授权,RN 预发布与 CD 已撤销,预发布数据、专用卷、接收器和 Runner 已清理;生产存储及其他应用保留。www4399.sbs 当前不能当作预发布业务入口。STAGING_CD_ENABLED=false,暂无替代 IP,因此不能宣称预发布验收成功。旧 CD 实录只作历史证据,见 Staging-CD。

历史生产迁移实录(2026-10-11,自动 TLS 改造之前)

以下描述当时 main 的五参数部署,不是当前 dev 自动 TLS 的安装步骤。

生产主节点已按操作者授权完成首次 schema 2 → 3 维护期迁移,实际 Web、Updater、Nginx 固定到已发布 main 3c998bc112db2a3ba3f69b360d8a02cf57a0ec37。这是首次迁移,不能由旧 schema-2 升级器直接完成;building/image-proof 会拒绝 schema-3 镜像,并保留维护状态。schema-2 回退需要完整冷恢复,不能仅切换旧镜像。

唯一业务源码与当前配置为 /root/FrontierCloud-Gin、/root/FrontierCloud-Gin/.env;持久数据为 /opt/frontiercloud/data,ACME 验证目录为 /opt/frontiercloud/acme,生产保留配置为 /opt/frontiercloud/production.compose.json。旧 FrontierCloud、FrontierCloud-gin 源码及历史迁移根目录在完整异机冷备份与业务、文件校验通过后清理。不要把持久数据当成源码删除。

当前 .env 保留五项 TLS 设置,以及四项现有环境必须的覆盖:COMPOSE_PROJECT_NAME 保留原项目/卷,DATA_DIRECTORY 指向原数据的新位置,COMPOSE_FILE 保留容器名、资源限制、现有卷和网络,FRONTIERCLOUD_REVISION 固定已验证发布版本。数据库、Redis、端口、发布分支等采用项目默认值。五参数基线适用于新装,不代表迁移现有部署时可以丢弃这些绑定。

在唯一源码目录执行 docker compose up -d --wait。通过 Admin 更新后,手工重建前仍须核对实际运行版本及固定版本,避免旧固定值覆盖新容器。生产证书续期已通过 webroot 模拟验证,部署钩子重启当前 Nginx 容器加载证书,保持运行镜像与挂载配置。

业务产品与用户 CD 的边界

业务产品组件必须由 Docker/Compose 构建和运行,不能安装宿主业务服务、账户或二进制。用户自己接入的 CI/CD 属于外部运维集成,不是业务组件,可以使用 systemd;本团队在预发布环境同时承担开发者与部署用户角色。历史预发布 CD 接收器属于用户运维集成,本次按所有者指示撤销,不纳入产品运行时。业务 GUI 不控制用户的 systemd。

自动 TLS 启动与诊断

新版本基础 Compose 已包含 certificate-init 与 certificate-agent;不再叠加已退役的 storage-certificate、webroot 或 temporary overlay。TLS_ENABLED=true 即自动签发与续期,没有手动证书模式、自动续期开关或管理端续签按钮。证书容器无 Docker Socket、宿主 PID 或 systemctl,私有账户缓存与消费端只读证书卷分离。

docker compose exec -T certificate-agent /app/frontiercloud certificate-status
docker compose exec -T web /app/frontiercloud certificate-ready

证书控制器存活、证书已签发、实际 HTTPS 正在使用该证书是不同状态。Compose 的 Nginx 就绪检查验证真实证书,不把受限 HTTP Bootstrap 当作启动成功。控制器与 HTTPS 消费端必须能通过配置域名访问本节点的公开 HTTPS 入口;DNS 指向错误、NAT 无回环能力或 CDN 提供不同证书会明确显示不匹配,不能关闭验证来绕过。

域名 DNS、公网 HTTP-01 TCP 80 和实际 HTTPS 入口仍是部署前置条件;DNS-01 暂未实现。端口冲突、DNS/CAA、CA 授权及限流失败保持诊断和退避,首次失败不开放明文业务,续期失败保留仍然有效的旧证书。账户、完整证书代际与业务数据必须独立备份,不能使用删卷或清理缓存代替恢复。

存量外部证书的迁移助手、旧产品证书卷恢复与首次拓扑切换步骤见自动 TLS 迁移说明。Direct 由旧 8443 转到 443 还需要受保护的 endpoint/rebind 操作,保留身份及配对关系。PR #9 已合并;PR #10 补齐 Direct 443 endpoint 事务校验,保留 Relay 高端口。三节点实际迁移见 Audit-and-Validation。

⚠️ **GitHub.com Fallback** ⚠️