Contents

自建 Clash 订阅转换

本文主要说明Clash订阅转换:Docker搭建后端处理subconverter,以及前端Sub-Web,并利用Nginx反代

2020年12月23日更新:利用Docker-compose一键部署

一、准备工作

首先,你需要两个域名,一个给前端,一个给后端使用,本文举例后端:suc.test.com,前端:sub.test.com

二、搭建后端subconverter

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

修改项目地址:https://github.com/stilleshan/subconverter

后者相对于原版修改了以下部分:

  • 去除自动选择 url-test以解决连接数爆涨问题.
  • 全球拦截增加节点选择,以解决Google Analytics的访问需求.
  • 修改时区 镜像默认时区为Asia/Shanghai

Docker启动

Clone至本地

1
git clone https://github.com/stilleshan/subconverter.git

修改 pref.ini

1
2
3
api_access_token=123456                     #随意设置
managed_config_prefix=https://suc.test.com  #设置成后端域名
listen=127.0.0.1                            #这里改成 127.0.0.1 进行反代

重新构建、启动

1
2
docker build -t stilleshan/subconverter:latest .
docker run  -d --name=subconverter --restart=always -p 25500:25500 stilleshan/subconverter:latest

Nginx反代

将以下配置写入你的网站conf中,本文例子为:suc.test.com.confOneinstack默认网站配置路径为/usr/local/nginx/conf/vhost

1
2
3
4
5
location / {
			proxy_pass       http://0.0.0.0:25500;
			proxy_set_header Host      $host;
			proxy_set_header X-Real-IP $remote_addr;
		}

然后重载Nginx:service nginx reload 最后打开测试:https://suc.test.com/sub?target=clash&url=sub_url 实际上转换只使用后端就足够了,但为了偷懒以及方便选择不同配置还是继续搭建前端

三、搭建前端Sub-Web

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

这里主要说一下如何添加ACL4SSR配置、自定义配置,简要说明安装过程

下载

Clone至本地

1
git clone https://github.com/CareyWang/sub-web.git

修改相关配置

修改/sub-web/src/views/Subconverter.vue文件 找到大约在257行 backendOptions:,替换后面的 http://127.0.0.1:25500/sub?https://sub.test.com/sub? 找到下面RemoteConfig:[,这是自定义规则地址的地方其结构为:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
          {
            label: "第一个label", 
            options: [
              {
                label: "第二个label",
                value:
                  "第二个label的具体地址"
              }
            ]
          },

