跳到主要内容
在Termux上部署Sub2API:手机运行Sub2API网关封面

在Termux上部署Sub2API:手机运行Sub2API网关

写作时间:2026-07-15 2:10:00
更新时间:2026-07-17 02:20
# 教程
# android
# termux
# ai

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,进入设置向导。依次完成:

  1. 数据库配置 — 填写第三步中创建的数据库用户名、密码和数据库名 sub2api,点击检测后下一步
  2. Redis 配置 — 默认配置一般无需修改,直接点击检测后下一步
  3. 创建管理员账户 — 填写邮箱和密码,点击提交

配置完成后等待自动重启。注意 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 中转服务的开发者。