Linux服务器配置mihomo
一、前言
在 Linux 服务器上安装和配置 mihomo,可以有效解决以下问题:
- 使用
npm安装依赖时出现超时; - 拉取 Docker 镜像缓慢或失败;
- 克隆 GitHub 项目速度极慢。
这些问题多由于网络限制导致,通过科学上网可大幅提升开发与部署效率。
二、前期准备
在搭建代理环境前,请确保具备以下资源:
- 工具:
mihomo(基于 Clash 内核,支持多协议,配置灵活,兼容性强) - 节点资源:已购买的代理节点(如 Trojan、Vmess 等)
- 服务器:一台可远程访问的 Linux 服务器(推荐 Ubuntu/Centos)
- 图形界面(可选):metacubexd(Mihomo 专属面板)或 yacd
- metacubexd(支持更多新特性):http://metacubex.github.io/metacubexd/
- yacd(经典轻量):http://yacd.haishan.me/
三、安装操作
1. 获取mihomo安装包
先确认你的服务器是什么架构的
# 验证架构
uname -m # 输出 x86_64 表示支持 amd64从Mihomo 官方 GitHub Release下载对应的版本,我这里是x86_64架构就下载了mihomo-linux-amd64-v3-v1.19.27.gz
我这里直接在windows上将文件名重命名为:mihomo.gz
当然你也可以上传到服务器再改
2. 上传服务器并解压
直接使用scp上传至服务器
# 上传至服务器
scp ./mihomo.gz root@你的服务器:/usr/local/bin
# 解压
sudo gunzip mihomo.gz
# 执行权限
sudo chmod +x mihomo创建配置和数据目录(存放自动更新的订阅文件):
sudo mkdir -p /etc/mihomo
sudo mkdir -p /var/lib/mihomo # 订阅文件缓存位置3. 编写配置文件
创建 /etc/mihomo/config.yaml:
# 混合端口:同时提供 HTTP 和 SOCKS5 代理,监听本机
mixed-port: 7890
allow-lan: false
bind-address: 127.0.0.1
mode: rule
log-level: info
external-controller: 127.0.0.1:9090 # 强烈建议改为 127.0.0.1
secret: "你的密码" # 可不要
# 代理提供者(自动从机场订阅拉取节点列表)
proxy-providers:
sakuracat:
url: "你的完整机场订阅链接" # 机场提供的 clash 订阅地址
type: http
interval: 86400 # 每小时更新一次
health-check:
enable: true
url: "https://www.gstatic.com/generate_204" # 健康检查,检测节点可用性
interval: 300
path: /etc/mihomo/provider.yaml
# 代理组:定义一个选择组,自动选择节点(或手动指定)
proxy-groups:
- name: PROXY
type: select
use:
- sakuracat
rules:
- MATCH,PROXY重要说明:
mixed-port: 7890:同时开启 HTTP 和 SOCKS 代理端口。Docker 只需使用http://127.0.0.1:7890。- 如果机场订阅链接需要特殊 UA 或转换,可在
proxy-providers下添加header:字段,一般不需要。 - 如果后期发现某些国内域名(比如阿里云镜像)不想走代理,可以增加规则。但我们目的是只为 Docker 拉取镜像使用,全走代理最稳,也无需额外规则。
保存并退出。
4. 创建 systemd 服务
让 Mihomo 作为系统服务常驻后台。
sudo vi /etc/systemd/system/mihomo.service写入:
[Unit]
Description=Mihomo Proxy Service
Documentation=https://github.com/MetaCubeX/mihomo
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=5s
LimitNPROC=500
LimitNOFILE=1000000
# 可选:让日志输出到 journald
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target注意:
-d /etc/mihomo告诉 Mihomo 到该目录寻找config.yaml,这是标准做法。
启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
sudo systemctl status mihomo检查端口监听:
ss -tulnp | grep 7890查看实时日志,确认订阅拉取和节点联通性:
sudo journalctl -u mihomo -f4. 配置 Docker 守护进程代理
现在让 Docker 拉取镜像时通过 127.0.0.1:7890 这个 HTTP 代理。
创建 systemd 覆盖文件:
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf内容:
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,::1,.local"重载并重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker验证代理生效:
docker pull hello-world如果能成功拉取,说明 Docker 已通过 Mihomo 代理访问 Docker Hub。之后所有 docker pull、docker build(在 build 中也需要配置代理,见后文)都会走代理。
Docker 构建镜像时不会继承守护进程的代理环境变量。你需要在执行 docker build 时显式传入:
docker build --build-arg HTTP_PROXY=http://host.docker.internal:7890 \
--build-arg HTTPS_PROXY=http://host.docker.internal:7890 .如果 Docker 版本较旧不支持 host.docker.internal,可以用宿主机 IP 172.17.0.1(默认 docker0 网桥地址)或者直接再在 build 时把宿主机的 127.0.0.1:7890 暴露进去更复杂,通常手动指定即可。
四、注意事项
尽量将订阅链接配置进去,然后使用ui控制面板进行控制
使用ui控制面板需要在你的本地电脑(Windows/Mac)上建立 SSH 隧道,将 VPS 的
127.0.0.1:9090映射到本地的9090bashssh -L 9090:127.0.0.1:9090 root@你的VPS的IP官方wiki(中文): 地址:
github.com/MetaCubeX/mihomo/wiki(全中文)配置完成并启动之后,可以先进行测试验证:
bashcurl -x http://127.0.0.1:7890 https://www.google.com docker search mysql
五、日常维护与常见问题
5.1 验证代理是否真的经过机场节点
可以用 Mihomo 的管理 API 查看:
curl http://127.0.0.1:9090/connections # 需开启 external-controller,这里没开可跳过简单方式:用 curl 测试代理本身是否工作:
curl -x http://127.0.0.1:7890 ip.sb # 如果返回海外 IP,说明代理通了若返回国内 IP,检查配置文件中的 proxy-providers 和节点连接,查看日志。
5.2 订阅自动更新
配置中 interval: 3600 已实现每小时自动拉取。你也可以手动强制更新:
- 通过 Mihomo 的 API(如果开启了
external-controller) - 或者重启服务:
systemctl restart mihomo(会重新下载订阅)
5.3 如何只代理 Docker,不影响宿主机其他程序?
我们的配置中 bind-address: 127.0.0.1 且 mixed-port: 7890,只监听本地环回地址。只有显式设置代理的应用才会走 Mihomo。宿主机其他工具(如 yum、curl 等)如果没有设置环境变量,不受任何影响。
5.4 如果拉取镜像时报 “proxyconnect tcp: dial tcp: lookup...”
- 检查 Mihomo 服务是否运行:
systemctl status mihomo - 检查
/etc/mihomo/config.yaml中是否有语法错误:mihomo -t -d /etc/mihomo可校验配置 - 确认
provider.yaml是否正常生成:ls -l /var/lib/mihomo/provider.yaml - 查看 Mihomo 日志:
journalctl -u mihomo -f
5.5 Docker Build 时也需要代理怎么办?
Docker 构建镜像时不会继承守护进程的代理环境变量。你需要在执行 docker build 时显式传入:
docker build --build-arg HTTP_PROXY=http://host.docker.internal:7890 \
--build-arg HTTPS_PROXY=http://host.docker.internal:7890 .如果 Docker 版本较旧不支持 host.docker.internal,可以用宿主机 IP 172.17.0.1(默认 docker0 网桥地址)或者直接再在 build 时把宿主机的 127.0.0.1:7890 暴露进去更复杂,通常手动指定即可。
六、升级 Mihomo
新版本发布后,重复安装步骤即可:
sudo systemctl stop mihomo
sudo curl -L -o /usr/local/bin/mihomo.gz https://github.com/MetaCubeX/mihomo/releases/download/新版本/mihomo-linux-amd64-新版本.gz
sudo gunzip -f /usr/local/bin/mihomo.gz
sudo chmod +x /usr/local/bin/mihomo
sudo systemctl start mihomo配置无需改动,兼容性极好。