VPS自建Sub-store(Ubuntu+Docker+npm反代)
你需要准备:
- VPS
- 托管在 Cloudflare 的域名
- SSH 连接工具
安装 Docker 和 Docker compose
- 用一键安装脚本就完事。
curl -sSL <https://get.docker.com/> | sh - 检查是否安装,如果输出版本号就表示安装好了。
docker -v docker compose version - 安装失败,那就去 Docker 官方安装介绍 看教程。
Sub-store
安装
1.新建一个文件夹用来保存 substore 的配置和用户数据。
2.新建一个 docker compose 部署文件。mkdir -p /root/data/docker_data/substore cd /root/data/docker_data/substore
粘贴下面这个内容到nano docker-compose.ymlsubstore/docker-compose.yml。
version: "3.8"
services:
sub-store:
image: xream/sub-store:latest
container_name: sub-store
restart: always
volumes:
- .:/opt/app/data
environment:
- SUB_STORE_FRONTEND_BACKEND_PATH=/20个字母和数字混合 # 修改这里
# <https://1password.com/zh-cn/password-generator>
# 这个网站快速快速帮你随机出来
ports:
- 3001:3001
stdin_open: true
tty: true
<font color="FF0000">SubStore,启动!</font>
docker compose up -d
使用
建议是先进行反向代理,具体教程在下面,其他就是没有建议。
https://你的域名?api=https://你的域名/20个字母和数字混合
暂停
cd /root/data/docker_data/substore
docker compose down
升级
- 先备份数据,以备不测:
cp -r /root/data/docker_data/substore /root/data/docker_data/substore.backup - 开始升级
cd /root/data/docker_data/substore docker compose down docker compose pull docker compose up -d删除
- 先备份数据
cp -r /root/data/docker_data/substore /root/data/docker_data/substore.backup - 删除在你本地的所有 Sub-store 数据。
rm /root/data/docker_data/substore反向代理
安装 Nginx Proxy Manager
粘贴这些内容到mkdir -p /root/data/docker_data/nginxpm cd /root/data/docker_data/nginxpm nano docker-compose.ymlginxpm/docker-compose.yml去:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginxpm-app-1
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Add any other Stream port you want to expose
# - '21:21' # FTP
environment:
# Mysql/Maria connection parameters:
DB_MYSQL_HOST: "db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "nginxpm"
DB_MYSQL_PASSWORD: "nginxpm"
DB_MYSQL_NAME: "nginxpm"
# Uncomment this if IPv6 is not enabled on your host
# DISABLE_IPV6: 'true'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
depends_on:
- db
db:
image: 'jc21/mariadb-aria:latest'
container_name: nginxpm-db-1
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: 'nginxpm'
MYSQL_DATABASE: 'nginxpm'
MYSQL_USER: 'nginxpm'
MYSQL_PASSWORD: 'nginxpm'
MARIADB_AUTO_UPGRADE: '1'
volumes:
- ./mysql:/var/lib/mysql
启动nginx proxy manager :
docker compose up -d
使用
- 使用
ip:81进去nginx proxy manager,初始账号是admin@example.com,初始账号的密码是changeme。 - 申请
SSL证书。
2.1 进入域名管理页面,划到最底下,点击这个。
2.2 创建新的 API,照抄图片的配置。
2.3 创建完成后复制 API Key,粘贴到这里。
3.进行反向代理。
3.1 根据自己对速度和安全的综合衡量选择是否开启 Proxy。加快也没有加快很多,几百毫秒眨一下眼就过去了。
3.2 配置反向代理信息。
我建议是用docker0的网卡地址,一般是 172.17.0.1,用这个就好,减少端口暴露。上面的配置文件有端口号,是 3001。
暂停/升级/删除
- 看上面 Sub-Store 的模板自己替换
substore为nginxpm就好了,就只是替换几个文件夹名字而已。
防火墙的问题
- 如果你的 VPS 是大厂自带防火墙,那太好了,你在厂商提供的那个面板设置就好,下面的你不用管。
- 如果你用的是
ufw,那么执行下面的代码:
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow 22 comment 'ssh'
sudo ufw allow 80 comment 'http'
sudo ufw allow 443 comment 'https'
sudo ufw allow from 172.0.0.0/8 to any
sudo ufw allow from 192.0.0.0/8 to any
sudo ufw allow from 10.0.0.0/8 to any
sudo ufw enable && sudo ufw reload
- 运行
sudo ufw status查看 ufw 的防火墙状态,你可以看到3001没有出现在列表,根据前面的规则,不出现就是默认拒绝。 - 因为 Docker 本身能干预 iptables 规则,也就是说当前 Docker 流量不受 ufw 的管辖。所以,事实上,
3001端口还是开放的。这个问题你自己去研究一下,或关闭 Docker 干预 iptables 规则,或安装这个 ufw-docker ,你自己去试试。 - 推荐浏览 How to use UFW firewall with Docker containers?
云同步
https://github.com/getsomecat/GetSomeCats/blob/Surge/Substore的云同步操作步骤.md
最后,本教程参考链接
https://boom-sumac-5f2.notion.site/VPS-Sub-store-Ubuntu-Docker-npm-93ea3f047fdb41f99c0bd04085e49adc
