Sub2API 是一个开源的 AI API 网关平台,能够将上游 AI 产品的订阅额度(如 Claude、OpenAI、Gemini 等)通过 API Key 的方式分发和管理,提供精确的按量计费和智能调度功能。本文面向想在 Android 手机上通过 Termux 自建 Sub2API 网关的用户,利用 proot-distro 安装 Ubuntu 容器、并在 Termux 原生环境配合数据库完成部署的完整流程。
架构说明
Sub2API 需要 PostgreSQL 和 Redis 作为后端存储和缓存。在 Termux 的 proot 容器中,PostgreSQL 的 initdb 初始化会卡在随机数生成环节,因此数据库和缓存服务安装在 Termux 原生环境,Sub2API 本体运行在 proot Ubuntu 容器内。
前置条件
- 64 位 ARM 设备(
aarch64) - 已安装 Termux(推荐 F-Droid 版本)
- 充足存储空间(proot Ubuntu 约 500 MB,Sub2API + 数据库约 200 MB)
- 稳定的网络连接(可正常访问github)
安装步骤
一、Termux 环境准备
更新软件包并安装 proot-distro:
pkg update && pkg upgrade -y
pkg install proot-distro -y
安装 Ubuntu 容器并登录:
proot-distro install ubuntu
proot-distro login ubuntu
二、Ubuntu 容器基础配置
进入容器后,更新系统并安装必要工具:
apt update && apt upgrade -y
apt install -y wget curl gnupg lsb-release
三、数据库与缓存服务
退出 proot 容器回到 Termux 原生环境:
exit
安装 PostgreSQL 和 Redis:
pkg install postgresql redis
初始化 PostgreSQL 数据目录:
mkdir -p $PREFIX/var/lib/postgresql
initdb -D $PREFIX/var/lib/postgresql/data
启动 PostgreSQL:
pg_ctl -D $PREFIX/var/lib/postgresql/data start
创建数据库用户和数据库:
CREATE USER 填写数据库用户名 WITH PASSWORD '填写数据库密码';
CREATE DATABASE sub2api OWNER 填写数据库用户名;
启动 Redis:
redis-server --daemonize yes
四、安装 Sub2API
重新进入 proot 容器:
proot-distro login ubuntu
配置时区(避免报错):
apt install -y tzdata
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
dpkg-reconfigure --frontend=noninteractive tzdata
使用官方安装脚本下载 Sub2API:
curl -sSL https://raw.githubusercontent.com/Wei-Shaw/sub2api/main/deploy/install.sh | bash
脚本会自动检测架构(linux_arm64)并将程序安装到 /opt/sub2api。进入目录并赋予执行权限:
cd /opt/sub2api
chmod +x sub2api
五、首次配置
启动 Sub2API:
cd /opt/sub2api
./sub2api
在手机浏览器中访问 http://127.0.0.1:8080,进入设置向导。依次完成:
- 数据库配置 — 填写第三步中创建的数据库用户名、密码和数据库名
sub2api,点击检测后下一步 - Redis 配置 — 默认配置一般无需修改,直接点击检测后下一步
- 创建管理员账户 — 填写邮箱和密码,点击提交
配置完成后等待自动重启。注意 Termux 必须保持前台活跃,否则进程被杀死会导致重启失败、配置无法保存。
重启后访问 http://127.0.0.1:8080 使用刚才设置的邮箱和密码登录管理后台。
修复调用外部 API 时的证书验证错误
配置 ChatGPT 等渠道后调用时可能出现以下错误:
Request failed: Post "https://chatgpt.com/backend-api/codex/responses":
tls: failed to verify certificate: x509: certificate signed by unknown authority
原因是 Sub2API(基于 Go)在发起 HTTPS 请求时需验证服务端证书,proot 容器内的 Ubuntu 默认可能缺少完整 CA 证书包,导致无法信任外部服务的 SSL 证书。所有修复命令均在 proot 的 Ubuntu 容器中执行。
# 1. 更新软件包列表
apt update
# 2. 安装 CA 证书包
apt install -y ca-certificates
# 3. 手动更新证书索引
update-ca-certificates --fresh
# 4. 验证证书文件是否存在
ls -l /etc/ssl/certs/ca-certificates.crt
证书验证还依赖系统时间的准确性,检查当前时间:
date
如果时间偏差较大,安装 NTP 并同步:
apt install -y ntpdate
ntpdate pool.ntp.org
证书修复后,必须重启 Sub2API 才能让 Go 程序加载新的系统证书池:
cd /opt/sub2api
./sub2api
用 curl 测试 SSL 握手是否正常:
curl -I https://chatgpt.com
返回 HTTP/2 200 或 HTTP/1.1 200 OK 说明证书验证已正常。
如果问题依然存在,检查代理设置(env | grep -i proxy)或重新安装证书(apt install --reinstall ca-certificates)。
证书文件和 CA 证书包保存在存储空间(~/ssl/ 和 /etc/ssl/certs/)中,重启 Termux 不会删除它们。这项修复只需执行一次,后续重启只需重新启动服务即可,无需重复安装证书。
使用 tmux 保持后台运行
Termux 进程在手机后台容易被系统杀死。安装 tmux 可以让服务在独立会话中长期运行。
安装 tmux:
pkg install tmux -y
启动数据库后,新建 tmux 会话启动 Sub2API:
tmux new -s sub2api
进入会话后进入 proot 并启动:
proot-distro login ubuntu
cd /opt/sub2api
./sub2api
按 Ctrl+B 再按 D 分离会话,服务会在后台继续运行。需要重新连接时:
tmux attach -t sub2api
后续启动流程
Termux 重启或关闭后,所有后台进程(PostgreSQL、Redis、Sub2API)都会被杀死,但证书文件(~/ssl/、/etc/ssl/certs/)保存在存储空间中,不会被删除。不需要重新生成证书或重新安装 ca-certificates 包,只需重新启动服务。
# 1. 启动数据库(Termux 原生环境)
pg_ctl -D $PREFIX/var/lib/postgresql/data start
redis-server --daemonize yes
# 2. 进入 proot 启动 Sub2API
proot-distro login ubuntu
cd /opt/sub2api
./sub2api
# 3. 另开一个 Termux 终端启动 Caddy(如有配置)
cd ~/ssl
caddy run --config ~/Caddyfile
快速查找路径:
ls ~/ssl/ # 应看到 cert.pem 和 key.pem
ls ~/Caddyfile # Caddy 配置文件
ls /opt/sub2api/ # Sub2API 程序
如果 PostgreSQL 启动失败:
pg_ctl -D $PREFIX/var/lib/postgresql/data status
# 重新执行 start 即可
pg_ctl -D $PREFIX/var/lib/postgresql/data start
已知限制
- proot 性能:proot 容器文件 I/O 性能低于原生环境,大量并发请求时可能成为瓶颈
- 后台保活:Android 省电策略会杀死 Termux 进程,tmux 只能缓解不能根除,建议将 Termux 加入系统电池优化白名单
- 端口冲突:
8080端口可能被其他应用占用,如有冲突可通过 Sub2API 配置修改监听端口
总结
在 Termux 上部署 Sub2API 需要将数据库服务(PostgreSQL + Redis)放在原生环境、应用本体放在 proot Ubuntu 容器中运行。配置完成后可获得一个本地的 OpenAI 兼容 API 端点。使用 tmux 可以缓解手机后台进程被杀死的问题。这套方案适合已有上游订阅账号、想在手机上自建 API 中转服务的开发者。