macOS 本地部署 Zashboard

最近 macOS 平台新出的代理客户端 ClashMac 关注度颇高(此前我使用的是 Sparkle)。由于该软件支持外部 UI 管理,我决定在本地部署 Zashboard 面板,实现更统一的管理体验。

前言

作为一个习惯手写 YAML 配置文件的用户,ClashMac非常适合我(虽然Sparkle开启轻量化模式占用更低,但是不能使用Zashboard管理)

附上一份官方收录的第三方Mihomo工具:https://wiki.metacubex.one/startup/client/client/

想起Zashboard是分为前端和后端的,那我不就可以让常驻在我的Dock栏上的Zashboard Web App同时管理在家和在外的了

起初我尝试使用官方提供的在线前端(https://board.zash.run.place ),但遇到了两个问题:

  1. 当通过 HTTPS 访问在线面板并导出为 Safari Web App 时,浏览器会因安全策略阻止其访问本地的 HTTP 后端接口。
  2. 如果改用 HTTP 协议访问在线面板,浏览器地址栏会常驻“不安全”的红色警告,且加载速度受网络环境影响较大(官方的是通过GitHub部署的)。

因此,在本地部署一个轻量级的前端服务成为了最佳解决方案。

部署步骤

1. 下载静态文件

直接从 GitHub Releases 下载构建好的静态文件:

下载最新的 dist.zip 或适合你的(官方有说明),解压后将其放置在一个你习惯的目录下(要一直保留,不能删除)

2. 选择 Web 服务器

虽然 Node.js、Nginx、Caddy 甚至 Python都行 ,但为了追求极致的低资源占用,这里推荐使用 **Static Web Server (SWS)**。它基于 Rust 编写,内存占用极低且对 SPA(单页应用)支持良好。

安装服务器

使用 Homebrew 安装:

1
brew install static-web-server

安装完成后,可执行 which static-web-server 确认路径(通常位于 /opt/homebrew/bin/static-web-server)。

3. 配置开机自启 (Launchd)

我们将使用 macOS 原生的 Launchd 来管理服务。

在终端输入以下命令创建配置文件:

1
nano ~/Library/LaunchAgents/com.user.zashboard.plist

粘贴以下内容。注意:请务必将下方代码中的 /Users/your_username/... 替换为你实际的文件路径。或者叫AI帮你写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "[http://www.apple.com/DTDs/PropertyList-1.0.dtd](http://www.apple.com/DTDs/PropertyList-1.0.dtd)">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.zashboard</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>

<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/static-web-server</string>

<string>--port</string>
<string>3824</string>

<string>--root</string>
<string>/Users/your_username/dist</string>

<string>--page404</string>
<string>/Users/your_username/dist/index.html</string>

<string>--log-level</string>
<string>error</string>
</array>

<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin</string>
</dict>

<key>StandardErrorPath</key>
<string>/tmp/zashboard.err</string>
<key>StandardOutPath</key>
<string>/tmp/zashboard.out</string>
</dict>
</plist>

Ctrl + O 保存,Ctrl + X 退出。

4. 启动服务

执行以下命令加载配置并启动服务:

1
2
3
4
# 卸载可能存在的旧服务(忽略报错)
launchctl unload ~/Library/LaunchAgents/com.user.zashboard.plist 2>/dev/null
# 加载新服务
launchctl load ~/Library/LaunchAgents/com.user.zashboard.plist

此时访问 http://localhost:3824 即可看到面板。

相比于 Node.js 动辄 50MB+ 的内存占用,Static Web Server 在我本地的运行占用仅维持在 5MB 左右,非常轻量。