前言:本人是代码能力为0.5的人,至于为什么部署到本地vm是因为没钱买服务器,
因为涉及到ip地址什么的,代理软件也是,这个要灵活变通,下面是实战结合gpt整理的经验教程,纯小白向
首先你要有个chatgp,不懂就问就好了
这篇教程讲的是:
我有一台 Windows 电脑,里面装了一个 Ubuntu 虚拟机。我想把 Sub2API 装在 Ubuntu 里,然后让电脑、手机、局域网里的设备都能打开它。
Windows 电脑可以打开 Sub2API
手机可以打开 Sub2API
Ubuntu 虚拟机自己也可以上网
Sub2API 跑在 Docker 里面
一、先弄清楚网络
虚拟机就像电脑里的一台"小电脑"。
如果这台"小电脑"只躲在 Windows 后面,手机就找不到它。
所以我们要让它像一台真正接进路由器的电脑一样,出现在家里的局域网里。
这就要用:
桥接模式
在 VMware 里打开虚拟机设置:
虚拟机设置
→ 网络适配器
→ 桥接模式:直接连接物理网络
可以勾上:
复制物理网络连接状态
如果你家电脑是用 Wi-Fi 上网,桥接就要桥到 Wi-Fi 网卡。
如果你家电脑是插网线上网,桥接就要桥到有线网卡。
不要桥到这些东西上:
VMnet1
VMnet8
Clash 虚拟网卡
FlClash 虚拟网卡
VPN 网卡
Tailscale 网卡
ZeroTier 网卡
WSL 网卡
VirtualBox 网卡
这些都不是你真正连路由器的网卡。
二、查看 Ubuntu 的地址
设置好桥接后,重启 Ubuntu:
sudo reboot
重启后,在 Ubuntu 终端输入:
hostname -I
你会看到类似:
192.168.10.7 172.17.0.1 172.18.0.1
这里最重要的是第一个:
192.168.10.7
这就是 Ubuntu 虚拟机在家里局域网里的地址。
以后打开 Sub2API 就用:
http://192.168.10.7:25500
你的地址不一定是 192.168.10.7,要以你自己终端显示的为准。
三、安装 Docker
Sub2API 是放在 Docker 里跑的。
Docker 可以理解成一个"盒子",Sub2API、数据库、Redis 都放在盒子里。
先更新系统:
sudo apt update && sudo apt upgrade -y
安装一些工具:
sudo apt install -y ca-certificates curl gnupg lsb-release
添加 Docker 的钥匙:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
添加 Docker 软件源:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装 Docker:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
检查 Docker 是否装好:
docker --version
docker compose version
如果后面执行 Docker 命令提示权限不够,就先在命令前面加 sudo。
例如:
sudo docker ps
四、创建 Sub2API 文件夹
我们把 Sub2API 放在 /opt/sub2api 里面:
sudo mkdir -p /opt/sub2api
cd /opt/sub2api
五、创建配置文件 .env
.env 就像一张小纸条,里面写着数据库密码、后台密码、端口这些东西。
创建它:
sudo nano .env
填入下面内容:
POSTGRES_DB=sub2api
POSTGRES_USER=sub2api
POSTGRES_PASSWORD=这里改成你的数据库密码
REDIS_PASSWORD=这里改成你的Redis密码
MANAGEMENT_PASSWORD=这里改成你的后台管理密码
JWT_SECRET=这里改成一串很长的随机字符至少32位
SERVER_PORT=25500
SERVER_MODE=release
RUN_MODE=standard
GITSTORE_GIT_USERNAME=
GITSTORE_GIT_URL=
GITSTORE_GIT_TOKEN=
密码自己改,不要照抄"这里改成"。
例如可以写成这样:
POSTGRES_PASSWORD=MyPostgresPassword123456
REDIS_PASSWORD=MyRedisPassword123456
MANAGEMENT_PASSWORD=MyAdminPassword123456
JWT_SECRET=abcdefghijklmnopqrstuvwxyz1234567890ABCDE
保存方法:
Ctrl + O
Enter
Ctrl + X
最后这三行:
GITSTORE_GIT_USERNAME=
GITSTORE_GIT_URL=
GITSTORE_GIT_TOKEN=
本地虚拟机部署一般用不到。
但是写上空值比较稳,不然 Docker 可能一直提醒你没设置。
六、创建 docker-compose.yml
这个文件告诉 Docker:
我要启动 Sub2API
我要启动 PostgreSQL 数据库
我要启动 Redis
它们之间怎么连接
端口怎么开放
创建文件:
sudo nano docker-compose.yml
填入:
services:
sub2api:
image: weishaw/sub2api:0
container_name: sub2api
restart: unless-stopped
ports:
- "25500:25500"
environment:
- SERVER_PORT=${SERVER_PORT}
- SERVER_MODE=${SERVER_MODE}
- RUN_MODE=${RUN_MODE}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- REDIS_PASSWORD=${REDIS_PASSWORD}
- MANAGEMENT_PASSWORD=${MANAGEMENT_PASSWORD}
- JWT_SECRET=${JWT_SECRET}
- GITSTORE_GIT_USERNAME=${GITSTORE_GIT_USERNAME}
- GITSTORE_GIT_URL=${GITSTORE_GIT_URL}
- GITSTORE_GIT_TOKEN=${GITSTORE_GIT_TOKEN}
depends_on:
- postgres
- redis
postgres:
image: postgres:16
container_name: sub2api-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
container_name: sub2api-redis
restart: unless-stopped
command: redis-server --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
volumes:
postgres_data:
redis_data:
保存:
Ctrl + O
Enter
Ctrl + X
这里最关键的是这行:
- "25500:25500"
意思是:
别人访问 Ubuntu 的 25500 端口,就能打开 Sub2API。
七、如果 Docker 拉镜像很慢或失败
有时候会出现这种错误:
i/o timeout
failed to resolve reference
这不是 Sub2API 坏了。
通常是 Ubuntu 访问 Docker Hub 不通。
如果你的 Windows 是靠 FlClash 上网,那 Ubuntu 虚拟机和 Docker 也要走 FlClash。
1. 打开 FlClash 的局域网连接
在 Windows 的 FlClash 里,打开:
允许局域网连接
Allow LAN
然后看 FlClash 的端口。
常见端口是:
7890
7897
7899
以你 FlClash 里显示的为准。
2. 找 Windows 的局域网 IP
在 Windows 打开 CMD,输入:
ipconfig
找到你正在用的 Wi-Fi 或以太网 IPv4 地址。
例如:
192.168.10.5
这个就是 Windows 宿主机在家里局域网里的地址。
注意,不要用 VMnet8 的地址。
桥接模式下,要用 Windows 真正联网的那个地址。
3. 在 Ubuntu 测试代理
假设 Windows 地址是:
192.168.10.5
FlClash 端口是:
7890
在 Ubuntu 输入:
curl -I -x http://192.168.10.5:7890 https://registry-1.docker.io/v2/
如果看到:
HTTP/1.1 401 Unauthorized
这是正常的。
说明 Ubuntu 可以通过 FlClash 访问 Docker Hub。
4. 给 Docker 设置代理
创建 Docker 代理目录:
sudo mkdir -p /etc/systemd/system/docker.service.d
写入配置:
cat << 'EOF' | sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://192.168.10.5:7890"
Environment="HTTPS_PROXY=http://192.168.10.5:7890"
Environment="NO_PROXY=localhost,127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12"
EOF
这里要把:
192.168.10.5:7890
改成你自己的 Windows IP 和 FlClash 端口。
重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker
检查代理有没有生效:
sudo systemctl show --property=Environment docker
如果能看到你写的代理地址,就说明设置好了。
八、启动 Sub2API
进入目录:
cd /opt/sub2api
先拉镜像:
sudo docker pull weishaw/sub2api:0
sudo docker pull postgres:16
sudo docker pull redis:7-alpine
然后启动:
sudo docker compose up -d
查看状态:
sudo docker compose ps
正常会看到类似:
sub2api Up ... healthy 0.0.0.0:25500->25500/tcp
sub2api-postgres Up ...
sub2api-redis Up ...
如果 sub2api 是 healthy,说明它活得好好的。
九、打开 Sub2API 页面
Ubuntu 虚拟机自己打开:
http://127.0.0.1:25500
Windows 宿主机打开:
http://192.168.10.7:25500
手机打开:
http://192.168.10.7:25500
这里的 192.168.10.7 要换成你 Ubuntu 的真实地址。
查 Ubuntu 地址:
hostname -I
十、第一次进入安装向导
打开页面后,会让你配置数据库和 Redis。
这里有一个很重要的地方:
不要填:
localhost
因为这个页面是在 Sub2API 容器里跑的。
在容器里,localhost 不是数据库,而是它自己。
数据库要填:
主机:postgres
端口:5432
用户名:sub2api
密码:你 .env 里的 POSTGRES_PASSWORD
数据库名称:sub2api
SSL 模式:disable / 禁用
Redis 要填:
主机:redis
端口:6379
密码:你 .env 里的 REDIS_PASSWORD
TLS:关闭
后台管理密码就是 .env 里的:
MANAGEMENT_PASSWORD=你的后台管理密码
十一、以后怎么管理
进入目录:
cd /opt/sub2api
查看运行状态:
sudo docker compose ps
看日志:
sudo docker compose logs -f sub2api
重启:
sudo docker compose restart
停止:
sudo docker compose down
重新启动:
sudo docker compose up -d
更新镜像:
sudo docker compose pull
sudo docker compose up -d
十二、几个容易踩坑的地方
1. Docker 拉不下来镜像
如果看到:
i/o timeout
多半是 Docker 访问 Docker Hub 不通。
如果 Windows 是靠 FlClash 上网,就要给 Docker 配代理。
2. 页面打不开
先看容器有没有跑:
cd /opt/sub2api
sudo docker compose ps
要看到:
0.0.0.0:25500->25500/tcp
再查 Ubuntu 地址:
hostname -I
然后用:
http://Ubuntu地址:25500
3. 数据库连接失败
如果页面里数据库主机填了:
localhost
就会失败。
应该填:
postgres
Redis 也一样,应该填:
redis
4. 手机打不开
检查这几件事:
手机和电脑是不是同一个 Wi-Fi
手机是不是连了访客网络
路由器有没有开启 AP 隔离
虚拟机是不是桥接模式
Ubuntu 地址是不是和手机在同一个网段
如果 Ubuntu 防火墙开着,可以放行端口:
sudo ufw allow 25500/tcp
sudo ufw reload
不过如果你执行:
sudo ufw status
看到:
状态:不活动
那就说明 Ubuntu 防火墙没拦。
最后记住三个地址
假设 Ubuntu 的地址是:
192.168.10.7
那就是:
Ubuntu 自己打开:
http://127.0.0.1:25500
Windows 电脑打开:
http://192.168.10.7:25500
手机打开:
http://192.168.10.7:25500
这套方式的意思很简单:
Ubuntu 虚拟机像家里的一台小电脑
Sub2API 住在这台小电脑里
手机和电脑只要知道它的地址
就能去敲门访问它
而 Docker 访问外网时,如果家里只有 Windows 的 FlClash 能出去,就让 Docker 走 Windows 的 FlClash 代理。
这样就完成了。
4 个帖子 - 4 位参与者