Skip to content

香港生产部署执行手册(OneSeat)

定案时间:2026-07-18。本页是采购与上线的执行记录,容量/阈值/压测细节见分阶段方案,架构总览见方案速览

已定案的路线

决策结论理由
地域中国香港(整套:ECS + RDS + Redis)免 ICP 备案可立即上线;上游直连(服务器→AI 上游是请求链路的大头);一套栈兼顾大陆与亚太
数据层阿里云托管:RDS PostgreSQL + Tair/Redis 标准主从按 100~500 用户第二阶段建设;自动备份/PITR/切换交给云
应用自有 ECS 跑 docker-compose.standalone.yml + override 单容器C 端 API 与管理后台是同一个 Go 二进制,拆不开也不需要拆
上游API 中转渠道无出口 IP 风控顾虑
Zeaburtestsub.zeabur.app 降级为测试环境生产不放 PaaS:出口 IP 不可控、数据层无自主备份、长连接成本不可测

三条禁项(评估过,别再回头)

  1. Zeabur 应用 + 公网连自己账户的 RDS:出口 IP 属于 Zeabur、随时可能变,白名单失效即停服;且数据库开公网违反安全基线。
  2. Redis 走公网:并发槽位/锁/限流每请求多次往返,同 VPC 内网 p99 < 5ms 是前提。
  3. 数据库和应用拆在两个地方(如应用香港、库杭州):每请求跨境往返,且大陆侧域名解析需备案。

采购清单(全部:阿里云账户,中国香港,同一个「默认专有网络」VPC)

规格定案购买入口
ECS4C8G,g 系列独享型(避开 t 突发/e 经济共享型),可用区 D,Ubuntu 24.04,ESSD 60~100GB,公网按使用流量(峰值 100Mbps),密钥对登录,释放保护开启https://ecs-buy.aliyun.com/
RDSPostgreSQL 18(引擎千万别选成 MySQL),≥2C4G(预算允许上高可用系列 2C8G 跨可用区),100GB,云盘加密开启(仅创建时可开),可用区 D,仅 VPC 白名单、不开公网,自动备份保留 ≥7 天https://rds-buy.console.aliyun.com/
Redis标准主从版,1GB,单分片,Redis 6/7,跨可用区,开备份,仅 VPC 白名单,确认未禁用 EVAL/EVALSHA/SCRIPThttps://kvstore-buy.console.aliyun.com/
OSS一个 Bucket 放逻辑备份异地副本https://www.aliyun.com/product/oss

付费策略:ECS 按量起步跑顺后转包月;RDS/Redis 短周期(3 个月)包月,到期前手动续(记日历),稳定后再开自动续费。

购买后立刻做:把 ECS 内网 IP 加进 RDS 和 Redis 的白名单;到控制台确认 RDS 自动备份已开启。

部署步骤(ECS 上)

配套文件在主仓库 docs/sub2api-tony/deploy-standalone/(.env 模板、override、README)。

bash
# 1. 装 Docker + Caddy 后
mkdir -p /srv/sub2api && cd /srv/sub2api
# 拷入:deploy/docker-compose.standalone.yml + deploy-standalone/{docker-compose.override.yml,.env.example}

# 2. .env:DATABASE_HOST/REDIS_HOST 填 RDS/Redis 内网地址;
#    openssl rand -hex 32 生成 JWT_SECRET 与 TOTP_ENCRYPTION_KEY(终身固定,异地备份)
#    BIND_HOST=127.0.0.1;连接池 DB 25/5、Redis 128/16
cp .env.example .env && vim .env && chmod 600 .env

# 3. override 里钉镜像版本(禁止 latest)后启动
docker compose -f docker-compose.standalone.yml -f docker-compose.override.yml up -d
docker compose -f docker-compose.standalone.yml -f docker-compose.override.yml logs -f sub2api  # 自动迁移;找 "admin password"
curl -fsS http://127.0.0.1:8080/health

Caddy 绑 api.oneseatai.com 反代 127.0.0.1:8080(SSE/WS 注意事项见反向代理与 HTTPS)。安全组只开 22(限自己 IP)/80/443。

数据迁移(旧部署 → 香港)

  • 旧部署(Zeabur/美国机)只是测试数据 → 香港全新初始化,跳过本节。
  • 有真实用户/余额 → 低峰 pg_dump -Fc 导出 → 导入 RDS → 起服务验证登录/Key/余额/用量。必须把旧 .envJWT_SECRETTOTP_ENCRYPTION_KEY 原样带过来(TOTP 密钥不一致 = 全员 2FA 作废)。
  • Redis 不迁:全是运行时状态,新环境自动重建。

流量切换

  1. 香港全链路验收通过(下方清单);
  2. api.oneseatai.com A 记录 → ECS 公网 IP;
  3. CF Worker wrangler.jsonc → SUB2API_ORIGIN 改为 https://api.oneseatai.com,在 sub2api-frontend 仓库 npm run deploy
  4. 旧部署保留观察 3~7 天作回滚兜底,再降级/退掉;
  5. (后续)注册一个不走 Cloudflare 的备用域名指向同一台 ECS,写进用户文档作 fallback base_url。

上线验收

  • [ ] https://api.oneseatai.com/health 通过;SSE 流式请求逐段返回,30 分钟长请求不断流
  • [ ] 管理后台可登录(加 IP/VPN 限制),管理员开 TOTP
  • [ ] 注册→充值→发请求→用量入账 全链路走通(oneseatai.com 经 CF Worker)
  • [ ] RDS 手动备份一次并恢复到临时实例验证可用;OSS 每日 pg_dump 定时任务就位
  • [ ] 磁盘/CPU/内存/RDS 连接数/Redis 内存告警已配(阈值 60%)
  • [ ] .env 密钥已异地备份;5432/6379/8080 无公网暴露

运维基线

  • 升级:pg_dump → 换 override 里的镜像版本 → up -d → 验证。迁移向前自动执行、不可回滚,备份是唯一后悔药。
  • 备份:RDS 自动备份 + PITR 为主,每日 pg_dump 转 OSS 兜底,每月恢复演练一次
  • 扩容触发与阈值表见分阶段方案;加第二台 ECS + ALB 时,两台 .env 必须完全一致(同密钥、同镜像版本),并回看多实例与高可用

本文档用于帮助你理解、部署和运维 Sub2API。使用前请确认上游服务条款与当地法律要求。