news 2026/6/8 22:36:35

Sub2API 从脚本安装迁移到 Docker Compose 部署流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Sub2API 从脚本安装迁移到 Docker Compose 部署流程

Sub2API 从脚本安装迁移到 Docker Compose 部署流程

本文档记录一次实际走通的 Sub2API 迁移流程:旧服务器使用官方脚本安装,配置和程序位于/opt/sub2api;新服务器使用官方docker-compose.local.yml部署,并从 PostgreSQL 备份恢复业务数据。

适用场景

  • 旧服务器:官方安装脚本部署,主配置文件在/opt/sub2api/config.yaml
  • 新服务器:使用 Docker Compose 部署。
  • 备份方式:Sub2API 后台“数据备份”已将 PostgreSQL 备份上传到 S3/R2,文件形如sub2api_20260528_152845.sql.gz
  • Redis:只作为缓存和锁使用,通常不迁移旧 Redis 数据。

一、旧服务器打包

在旧服务器执行:

cd/opt/sub2api# 备份主配置文件cpconfig.yaml /root/sub2api-config.yaml# 备份应用本地数据目录tarczf /root/sub2api-data.tar.gz data

确认旧配置中的数据库、Redis、JWT 等信息:

grep-nA20'^database:'/opt/sub2api/config.yamlgrep-nA20'^redis:'/opt/sub2api/config.yamlgrep-nE'secret|password|client_secret|encryption_key'/opt/sub2api/config.yaml

需要带到新服务器的文件:

/root/sub2api-config.yaml /root/sub2api-data.tar.gz R2/S3 下载下来的 sub2api_YYYYMMDD_HHMMSS.sql.gz

如果不使用 R2/S3 备份,也可以在旧服务器手动导出 PostgreSQL:

PGPASSWORD='<旧库密码>'pg_dump\-hlocalhost\-p5432\-Usub2api\-dsub2api\--no-owner\--no-acl\-f/root/sub2api.sqlgzip-f/root/sub2api.sql

二、把文件放到新服务器/opt

将以下文件上传到新服务器/opt

/opt/sub2api-config.yaml /opt/sub2api-data.tar.gz /opt/sub2api_YYYYMMDD_HHMMSS.sql.gz

示例:

scp/root/sub2api-config.yaml root@<新服务器IP>:/opt/sub2api-config.yamlscp/root/sub2api-data.tar.gz root@<新服务器IP>:/opt/sub2api-data.tar.gzscpsub2api_YYYYMMDD_HHMMSS.sql.gz root@<新服务器IP>:/opt/

三、新服务器准备 Docker Compose

在新服务器执行:

cd/optgitclone https://github.com/Wei-Shaw/sub2api.gitcd/opt/sub2api/deploycp.env.example .envmkdir-pdata postgres_data redis_data

解压旧服务器的本地数据目录:

tarxzf /opt/sub2api-data.tar.gz-C/opt/sub2api/deploy

放入旧配置:

cp/opt/sub2api-config.yaml /opt/sub2api/deploy/config.yaml

四、修改config.yaml

编辑新服务器上的配置:

vi/opt/sub2api/deploy/config.yaml

把旧服务器本地地址改成 Docker Compose 内部服务名:

database:host:postgresport:5432user:sub2apipassword:"<旧数据库密码>"dbname:sub2apisslmode:disableredis:host:redisport:6379password:"<Redis密码>"db:9enable_tls:false

如果旧配置里没有固定的totp.encryption_key,建议现在补上,避免每次重启生成随机密钥:

openssl rand-hex32

把输出填入config.yaml,与jwt:同级:

totp:encryption_key:"<64位hex密钥>"

注意:如果旧实例之前没有固定totp.encryption_key,数据库里已经加密保存的部分 secret 无法在新实例自动解密,需要迁移完成后重新录入。例如:

  • 系统设置里的 S3/R2Secret Access Key
  • Channel Monitor 里的 API Key
  • 已开启 2FA 的用户需要重新绑定或由管理员关闭后再启用

五、修改docker-compose.local.yml

编辑:

vi/opt/sub2api/deploy/docker-compose.local.yml

确认sub2api服务的volumes包含这两行:

volumes:-./data:/app/data-./config.yaml:/app/data/config.yaml

六、修改.env

编辑:

vi/opt/sub2api/deploy/.env

至少保持这些值与config.yaml一致:

POSTGRES_USER=sub2api POSTGRES_PASSWORD=<旧数据库密码> POSTGRES_DB=sub2api REDIS_PASSWORD='<Redis密码>' REDIS_DB=9 JWT_SECRET=<旧配置里的 jwt.secret> TOTP_ENCRYPTION_KEY=<config.yaml 里的 totp.encryption_key>

如果 Redis 密码包含>^!等特殊字符,建议在.env中使用单引号包裹。

七、启动 PostgreSQL 和 Redis

先只启动数据库和 Redis:

