在Ubuntu上配置Mihomo代理以及部署CLIProxyAPI
一.配置 Mihomo 及可视化
1.安装依赖与准备工作
sudo apt update && sudo apt install -y wget curl nano gzip tar unzip
sudo mkdir -p /etc/mihomo/ruleset
2. 安装 Mihomo 核心(镜像加速)
cd /tmp
# 获取最新版本号并从镜像下载
VERSION=$(curl -s https://api.github.com/repos/MetaCubeX/mihomo/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
wget "https://mirror.ghproxy.com/https://github.com/MetaCubeX/mihomo/releases/download/${VERSION}/mihomo-linux-amd64-${VERSION}.gz" -O mihomo.gz
# 解压并安装
gunzip mihomo.gz
sudo mv mihomo /usr/local/bin/mihomo
sudo chmod +x /usr/local/bin/mihomo
3.部署 Web UI (metacubexd)
cd /etc/mihomo
sudo wget https://mirror.ghproxy.com/https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip -O ui.zip
sudo unzip ui.zip && sudo mv metacubexd-gh-pages ui && sudo rm ui.zip
4.下载数据库文件
cd /etc/mihomo
sudo wget https://mirror.ghproxy.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.metadb
sudo wget https://mirror.ghproxy.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat
sudo wget https://mirror.ghproxy.com/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat -O Country.mmdb
5.编写配置文件 (含 TUN、订阅与开发规则)
执行 sudo nano /etc/mihomo/config.yaml,粘贴以下内容:
# --- 基础配置 ---
port: 7890
socks-port: 7891
mixed-port: 7892
allow-lan: true
mode: rule
log-level: info
ipv6: false
external-controller: 0.0.0.0:9090
secret: "jiajian233WJH" # 你的 WebUI 登录密码
external-ui: ui
# --- TUN 模式配置 (核心) ---
tun:
enable: true
stack: system
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
- tcp://any:53
# --- 订阅配置 ---
proxy-providers:
my_sub:
type: http
url: "你的订阅链接"
interval: 3600
path: ./sub.yaml
health-check: {enable: true, interval: 600, url: http://www.gstatic.com/generate_204}
# --- 远程规则集 ---
rule-providers:
ai:
type: http
behavior: classical
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/openai.txt"
path: ./ruleset/ai.yaml
interval: 86400
github:
type: http
behavior: classical
url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/github.txt"
path: ./ruleset/github.yaml
interval: 86400
# --- 策略组 ---
proxy-groups:
- name: "🚀 代理转发"
type: select
use: [my_sub]
# --- 规则逻辑 ---
rules:
- RULE-SET,ai,🚀 代理转发
- RULE-SET,github,🚀 代理转发
- GEOIP,LAN,DIRECT
- GEOIP,CN,DIRECT
- MATCH,DIRECT # 兜底直连,保证服务器安全
6.系统转发设置
开启内核 IP 转发,TUN 模式才能正常工作:
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
7.配置 Systemd 守护进程
执行 sudo nano /etc/systemd/system/mihomo.service:
[Unit]
Description=mihomo Daemon
After=network.target
[Service]
Type=simple
# 给予必要的网络管理权限
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE
Restart=always
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
[Install]
WantedBy=multi-user.target
8.启动并验证
sudo systemctl daemon-reload
sudo systemctl enable mihomo
sudo systemctl start mihomo
# 查看状态
sudo systemctl status mihomo
9.访问使用 webui
- Web 访问:
http://服务器 IP: 9090/ui/ - 验证效果:直接在服务器执行
curl https://www.google.com(不需要 -x),如果成功返回,说明 TUN 全局透明代理已生效。 连接监控:在 Web UI 的 "Connections" 页面,你会看到来自服务器内部各个进程的所有网络请求。
10.备注
由于开启了 TUN 模式,如果代理节点挂了,服务器可能会连不上网(包括无法下载规则)。如果发生这种情况,先
sudo systemctl stop mihomo停掉代理,修复网络后再开启。
二.部署 CLIProxyAPI 和 CPA-Manager
自 v6.10.0 版本以后,CLIProxyAPI 及 CPAMC 项目 不再预置数据统计功能。
CPA-Manager 是面向 CLI Proxy API 的单文件 Web 管理面板,并提供可选的 Usage Service 用于持久化请求统计。
CPA 项目 GitHub 仓库:https://github.com/router-for-me/CLIProxyAPI CPA-Manager 项目 GitHub 仓库:https://github.com/seakee/CPA-Manager
1.快速开始(CPA)
参考官方文档:https://help.router-for.me/cn
部署方式
使用源码部署可以避免配置 docker 网络等步骤,推荐 Linux 一键部署脚本:
curl -fsSL https://raw.githubusercontent.com/router-for-me/cliproxyapi-installer/refs/heads/master/cliproxyapi-installer | bash
感谢 brokechubb 开发的 Linux 安装器!
官网文档中也有其他部署方式的说明。
2.快速开始(CPA-Manager)
参考官方文档:https://github.com/seakee/CPA-Manager/blob/main/README_CN.md
部署方式
| 模式 | 入口地址 | 用户需要配置 | 适用场景 |
|---|---|---|---|
| 完整 Docker 方案 | http://<host>:18317/management.html | 首次 setup:CPA 地址 + Management Key;之后登录:只填 Management Key | 新部署、单入口、最少浏览器/CORS 问题 |
| CPA 控制面板方案 | http://<cpa-host>:8317/management.html | 先登录 CPA,再在「配置面板 -> CPA-Manager 配置」配置 Usage Service 地址 | 保留 CPA 自动载入面板的现有习惯 |
| 前端开发方案 | Vite dev server 或 dist/index.html | CPA 地址,可选 Usage Service 地址 | 本地开发 |
完整 Docker 方案不内置 CPA 本体。CPA 仍然作为上游服务独立运行;Docker 镜像提供 Usage Service 和内置管理面板。
CPA 前置条件
请求统计依赖 CPA 的用量队列:
- CPA 必须启用 Management,因为用量队列与
/v0/management使用相同的可用性条件和 Management Key。 - 使用请求监控时,CPA 必须启用用量发布:配置
usage-statistics-enabled: true,或通过PUT /usage-statistics-enabled提交{ "value": true }。CPA-Manager 初始化或保存启用请求监控时会自动打开该开关。
推荐完整 Docker 方案
Docker Hub 镜像
docker run -d \
--name cpa-manager \
--restart unless-stopped \
-p 18317:18317 \
-v cpa-manager-data:/data \
seakee/cpa-manager:latest
打开:
http://<host>:18317/management.html
首次 setup 时填写:
- CPA 地址:
- Docker Desktop 访问宿主机 CPA:
http://host.docker.internal:8317(默认建议值;如果面板构建时设置了VITE_DEFAULT_CPA_BASE_URL,则使用该值) - 同一 compose 网络:
http://cli-proxy-api:8317 - 远程 CPA:
https://your-cpa.example.com
- Docker Desktop 访问宿主机 CPA:
- Management Key
setup 完成后,同一入口地址会使用 Usage Service SQLite 中保存的 CPA 连接。新浏览器只需要在登录页填写 Management Key。
我的选择
我选择使用内置面板的原生运行包部署, 这样可以不用配置 docker 网络,并且对于我个人自用已经足够了。
tar -xzf cpa-manager_vX.Y.Z_linux_amd64.tar.gz
cd cpa-manager_vX.Y.Z_linux_amd64
./cpa-manager
tar 包已保留执行权限,正常解压后不需要额外 chmod +x。macOS 如果提示无法打开未签名程序,可在解压目录执行 xattr -dr com.apple.quarantine . 后再运行。
启动后打开
http://<host>:18317/management.html
原生包不包含 CPA 本体。请让 CPA 独立运行,并在首次 setup 时填写 CPA 地址和 Management Key。setup 完成后,登录页只需要 Management Key。需要自定义数据位置时,可以设置 USAGE_DATA_DIR 或 USAGE_DB_PATH 覆盖默认值。
原生包首次启动时,如果没有设置 USAGE_DATA_DIR 或 USAGE_DB_PATH,会在程序所在目录自动生成 config.json,并把 SQLite 数据写入同目录下的 data/usage.sqlite。这样解压后的目录就是完整的程序和用户数据目录。