对应下图: https://dig4.lwnlh.com/images/2020/12/22/2020-12-22_20-27.png 这里添加ACL4SSR的规则配置,只需要将以下配置粘贴过来即可,也可以参照上面结构加入自定义配置

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
        {
            label: "ACL4SSR",
            options: [
              {
                label: "ACL4SSR_Online 默认版 分组比较全 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online.ini"
              },
              {
                label: "ACL4SSR_Online_AdblockPlus 更多去广告 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_AdblockPlus.ini"
              },
              {
                label: "ACL4SSR_Online_NoAuto 无自动测速 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_NoAuto.ini"
              },
              {
                label: "ACL4SSR_Online_NoReject 无广告拦截规则 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_NoReject.ini"
              },
              {
                label: "ACL4SSR_Online_Mini 精简版 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini.ini"
              },
              {
                label: "ACL4SSR_Online_Mini_AdblockPlus.ini 精简版 更多去广告 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_AdblockPlus.ini"
              },
              {
                label: "ACL4SSR_Online_Mini_NoAuto.ini 精简版 不带自动测速 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_NoAuto.ini"
              },
              {
                label: "ACL4SSR_Online_Mini_Fallback.ini 精简版 带故障转移 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_Fallback.ini"
              },
              {
                label: "ACL4SSR_Online_Mini_MultiMode.ini 精简版 自动测速、故障转移、负载均衡 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_MultiMode.ini"
              },
              {
                label: "ACL4SSR_Online_Full 全分组 重度用户使用 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full.ini"
              },
              {
                label: "ACL4SSR_Online_Full_NoAuto.ini 全分组 无自动测速 重度用户使用 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_NoAuto.ini"
              },
              {
                label: "ACL4SSR_Online_Full_AdblockPlus 全分组 重度用户使用 更多去广告 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_AdblockPlus.ini"
              },
              {
                label: "ACL4SSR_Online_Full_Netflix 全分组 重度用户使用 奈飞全量 (与Github同步)",
                value:
                  "https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_Netflix.ini"
              },
              {
                label: "ACL4SSR 本地 默认版 分组比较全",
                value: "config/ACL4SSR.ini"
              },
              {
                label: "ACL4SSR_Mini 本地 精简版",
                value: "config/ACL4SSR_Mini.ini"
              },
              {
                label: "ACL4SSR_Mini_NoAuto.ini 本地 精简版+无自动测速",
                value: "config/ACL4SSR_Mini_NoAuto.ini"
              },
              {
                label: "ACL4SSR_Mini_Fallback.ini 本地 精简版+fallback",
                value: "config/ACL4SSR_Mini_Fallback.ini"
              },
              {
                label: "ACL4SSR_BackCN 本地 回国",
                value: "config/ACL4SSR_BackCN.ini"
              },
              {
                label: "ACL4SSR_NoApple 本地 无苹果分流",
                value: "config/ACL4SSR_NoApple.ini"
              },
              {
                label: "ACL4SSR_NoAuto 本地 无自动测速 ",
                value: "config/ACL4SSR_NoAuto.ini"
              },
              {
                label: "ACL4SSR_NoAuto_NoApple 本地 无自动测速&无苹果分流",
                value: "config/ACL4SSR_NoAuto_NoApple.ini"
              },
              {
                label: "ACL4SSR_NoMicrosoft 本地 无微软分流",
                value: "config/ACL4SSR_NoMicrosoft.ini"
              },
              {
                label: "ACL4SSR_WithGFW 本地 GFW列表",
                value: "config/ACL4SSR_WithGFW.ini"
              }
            ]
          },

安装依赖与打包发布

这里需要安装 NodeYarn 你可以通过以下命令查看是否安装成功

1
2
node -v
yarn -v

安装构建依赖项

1
yarn install

使用 webpack 运行 Web 客户端以进行本地开发

1
yarn serve

浏览器访问 http://服务器ip:8080/ 应该可以进行前端 sub-web 的预览了。

打包

1
yarn build

将生成的 dist 目录复制到你的网站目录下,修改网站 confroot位置,后加 /dist

1
root /root/sub-web/dist;

四、Docker-compose一键部署

参考Yohane聚聚博客:https://yohane.art/development%20notes/2020/12/23/subc.html

创建配置文件

新建/root/nginx/conf.d/server.conf文件,写入以下配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
!/root/nginx/conf.d/server.conf
	
# vhost of subc with proxy
	
server {
        listen 80;
        server_name <domain>;
        location / {
                proxy_pass http://subc:25500;
        }
}

server {
        listen 80;
        server_name <domain>;
        location / {
                proxy_pass http://subweb;
        }        
}

新建/root/subconverter/docker-compose.yml文件,写入以下配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
!/root/subconverter/docker-compose.yml

version: "3"

services:
  subc:
    hostname: subc
    restart: always
    container_name: subc
    image: tindy2013/subconverter:latest
  subweb:
    hostname: subweb
    restart: always
    container_name: subweb
    image: careywong/subweb:latest
  nginx:
    hostname: nginx
    restart: always
    container_name: nginx
    image: nginx:latest
    ports:
      - "80:80"
      - "443:443"
    links:
      - "subc:subc"
      - "subweb:subweb"
    volumes:
      - /root/nginx/conf.d:/etc/nginx/conf.d

启动

1
docker-compose -d

五、总结

至此,你的Clash订阅转换就搭建好了,如果觉得ALC4ALL默认的配置文件不适合你,也可以在此基础上魔改出适合自己的规则,并时刻与ALC4ALL更新的规则同步,这将在后续文章中讲述。