1. 前期准备

确保你的服务器已经安装了 Docker 和 Docker Compose。如果没有,请先安装:

2. 创建部署目录与文件结构

我们需要创建一个文件夹来存放配置文件和 Web UI 文件。

mkdir -p ~/clash/config
mkdir -p ~/clash/ui
cd ~/clash

3. 下载 Web UI 面板文件

我们将使用 Metacubexd 面板,它对 Clash Meta 的支持最好。我们需要将其静态文件下载到本地,以便 Clash 内核直接服务该页面。

cd ui
# 下载最新版面板压缩包
wget https://github.com/MetaCubeX/metacubexd/releases/download/v1.171.0/metacubexd-gh-pages.zip -O ui.zip
# 解压 (如果提示 unzip 未找到,运行 apt install unzip)
unzip ui.zip
# 删除压缩包
rm ui.zip
# 返回上级目录
cd ..

注意:解压后 ~/clash/ui 目录下应该直接包含 index.html 等文件,或者是包含这些文件的文件夹(如果是文件夹,请确保后续配置路径正确)。

4. 配置 config.yaml

你需要将你的节点订阅信息转换为 Clash 配置文件。

关键点: 必须在配置文件中添加 external-controller 和 external-ui 字段,这样才能访问 Web 界面。

~/clash/config 目录下创建或编辑 config.yaml

nano config/config.yaml

必须要包含的基础配置如下(请将你的节点部分粘贴进来):

# 基础端口配置
port: 7890
socks-port: 7891
allow-lan: true   # 允许局域网/公网连接代理
mode: rule
log-level: info
ipv6: true

# --- Web UI 关键配置 ---
# 监听端口(管理面板端口)
external-controller: 0.0.0.0:9090
# 访问密钥(类似于密码,强烈建议设置,否则极不安全)
secret: "YourStrongPassword"
# 指定 UI 文件路径(容器内的路径,下面 Docker 会挂载)
external-ui: /ui

# --- DNS 配置 (Meta内核推荐配置) ---
dns:
  enable: true
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - https://dns.google/dns-query
    - https://1.1.1.1/dns-query

# --- 代理组和规则 (这里放入你的订阅内容) ---
proxies:
  # ... 你的节点 ...
proxy-groups:
  # ... 你的策略组 ...
rules:
  # ... 你的规则 ...

5. 编写 Docker Compose 文件

~/clash 目录下创建 docker-compose.yml

nano docker-compose.yml

写入以下内容:

services:
  mihomo:
    image: metacubex/mihomo:latest  # 使用最新的 Meta 内核
    container_name: clash-meta
    restart: always
    network_mode: "host" # 推荐使用 host 模式,避免复杂的端口映射,且性能最好
    volumes:
      - ./config:/root/.config/mihomo # 挂载配置文件
      - ./ui:/ui                      # 挂载 UI 文件到容器内
    cap_add:
      - NET_ADMIN # 如果需要 Tun 模式,需要此权限

6. 启动服务

~/clash 目录下运行:

docker compose up -d

查看日志确保运行正常:

docker compose logs -f

如果看到类似 RESTful API listening at: [::]:9090 的日志,说明启动成功。

7. 访问 Web UI

现在,你可以通过浏览器访问你的服务器 IP:

  • 地址: http://<你的服务器IP>:9090/ui
  • 注意: 结尾必须带 /ui,因为我们在配置里设置了 external-ui

登录步骤:

  1. 浏览器打开上述地址,你应该能看到 Metacubexd 的界面。
  2. 如果提示连接失败,点击设置(Settings)图标。
  3. API Base URL: 填写 http://<你的服务器IP>:9090
  4. Secret: 填写你在 config.yaml 里设置的 secret 密码。
  5. 点击 Add/Update。

8. 安全与网络提示

⚠️ 高风险警告:

如果你使用的是云服务器(VPS),将 9090 (管理端口)7890 (代理端口) 暴露在公网是非常危险的,容易被扫描和盗用流量。

建议采取以下任一安全措施:

  1. 修改 Secret: 确保 config.yaml 里的 secret 非常复杂。
  2. 防火墙白名单: 使用 ufw 或云厂商的安全组,只允许你自己的 IP 访问 9090 端口。
  3. SSH 隧道(推荐):
    • 不要在公网开放 9090 端口(将配置改为 127.0.0.1:9090)。
    • 本地电脑运行:ssh -L 9090:127.0.0.1:9090 root@你的服务器IP
    • 然后在本地浏览器访问 http://localhost:9090/ui

常见问题排查

  • 无法访问 UI: 检查云服务器的安全组(防火墙)是否放行了 9090 端口。
  • Docker 权限问题: 确保 ./ui 目录有读取权限。
  • 订阅更新: 这种方式需要手动更新 config.yaml。如果要自动更新订阅,建议在 Web UI 里的 "Providers" (代理集合) 中配置 proxy-providers 引用你的订阅链接,而不是直接把节点写死在文件里。