Docker 部署 Clash

在 linux 环境下可以二级制部署 clash,但是,为了不影响宿主环境,还是选择 Docker。比如 nas 系统,万一把宿主环境搞崩了,得不偿失。

首先创建相关目录文件:

clash
 ├── docker-compose.yml
 └── svc-clash
     └── config.yaml  # Clash 配置文件

docker-compose.yml 内容如下:

version: "3"

services:
  # Clash
  svc-clash:
    image: dreamacro/clash
    container_name: svc-clash
    volumes:
      - ./svc-clash/config.yaml:/root/.config/clash/config.yaml
    ports:
      - "7890:7890/tcp"
      - "7890:7890/udp"
      - "9090:9090"
    restart: always
    networks:
      - default
  # Clash Dashboard
  svc-clash-dashboard:
    image: centralx/clash-dashboard
    container_name: svc-clash-dashboard
    ports:
      - "12345:80"
    restart: always
    networks:
      - default

# Networks
networks:
  default:
    driver: bridge
    name: svc

Clash 部分的 ports 需不需要 socks 的 7891 端口,看自己的需求。

Clash Dashboard 部分的 ports 宿主机端口,我这里是 12345,因为我的 80 端口已经用作其他服务了。自己想要设为什么端口就写啥(非已经占用端口)。

config.yaml 文件的主要内容如下:

port: 7890
socks-port: 7891
allow-lan: false
mode: Rule
log-level: silent
external-controller: 0.0.0.0:9090
secret: "123456"

port 和 socks-port 部分可以合并成 mixed: 7890。这样容器就不要考虑 socks 的问题了。

external-controller 部分可以是:127.0.0.1:9090。如果 ui 访问 127.0.0.1 不通,尝试改成 0.0.0.0:9090。

文件处理完毕之后,到对应的文件夹下运行命令:

doccker-compose up -d

然后,浏览器打开 clash ui。地址为主机 ip + 配置的端口。我这里是 12345。

在打开的时候会有一个弹窗,输入配置的端口密钥之类的。如果点击“确定”没反应,说明什么地方配错了。慢慢尝试吧。

然后,设置里面“允许局域网的连接”打开。

使用代理

一般情况(抄一下我参考的文章):

修改其它服务器的 ~/.bash_profile 文件,添加以下内容。

function proxy_off(){
    unset http_proxy
    unset https_proxy
    unset all_proxy
    echo -e "已关闭代理"
}

function proxy_on() {
    export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
    # 将 10.10.10.10 改为你的代理节点
    export http_proxy="http://10.10.10.10:7890"
    export https_proxy="http://10.10.10.10:7890"
    export all_proxy="socks5://10.10.10.10:7890"
    echo -e "已开启代理"
}
# 令配置生效
$ source ~/.bash_profile

# 打开代理
$ proxy_on

# 关理代理
$ proxy_off

其他情况,比如 jellyfin。如果 jellyfin 是直接在宿主环境安装的,使用上面的操作就可以。如果实在容器,可以添加环境变量 –env ALL_PROXY=”http://10.10.10.10:7890″ 和 –env NO_PROXY=”localhost,127.0.0.1,localaddress,.localdomain.com”。

实际使用后发现,浏览器设置代理到 clash 可以,但 jellyfin 环境变量代理不太行。所以,jellyfin 换成了 –add-host 的方式。

在 portainer 的 network 面板,“add additional entry” 里添加 api.themoviedb.org 的 ip。