服务器部署mihomo

Nov 19, 2025


前言

我主要是因为需要搭建一个代理服务的环境,用来配置代理服务进行科学上网。现在有很多clash的客户端,但是他们都需要在设备上安装软件,而我期望的方式是直接设置代理服务即可,无需在每台设备上安装clash的客户端,所以要部署在内网服务器作为代理网关。这样所有设备只需要配置代理地址,就能使用统一的代理服务。

目标

  1. 使用订阅连接自动更新路由配置,需要定期更新,并且支持简单快捷的切换订阅连接地址
  2. 带ui控制台,方便管理
  3. 部署在内网服务器,无需公开订阅连接,客户端只需要设置代理地址,配置账号密码即可使用代理
  4. 在linux服务器上使用命令行部署,通过docker容器化运行

部署

clash、clash meta和mihomo简介

Clash 是一款用 Go 编写的基于规则的代理工具,最初由 Dreamacro 开发。它支持多种代理协议,包括 Shadowsocks、VMess、Trojan 等。

Clash Meta(现更名为 Mihomo)是基于 Clash 开源项目的二次开发版本。它继承了 Clash 的核心功能并增加了一些独特的特性,包括部分原 Clash Premium 核心的功能。相比于 Clash,Clash Meta/Mihomo 引入了更多协议支持(如 VLESS XTLS、Trojan XTLS、Hysteria 等)和更丰富的规则控制。

在 2023 年经历了 Clash for Windows 删库事件之后,原 Clash 项目停止更新,于是开发者将 Clash Meta 改名为 Mihomo,继续进行维护和更新。

环境准备

首先我们需要准备部署环境和创建工作目录:

# 创建工作目录
mkdir -p ~/workspace/mihomo/config
cd ~/workspace/mihomo

docker compose部署

创建 docker-compose.yml 文件:

services:
  # 主体服务
  mihomo:
    container_name: mihomo
    image: metacubex/mihomo
    restart: always
    ports:
      - "7890:7890"
      - "7891:7891"
      - "9090:9090"
    volumes:
      - ./config:/root/.config/mihomo
  # ui站点
  metacubexd:
    container_name: metacubexd
    image: ghcr.io/metacubex/metacubexd
    restart: always
    ports:
      - "9097:80"

配置文件准备

创建基础配置文件 config/config.yaml

现在的配置托管地址通常都是包含完整的clash配置文件,因此我们只需要从订阅地址直接下载:

$> curl -s -H "User-Agent: clash" "https://clash.example.top/subscribe" -o ./config/config.yaml

注意:有些服务的订阅地址,会根据User-Agent的请求头来决定返回的内容,比如我用的订阅服务,默认情况下只返回节点列表的base64结果,而加上User-Agent: clash请求头则可以返回完整的clash配置。

更新订阅脚本

创建订阅更新脚本 update.sh

#! /bin/bash
export converter_url="https://clash.example.top/subscribe"
curl -H "User-Agent: clash" $converter_url > ~/workspace/mihomo/config/config.yaml
echo "secret: Pass@word123" >> ~/workspace/mihomo/config/config.yaml
sed -i 's/127.0.0.1:9090/0.0.0.0:9090/' ~/workspace/mihomo/config/config.yaml
sed -i 's/port: 7890/port: 0/' ~/workspace/mihomo/config/config.yaml
sed -i 's/socks-port: 7891/socks-port: 0/' ~/workspace/mihomo/config/config.yaml
sed -i 's/mixed-port: 0/mixed-port: 7890/' ~/workspace/mihomo/config/config.yaml
echo "authentication: " >> ~/workspace/mihomo/config/config.yaml
echo '- "admin:pass@word"' >> ~/workspace/mihomo/config/config.yaml

curl -ik -s -X PUT "http://127.0.0.1:9090/configs" -H "Content-Type: application/json" -H "Authorization: Bearer Pass@word123" -d '{"path": "/root/.config/mihomo/config.yaml"}'

这里的订阅更新脚本做了几件事:

  1. 从订阅链接下载新的订阅配置
  2. 在配置中加入secret配置,指定管理密钥
  3. 将外部控制绑定地址从127.0.0.1:9090改为0.0.0.0:9090
  4. 将代理端口从7890改为0,socks-port端口从7891改为0,mixed-port端口改为7890,这几个端口分别是http代理端口,socks5代理端口,以及混合代理端口
  5. 设置代理认证账号密码,客户端需要使用账号密码才能使用代理,不会随便被人使用
  6. 触发mihomo的核心服务更新配置

设置定时任务

为了让配置自动更新,我们需要添加一个cron任务。

执行cron命令:

$> crontab -e

进入cron任务编辑,输入如下cron表达式:

0 2 * * * ~/workspace/mihomo/update.sh

这个表达式表示每天凌晨2点定期执行~/workspace/mihomo/update.sh脚本,这样就可以通过脚本定期更新配置文件和刷新核心服务配置了。

启动服务

现在只需要在~/workspace/mihomo目录下,执行如下命令即可启动mihomo:

docker compose up -d

使用

Web UI管理

首先通过web ui查看服务的情况。

在浏览器输入地址:

http://127.0.0.1:9097

即可看到如下界面:

输入后端地址:http://127.0.0.1:9090,密钥Pass@word123即可链接核心服务:

Chrome插件

chrome的插件Zero Omega可以非常方便的配置和切换代理。

安装地址Zero Omega

安装后进入选项页:

添加一个profile:

选择Proxy Profile:

输入代理地址:

点击应用即可:

如果你的服务端跟我一样设置了密码,那在输入代理的时候,还需要点击代理地址右边的小锁头图标,输入账号密码才能使用。

设置完成后,只需要在chrome的插件图标中点击Zero Omega,选择mihomo的代理即可让浏览器使用代理上网了。

电脑系统代理

如果希望在整个电脑级别使用代理,可以将mihomo设置为系统代理,不同操作系统设置系统代理的方式不一样,这里以mac为例。

打开设置 -> 网络 -> 详情(当前网络下):

选择代理菜单:

保存即可。

其他操作系统原理是一样的,自行搜索如何设置即可。

手机设置

如果你使用手机连接家里的wifi,则可以在手机的wifi设置代理即可,具体的设置方法可以执行百度。