cd/opt/sub2api/deploydockercompose-fdocker-compose.local.yml up-dpostgres redisdockercompose-fdocker-compose.local.ymlps

确认sub2api-postgressub2api-redis都是Healthy

八、导入 PostgreSQL 备份

用 R2/S3 下载下来的备份文件恢复数据库:

gunzip-c/opt/sub2api_YYYYMMDD_HHMMSS.sql.gz\|dockercompose-f/opt/sub2api/deploy/docker-compose.local.ymlexec-Tpostgres\psql-Usub2api-dsub2api

如果.env中的数据库用户名或库名不是sub2api,同步替换命令里的-U-d

九、启动 Sub2API

数据库恢复完成后启动主服务:

dockercompose-f/opt/sub2api/deploy/docker-compose.local.yml up-dsub2apidockercompose-f/opt/sub2api/deploy/docker-compose.local.yml logs-fsub2api

正常情况下可以看到:

[Backup] 定时备份已启用: 0 2 * * *

如果出现下面日志:

TOTP encryption key auto-generated

说明固定的totp.encryption_key没有生效,需要检查:

  • /opt/sub2api/deploy/config.yaml是否挂载到/app/data/config.yaml
  • config.yaml中是否有totp.encryption_key
  • .env中是否填了TOTP_ENCRYPTION_KEY

十、迁移后检查

迁移完成后检查:

dockercompose-f/opt/sub2api/deploy/docker-compose.local.ymlpsdockercompose-f/opt/sub2api/deploy/docker-compose.local.yml logs--tail=200sub2api

后台检查:

  • 管理员是否能登录
  • 用户、渠道、账号、订阅是否都在
  • 系统设置是否恢复
  • 数据备份配置是否恢复
  • R2/S3 备份是否能测试连接
  • Channel Monitor 是否有解密失败日志
  • 如果使用 2FA,确认用户能否正常登录

如果 R2/S3 连接测试失败,通常是旧数据库里的Secret Access Key因旧加密密钥缺失而无法解密。进入后台“系统设置 -> 数据备份”,重新填写Secret Access Key,保存并测试连接即可。

这里分享一下个人搭建的中转站https://hahacode.com

十一、常见问题

1.pg_dump version报错

看版本应使用:

pg_dump--version

pg_dump version会被当成数据库名,可能触发连接错误。

2. 迁移后日志提示channel_monitor: decrypt api key failed

说明旧库中保存的 Channel Monitor API Key 无法用当前密钥解密。进入后台重新填写对应监控项的 API Key。

3. 迁移后日志提示payment encryption/signing key is not explicitly configured

配置固定的totp.encryption_key后重启服务。

4. Redis 数据要不要迁移

通常不需要。Sub2API 主业务数据在 PostgreSQL,Redis 主要用于缓存、锁和临时状态。新服务器用新 Redis 即可。

5. R2 桶里有文件但后台看不到

Sub2API 备份列表不是扫描 R2/S3 桶,而是读取 PostgreSQL 里的settings.key = 'backup_records'。只要导入的是完整 PostgreSQL 备份,备份记录就会恢复。

这里分享一下个人搭建的中转站https://hahacode.com

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/8 22:32:52

图解人工智能(51)人工智能应用-机器作家

思考一下&#xff0c;人类的语言是受语法约束的&#xff0c;但是单靠语法规则计算机很难写出一篇通顺合理的小说&#xff0c;这是为什么&#xff1f; 语法规则很难穷尽人类的语言现象&#xff0c;很多句子是符合语法的&#xff0c;但却不合常理。 这意味着光有语法规则还不够…

作者头像 李华
网站建设 2026/6/8 22:32:50

3分钟解锁B站缓存视频:m4s-converter终极转换教程

3分钟解锁B站缓存视频&#xff1a;m4s-converter终极转换教程 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾因B站视频突然下架而懊恼&…

作者头像 李华
网站建设 2026/6/8 22:32:12

如何运营一个受欢迎的情感账号?

一、精准定位&#xff08;先锁定人群&#xff0c;再说话&#xff09;- 人群&#xff1a;18-35岁女性为主&#xff08;学生、职场新人、已婚&#xff09;&#xff0c;聚焦亲密关系、自我成长、原生家庭、孤独治愈。- 差异化&#xff1a;别泛情感&#xff0c;选细分——恋爱技巧/…

作者头像 李华
网站建设 2026/6/8 22:24:44

星辰变归来轻量版本体验,小韵互娱手游官网更新官方下载链接

一、灵脉是中后期属性质变的核心养成模块熟悉星辰变归来的老玩家都清楚&#xff0c;角色等级与基础养成达到瓶颈后&#xff0c;灵脉是突破战力上限的关键玩法。很多玩家前期随意点亮脉位、无序升级灵脉&#xff0c;导致属性加成杂乱&#xff0c;无法适配自身职业作战特性。灵脉…

作者头像 李华