这是一篇没任何基础的人实战结合gpt从新梳理的sub2api部署本地的vm虚拟机里面的教程

前言:本人是代码能力为0.5的人,至于为什么部署到本地vm是因为没钱买服务器, 因为涉及到ip地址什么的,代理软件也是,这个要灵活变通,下面是实战结合gpt整理的经验教程,纯小白向 首先你要有个chatgp,不懂就问就好了 这篇教程讲的是: 我有一台 Windows 电脑,里面装了一个 Ubuntu...
这是一篇没任何基础的人实战结合gpt从新梳理的sub2api部署本地的vm虚拟机里面的教程
这是一篇没任何基础的人实战结合gpt从新梳理的sub2api部署本地的vm虚拟机里面的教程

前言:本人是代码能力为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 ...

如果 sub2apihealthy,说明它活得好好的。


九、打开 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 位参与者

阅读完整话题

来源: linux.do查看原文