NasNotify-Go 是一个面向绿联 NAS 的通知与控制中心。当前版本已迁移为 Go API + Vite 前端 架构,保留企业微信通道,同时新增微信 ClawBot 网关,并同步黑金风格的网页后台和图片消息卡片。
- 绿联 NAS 查询与控制:状态、通知、存储、Docker、进程、备份、电源、UPS、测试通知,以及风扇/CPU 模式控制。
- 图片卡片优先:常用查询命令优先渲染为黑金风格 PNG 卡片,发送失败时回退为文本或企业微信图文消息。
- 双微信通道:保留企业微信配置与回调菜单,新增微信 ClawBot 扫码绑定与消息轮询。
- 温度兼容解析:CPU 温度会兼容
cpuTemp、temperature、cpu_temp、cpu_temperature等字段别名。 - 跨平台构建:Go 后端可直接运行;同一仓库可以分别产出 macOS DMG、Docker 镜像和绿联 UPK。
nasnotify_go/
├── cmd/nasnotify/ # Go 程序入口
├── internal/app/ # HTTP API、静态资源、任务调度、初始化流程
├── internal/api/ # 企业微信回调与通用 Webhook
├── internal/config/ # 配置读写、敏感字段保留、默认值
├── internal/nas/ # 绿联 NAS API、查询命令、消息文本与图片卡片数据
├── internal/notify/ # 企业微信、ClawBot、统一推送入口
├── internal/notifycard/ # 黑金 PNG 卡片渲染器与字体资源
├── internal/wechatgateway/ # 内置 ClawBot 网关状态、二维码、轮询服务
├── frontend/ugreen-app/ # Vite 黑金后台页面
├── macos/NasNotifyGo/ # macOS 桌面窗口壳应用
├── packaging/ugreen-native-app/# 绿联 UPK 打包骨架
├── scripts/ # macOS / UPK 构建脚本
├── tools/ugcli/ # 本地放置 ugcli,默认不提交二进制
├── Dockerfile
└── go.mod
运行时会使用 data/ 保存配置、登录态与 ClawBot 状态,使用 log/ 保存运行日志。
go mod download
go run ./cmd/nasnotify默认监听端口为 5080,启动后访问:
http://127.0.0.1:5080
首次进入后台需要完成初始化。默认管理密码只用于兼容旧配置,正式使用前请在后台保存新的管理员密码。
cd frontend/ugreen-app
npm ci
npm run dev生产构建:
cd frontend/ugreen-app
npm ci
npm run buildGo 服务会优先读取 macOS app/Docker 资源目录中的 www,开发环境也会兼容本仓库的 frontend/ugreen-app/dist。
后台“基础设置”里需要填写:
本机 NAS 显示名称NAS 地址 / IPNAS MAC 地址本机 NAS 端口本机 NAS 管理账号本机 NAS 管理密码
UPK 安装在绿联 NAS 内部时,NAS 地址 / IP 可以保持默认 127.0.0.1。Docker 和 macOS 版本运行在 NAS 外部时,需要改为真实设备 IP 或可解析域名,例如 192.168.1.9。如需使用远程唤醒,必须填写这台绿联 NAS 的 MAC 地址。
企业微信配置会继续保留:
CorpIDAgentIDCorpSecretTokenEncodingAESKeyNAS 跳转地址图文封面 API企业微信代理地址
回调入口为:
http://<你的公网地址>:5080/wx-receive
保存配置后,程序会尝试同步企业微信自定义菜单。企业微信图片消息会先上传 PNG,再发送图片;失败时回退到文本/图文。
企业微信菜单按 查询、服务、控制 三组组织:查询负责巡检、状态、通知和存储;服务负责 Docker、进程、备份、电源和 UPS;控制提供风扇静音/标准/全速、CPU 性能说明和远程唤醒。CPU 三档也可直接发送 CPU0、CPU1、CPU2 执行。
后台的“微信 ClawBot”页可以生成二维码并扫码登录。绑定完成后,微信里可发送:
菜单
查询菜单
控制菜单
巡检
状态
通知
存储
Docker
进程
备份
电源
UPS
测试
唤醒
风扇2
CPU1
查询类命令会优先返回黑金图片卡片;唤醒 / wol 会向后台配置的本机绿联 NAS 发送 WOL 魔术包。
macOS 产物使用 scripts/build-macos-app.sh 统一构建。脚本会构建 Go 后端、Vite 前端、Swift 桌面窗口壳应用,并生成未公证的自用 DMG。没有 Apple Developer 账号时,脚本默认会做 ad-hoc 本地签名,保证 app bundle 内部代码签名结构完整。
本地构建:
./scripts/build-macos-app.shGitHub Actions 的 Build macOS DMG 可以手动触发。默认 sign_and_notarize=false,不需要 Apple 付费开发者账号,也不需要配置证书 secrets,会生成自用的未公证 DMG。
未公证 DMG 首次安装后,macOS 可能会提示“已损坏,无法打开”。自用时先把应用拖到 /Applications,再在 Mac 上执行一次:
xattr -dr com.apple.quarantine "/Applications/NasNotify-Go.app"如果需要把 DMG 发给其他用户正常下载安装,需要 Apple Developer Program 账号,并在 GitHub 仓库 Settings -> Secrets and variables -> Actions 中配置:
MACOS_CERTIFICATE_P12_BASE64
MACOS_CERTIFICATE_PASSWORD
MACOS_CODESIGN_IDENTITY
APPLE_ID
APPLE_TEAM_ID
APPLE_APP_SPECIFIC_PASSWORD
其中 MACOS_CERTIFICATE_P12_BASE64 是 Developer ID Application 证书 .p12 文件的 base64 内容。配置完成后手动触发 Build macOS DMG,勾选 sign_and_notarize=true,Actions 会导入证书、签名 app、提交 Apple 公证、staple 公证票据并签名/公证 DMG。
本地 macOS 也可以直接使用同一套脚本正式签名公证:
export MACOS_CODESIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)"
export APPLE_NOTARY_KEYCHAIN_PROFILE="nasnotify-notary"
SIGN_AND_NOTARIZE=1 ./scripts/build-macos-app.shWindows 环境不能完整验证 Swift/macOS app 打包,但可以验证 Go 测试和 Vite 构建。
推荐使用 Docker Compose。先复制环境变量模板:
cp .env.example .env普通 bridge 网络模式:
docker compose up -d nasnotify启动后访问:
http://127.0.0.1:5080
如果 Docker 运行在 NAS 所在局域网内,并且需要更稳定地访问内网 NAS 或使用远程唤醒,可以改用 host 网络模式:
docker compose --profile hostnet up -d nasnotify-hostnet注意不要同时启动 nasnotify 和 nasnotify-hostnet,否则会争用同一个监听端口。
配置、登录态和 ClawBot 状态会保存到:
./data
运行日志会保存到:
./log
Docker 镜像会先构建 Vite 前端,再把 dist 复制到最终镜像的 /app/www。
如需验证 Compose 配置:
powershell -ExecutionPolicy Bypass -File .\scripts\check-docker-compose.ps1如需本地构建镜像并用本地镜像启动:
powershell -ExecutionPolicy Bypass -File .\scripts\check-docker-compose.ps1 -Build -SmokeTest本地构建会叠加 docker-compose.local.yml,把镜像标签改为 nasnotify-go:local,不会影响默认使用的 ghcr.io/autunn/nasnotify-go:latest。
也可以直接使用 Docker 命令手动构建:
docker build -t nasnotify-go .
docker run --rm -p 5080:5080 \
-e UGAPP_DATA_DIR=/app/data \
-e UGAPP_LOG_DIR=/app/log \
-e UGAPP_WEB_DIR=/app/www \
-v "$(pwd)/data:/app/data" \
-v "$(pwd)/log:/app/log" \
nasnotify-goUPK 和 DMG、Docker 共用同一套 Go API、Vite 前端和图片卡片逻辑,但产物独立输出。
本地 Windows 构建:
powershell -ExecutionPolicy Bypass -File .\scripts\build-ugreen-native-app.ps1 -Build 1 -Arch all构建流程会执行:
- 安装/复用前端依赖并执行 Vite 构建。
- 将
frontend/ugreen-app/dist同步到packaging/ugreen-native-app/rootfs_common/www。 - 交叉编译 Linux
amd64、arm64后端。 - 调用
ugcli check和ugcli pack生成 UPK。
默认 ugcli 路径为:
tools/ugcli/ugcli-v1.1.0.12-windows-amd64.exe
该二进制默认不提交到 Git。也可以通过 -UgcliPath 指定本机其他路径。
生成文件位于:
packaging/ugreen-native-app/build_dir/pkgs/upk/
UPK 访问模式保持官方应用式 route 打开:NAS 门户、DDNS、UGLink 都走主入口路由和 Unix socket 代理,不需要给用户额外暴露端口。
go test ./...
node --check frontend/ugreen-app/src/main.js
npm --prefix frontend/ugreen-app ci
npm --prefix frontend/ugreen-app run build
node scripts/build-ugreen-frontend.mjs
powershell -ExecutionPolicy Bypass -File .\scripts\check-docker-compose.ps1 -Build -SmokeTestnode_modules/、frontend/ugreen-app/dist/、build/、dist/、UPK 打包输出和 ugcli 二进制均不提交到仓库。