楼主
背景:我平时喜欢听podcast,但是有些podcast无法直连,所以我给应用支持了配置PROXY_URL,下面是怎么在服务器上使用容器部署的过程:
- 创建目录
/opt/proxy-client-metacubexd,/opt/proxy-client-metacubexd/data - 使用
openssl rand -hex 32生成三个密钥 - 创建一个.env文件
METACUBEXD_IMAGE=ghcr.io/metacubex/metacubexd-server:v1.271.0
DOCKER_BRIDGE_IP=172.17.0.1
CONTROL_TOKEN='xx'
CLASH_SECRET='xx'
LUMORA_PROXY_PASSWORD='x'- 创建docker compose文件
services:
metacubexd:
image: '${METACUBEXD_IMAGE:?required}'
restart: unless-stopped
security_opt:
- 'no-new-privileges:true'
environment:
CONTROL_TOKEN: '${CONTROL_TOKEN:?required}'
CLASH_SECRET: '${CLASH_SECRET:?required}'
CONTROL_PORT: '8080'
CLASH_API_PORT: '9090'
MIXED_PORT: '7890'
DATA_DIR: /data
TZ: UTC
ports:
- '${DOCKER_BRIDGE_IP:?required}:17890:7890/tcp'
- '127.0.0.1:18080:8080/tcp'
- '127.0.0.1:19090:9090/tcp'
volumes:
- './data:/data'
healthcheck:
test:
- CMD
- wget
- '-qO-'
- 'http://127.0.0.1:8080/api/control/health'
interval: 30s
timeout: 5s
start_period: 20s
retries: 3- 使用docker compose up -d来启动
ssh -N -L 18080:127.0.0.1:18080 -L 19090:127.0.0.1:19090 root@你服务器的ip- 假设已经配置ssh key登录了
- 讲本地的18080映射到服务器的18080端口
- http://127.0.0.1:18080, 访问这个地址, 根据指引导入订阅连接
- 使用刚刚的secret来登录(后端地址是: http://127.0.0.1:19090)
- 因为ssh映射了本地的端口, 所以需要填这个地址. 因为我们没有开发到公网使用, 这个就是给服务器上其他服务使用的
- 一个坑: 第一次启动会去拉geoip.dat(约 17.4 MB), geosite.dat(4.2 MB), country.mmdb(约 7.9 MB)等信息, 10s的超时时间, 如果超时就会关闭内核, 导致虽然激活了订阅, 还是无法看到分组和rules等信息
- 解决办法, 手动下载了放到data目录下. 或者使用另一个proxy来下载
- 登录后, 就可以使用UI界面来切换代理等操作了, 和其他可视化控制的软件一样
- 这样服务器上的其他服务就可以通过
PROXY_URL=http://172.17.0.1:17890来使用了 172.17.0.1是通过ifconfig | grep -C 5 docker或者ip -4 addr show docker0来找到- 如果需要账号和密码, 那么需要在ui界面中添加一个合并覆盖的override的配置, 在这里
http://127.0.0.1:18080/#/profiles,
authentication:
- "username:pwd"- 这样前面的PROXY_URL就是
http://username:pwd@172.17.0.1:17890 - 最后可以远程给配置添加上定时刷新