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 的配置和用户数据。
    mkdir -p /root/data/docker_data/substore
    cd /root/data/docker_data/substore
    
    2.新建一个 docker compose 部署文件。
    nano docker-compose.yml
    
    粘贴下面这个内容到 substore/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.yml
    
    粘贴这些内容到 ginxpm/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

使用

  1. 使用 ip:81 进去 nginx proxy manager,初始账号是 admin@example.com,初始账号的密码是 changeme
  2. 申请 SSL证书
    2.1 进入域名管理页面,划到最底下,点击这个。

    2.2 创建新的 API,照抄图片的配置。

    2.3 创建完成后复制 API Key,粘贴到这里。

3.进行反向代理。
3.1 根据自己对速度和安全的综合衡量选择是否开启 Proxy。加快也没有加快很多,几百毫秒眨一下眼就过去了。

3.2 配置反向代理信息。

我建议是用docker0的网卡地址,一般是 172.17.0.1,用这个就好,减少端口暴露。上面的配置文件有端口号,是 3001

暂停/升级/删除

  • 看上面 Sub-Store 的模板自己替换 substorenginxpm 就好了,就只是替换几个文件夹名字而已。

防火墙的问题

  • 如果你的 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