这是一篇没任何基础的人实战结合gpt从新梳理的sub2api部署本地的vm虚拟机里面的教程
anzi
·
2026-04-29
·
via LINUX DO - 最新话题
前言:本人是代码能力为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 位参与者 阅读完整话题
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。