搭建后端Subconverter

docker compose部署

项目地址:https://github.com/tindy2013/subconverter

Docker官方指引:https://github.com/tindy2013/subconverter/blob/master/README-docker.md

#docker部署
docker run -d --name subcon --restart=always -p 25500:25500 tindy2013/subconverter:latest
​
#docker-compose部署
subconverter:
    image: tindy2013/subconverter:latest
    container_name: subconverter
    restart: always
    ports:
      - 25500:25500
​

MetaCubeX版后端

subconverter-mate:
    image: ghcr.io/metacubex/subconverter:latest
    container_name: subconverter-metacubex
    restart: always
    ports:
      - 25501:25500
​
#docker部署
docker run -d --name subconverter-metacubex --restart=always -p 25501:25500 ghcr.io/metacubex/subconverter:latest

  • Subconverter负责渲染分流规则,后端原版作者是tindy2013,但一直不支持vless,后来MetaCubeX修改了作者的后端,支持vless hy2等

搭建前端Subweb

项目地址:https://github.com/CareyWang/sub-web

配置前端

如果用docker搭建,需要配置前端之后,重新build镜像。

# Clone项目到本地
git clone https://github.com/CareyWang/sub-web.git
cd sub-web

# 编辑.env配置文件
vi .env

# 修改后端地址、短链接地址
# API 后端
VUE_APP_SUBCONVERTER_DEFAULT_BACKEND = "你的后端地址"

因为我这里不需要短链因此其他不做配置

🚀 使用

开发环境

# 启动开发服务器
yarn dev

访问 http://localhost:5173/ 查看应用。

生产构建

# 构建生产版本
yarn build

构建完成后,dist 目录包含所有生产文件。

🐳 Docker 部署

本地构建

如需修改代码并自定义构建:

# 构建镜像
docker build -t subweb-local:latest .

# 运行容器
docker run -d \
  -p 58080:80 \
  --restart always \
  --name subweb \
  subweb-local:latest

Docker Compose 部署

使用 Docker Compose 一键部署完整服务栈(包含 MyUrls 短链接服务):

# 进入 services 目录
cd services

# 编辑 .env 文件,修改端口和域名配置
# 默认配置:SUBWEB_PORT=58080, MYURLS_PORT=8002
vim .env

# 启动所有服务
docker-compose up -d

🌐 部署

Nginx 配置示例

配置 Nginx 作为反向代理和静态文件服务器:

server {
    listen 80;
    server_name your-domain.com;

    # HTTPS 重定向(可选)
    # return 301 https://$server_name$request_uri;

    root /var/www/sub-web/dist;
    index index.html index.htm;

    # SPA 路由支持
    location / {
        try_files $uri $uri/ /index.html;
    }

    # Gzip 压缩
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 6;
    gzip_types
        text/plain
        text/css
        text/javascript
        application/json
        application/javascript
        application/x-javascript
        application/xml
        text/xml;
    gzip_vary on;

    # 静态资源缓存
    location ~* \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff|woff2|ttf|eot)$ {
        access_log off;
        add_header Cache-Control "public,max-age=86400";
        add_header Vary Accept-Encoding;
    }
}

# HTTPS 配置示例(可选)
server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /path/to/your/cert.pem;
    ssl_certificate_key /path/to/your/key.pem;

    # SSL 安全配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    root /var/www/sub-web/dist;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ /index.html;
    }
}

get方式Url长度问题

#nginx设置
client_max_body_size 24M;
client_body_buffer_size 128k;

client_header_buffer_size 5120k;
large_client_header_buffers 16 5120k;