使用 Docker 搭建图形化 Clash 服务端并添加订阅

准备节点配置文件

首先,打开你的科学上网供应商网站,点击类似这样的按钮复制 Clash 的订阅链接

801d5ee6563c3014b3a6c3c145f2ccef

接着把订阅链接粘贴在浏览器地址栏中,回车,正常情况下会下载下来一个 .yaml 文件。内容大概是这样:

bfb7367a3bb725d59cab3233b0fbc3a1

确保 allow-lan 的值为 true、external-controller 的值为 0.0.0.0:9090,否则搭起来也连不上。最后将这个文件重命名为 config.yaml

部署 Clash 核心

Clash 有官方的 Docker 部署教程,以及完整的配置项说明文档。有兴趣深入了解的可以看看,咱们简单粗暴点略过 docker-compose 直接上命令

docker run -d --name=clash -v "$PWD/config.yaml:/root/.config/clash/config.yaml" -p "7890:7890" -p "9090:9090" --restart=unless-stopped dreamacro/clash

回车,不出意外的话会出现一串 16 进制字符,此时 docker ps 可以看到我们刚才跑起来的 clash 核心

在下文中,我们假设 Docker 所在机器的 IP 为 192.168.0.5

部署图形化控制台

如果你有认真阅读 clash 的官方文档,你会发现其实 clash 核心自带一个图形化控制台。但是部署稍微麻烦一些,且不够美观强大。这里我们选择第三方的一个控制台 haishanh/yacd
有三种方案,选一个你喜欢的即可:

1、用现成的在线版控制台
http://yacd.haishan.me/

在后续使用中如果发现在线控制台打不开,请先检查是不是你的科学上网节点挂了

2、静态部署

git clone -b gh-pages https://github.com/haishanh/yacd.git

这是 yacd 作者编译好的版本,克隆下来之后用浏览器访问其中的 index.html 即可

3、自行 Docker 部署

docker run -p 1234:80 -d --rm --name yacd haishanh/yacd

回车,等待容器运行起来,然后访问 192.168.0.5:1234 即可

配置图形化控制台

7d2a6630ddfa5b32aa86b1899b4ffbfc

此处的 API Base URL 填 http://192.168.0.5:9090。然后点击 Add 按钮

请注意右边的那个 Secret(optional) 并非必填项,这是密码的意思。如果你的 config.yaml 内的 secret 为空,那么这里留空即可

然后下面就会出现一行 http://192.168.0.5:9090,点击它连接到 Clash 核心

接下来的操作对于用过 clash 的你来说应该就比较熟悉了

8fbdc5369c86ec84467fb17e391f0095

点击 Proxies(代理),展开节点列表,点击测速,选一个没有超时的节点即可

自动更新配置文件

已经有几个人来问怎么实现自动更新配置了,那我就详细介绍一下吧
创建一个 refresh.sh,跟上面提到的 config.yaml 放在一起。其内容如下:

# 下载节点配置文件
wget -O config.yaml https://你的clash订阅连接
# 有些供应商会把 external-controller 设为 127.0.0.1,导致很多人搭起来连不上。这里替换成 0.0.0.0
sed -i 's/127.0.0.1:9090/0.0.0.0:9090/g' config.yaml
# 重启 clash 容器
docker container restart clash
# 等待 5 秒,clash 服务启动需要一点时间
sleep 5
# 设置你常用的节点。其中 香港 03* 就是我常用节点的名称
curl -X PUT -H "Content-Type: application/json" -d '{"name": "香港 03*"}' "http://192.168.0.5:9090/proxies/PROXY"

有个细节需要注意,最后一步的链接里大写的部分,要替换成你供应商的节点分组名称,一般为 Proxy 或者 PROXY

c41f44412eaca17d8c4555c20c578a10

把 refresh.sh 保存好,通过 Linux 的 crontab 或者群晖的 任务计划 功能,每隔一段时间执行一下这个脚本即可实现自动更新

大功告成

整个部署过程到此结束,可以将 192.168.0.5:7890 设为代理地址尝试科学上网了。如果连不上,请先检查你的配置文件跟我的截图是否相同、检查防火墙设置等等