面向个人自托管的轻量级服务器监控 —— 单二进制、内嵌前端、SQLite 落库,无需 MySQL/Redis,5 分钟装好。只做真正用得上的核心功能,不堆砌花哨特性。
🔗 在线演示 Live Demo · 📖 English
- 📊 服务器概览:卡片 / 列表双视图,CPU、内存、硬盘、实时网速、流量一目了然
- 📈 实时监控:WebSocket 实时上报(默认 2s),曲线实时滚动,网速数字逐位平滑跳动
- 🕐 历史记录:1 小时 ~ 数天负载历史,秒级可调采样,SQLite 存储
- 🛰️ 延迟探测:ICMP / TCP / HTTP 探测任务,延迟曲线 + 丢包率
- 🔔 通知告警:离线告警 / 负载超阈值告警,Telegram 推送(含恢复通知)
- ⚙️ 管理后台:服务器拖拽排序、一键安装命令、单管理员密码登录
- 🚀 极简部署:server 单二进制(已内嵌前端)+ agent 单二进制,三端(Linux/macOS/Windows)通用
明确不做:OAuth / 2FA / 多用户、WebSSH、主题市场、多语言。保持轻、保持简单。
| 负载监控 · 实时指标与历史曲线 | 延迟探测 · ICMP/TCP/HTTP |
|---|---|
![]() |
![]() |
自托管监控不缺方案(哪吒 Nezha、Komari 等都很好),Moss 的取舍很明确:
- 零外部依赖:后端用 Go +
modernc纯 Go SQLite 驱动,落库就是一个文件,不用单独跑 MySQL / Redis,1C512M 小鸡也能带。 - 单文件交付:
moss-server把前端构建产物一并内嵌,./moss-server直接裸跑;不想折腾也有 Docker 镜像和一键脚本。 - 够用就好:只做服务器监控 + 延迟探测 + 告警这三件事,UI 干净、配置项少,装上就能用。
适合:有几台到十几台 VPS / 小鸡、想要一个好看又省心的监控面板、不需要企业级多租户的个人玩家。
最简单 —— 一键脚本(菜单式:安装 / 更新 / 卸载,自动生成并打印管理员密码):
bash <(curl -fsSL https://raw.githubusercontent.com/J606y/moss/main/deploy/moss.sh)装完即可用 http://<服务器IP>:8787 直接访问。脚本还会注册全局命令 moss —— 以后在服务器上直接输入 moss 就能重开管理菜单(安装 / 更新 / 卸载 / 查看状态密码 / 日志),不必再记那串 curl。
安装时会询问是否在反向代理(Nginx)后面运行:选「是」则自动以
--trust-proxy启动并仅绑回环127.0.0.1,让应用层限流按真实访客 IP生效;选「否」为直连模式(限流按 socket 来源 IP)。该选择会被记住,moss更新时自动沿用。多层反代(边缘→回源)还需手动补--trusted-proxies,详见下方反向代理小节。
以下为等价的手动方式:
# 方式一:用预构建镜像(GitHub Release / GHCR 发布后可用)
mkdir -p moss && cd moss
curl -fsSL -o docker-compose.yml https://raw.githubusercontent.com/J606y/moss/main/deploy/docker-compose.yml
echo 'MOSS_ADMIN_PASSWORD=你的强密码' > .env # 仅首次初始化生效,之后忽略
docker compose up -d
# 方式二:克隆源码本地构建
git clone https://github.com/J606y/moss.git && cd moss/deploy
echo 'MOSS_ADMIN_PASSWORD=你的强密码' > .env
docker compose up -d --build或单条 docker run:
docker run -d --name moss -p 8787:8787 \
-e MOSS_ADMIN_PASSWORD=你的强密码 \
-v moss-data:/app/data \
ghcr.io/j606y/moss:latest数据库存于命名卷 moss-data(镜像内 /app/data 已归属 nonroot,无需手动 chown)。浏览器访问 http://<服务器IP>:8787。
Release 同时提供自包含的
moss-server-*二进制(已内嵌前端),可不依赖 Docker 直接./moss-server-linux-amd64 --data ./data裸跑。
前面挂一层 Nginx 终止 TLS、对外提供 HTTPS / wss。先让 Moss 容器仅绑回环并开启 --trust-proxy(-p 127.0.0.1:8787:8787 + 启动参数加 --trust-proxy,用于读取真实来源 IP、在 HTTPS 下启用 Secure cookie),再用 Nginx 反代到 http://127.0.0.1:8787。用一键脚本安装时选「反代模式」即自动完成这两步。
应用层限流 + 登录锁定(默认开启):Moss 按真实访客 IP 对
/api限流(默认 600 次/IP/分钟)、对登录等敏感端点更严(默认 10 次/IP/分钟,并对失败登录按 IP 锁定),超限返回429。阈值用环境变量MOSS_RATELIMIT_PER_MIN/MOSS_RATELIMIT_AUTH_PER_MIN调整,设0关闭对应层。如何识别真实访客 IP(安全要点):须开启
--trust-proxy才会读取X-Forwarded-For(否则按 socket 来源 IP——多层反代下那会是回源 Nginx 的 IP,所有访客共用一个限流桶)。各层 Nginx 用$proxy_add_x_forwarded_for追加转发,Moss 不再信任 XFF 最左段(那段客户端可任意伪造,会绕过限流/登录锁定),而是按可信代理名单从右往左取第一个非可信地址作为真实访客:
- 单层(仅一台 Nginx 直连 Moss):无需额外配置,Moss 默认取 XFF 最右段(=该 Nginx 追加的对端 IP,客户端伪造不到)。
- 多层(访客 → 边缘 Nginx → 回源 Nginx → Moss):用
--trusted-proxies列出你自己的边缘节点公网 IP(逗号分隔的 CIDR 或裸 IP,如--trusted-proxies 203.0.113.10,198.51.100.0/24)。Moss 从 XFF 最右往左跳过名单内地址与环回地址,取到的第一个非可信地址即真实访客;攻击者伪造的最左段够不到该位置,无法绕过。
省事 —— 一键反代脚本 nginx-rp(自动装 Nginx + acme.sh 签发并续期证书,支持 HTTP-01 / DNS API / 泛域名):
bash <(curl -fsSL https://raw.githubusercontent.com/J606y/nginx-rp/main/nginx-rp.sh)按提示:反代目标填 http://127.0.0.1:8787,缓存模式务必选「无缓存 none」(Moss 源站自管缓存,选普通/分片缓存会导致发版后卡旧版),域名与证书方式按引导走即可。脚本生成的配置已自带 WebSocket 升级头,/api/ws、/api/agent/ws(实时曲线 + agent 上报)开箱即用。
想手工配 → 见 deploy/nginx.example.conf:一份 Moss 定制的完整示例,核心是 location / 带 WebSocket 升级头、传 X-Forwarded-Proto、并切勿对 HTML 加缓存。
在每台被监控主机上,用后台「添加服务器」拿到的 mk_ token 安装探针:
# Linux / macOS
curl -fsSL https://<你的moss>/install.sh | bash -s -- --endpoint https://<你的moss> --token mk_xxx# Windows(管理员 PowerShell)
powershell -ExecutionPolicy Bypass -Command "& ([scriptblock]::Create((iwr -useb https://<你的moss>/install.ps1))) -Endpoint 'https://<你的moss>' -Token 'mk_xxx'"脚本会从 GitHub Release(J606y/moss)下载对应平台的 agent 二进制,并注册为开机自启服务(systemd / launchd / 计划任务)。
ICMP 探测在 Windows 下需要管理员权限、Linux 下需要 root 或
CAP_NET_RAW;TCP / HTTP 探测无此要求。
moss/
├── web/ # 前端 React + TS + Tailwind + Recharts
├── server/ # 后端 Go + SQLite(modernc 纯 Go 驱动),内嵌前端,单二进制
├── agent/ # 探针 Go + gopsutil,单二进制,WebSocket 上报
├── internal/ # server / agent 共享的协议类型
└── deploy/ # Dockerfile + docker-compose + nginx 反代示例 + 一键脚本 moss.sh
- Agent 通过
ws(s)://<server>/api/agent/ws?token=mk_xxx连接,上报系统指标与探测结果;连接信息 Windows / Linux / macOS 三端通用,仅安装命令不同(install.sh/install.ps1)。 - 浏览器通过
/api/ws订阅实时推送;历史数据按采样间隔聚合入库。
# 1. 构建前端(server 会托管 web/dist)
cd web; npm install; npm run build
# 2. 构建并启动 server(首次启动会打印随机管理密码,或用环境变量指定)
cd ..
go build -o bin/moss-server.exe ./server
$env:MOSS_ADMIN_PASSWORD='你的密码'
.\bin\moss-server.exe --listen :8787 --data .\data --web .\web\dist
# 3. 登录 http://localhost:8787 后台添加服务器,拿到 token 启动本机 agent
go build -o bin/moss-agent.exe ./agent
.\bin\moss-agent.exe --endpoint http://localhost:8787 --token mk_xxx前端热更新开发:cd web; npm run dev(Vite 已配置 /api 代理到 localhost:8787,打开 http://localhost:5173)。
核心功能均已上线并跑在生产环境:服务器监控、延迟探测、Telegram 告警、Docker / 一键脚本部署、Nginx 反代 + TLS/wss。详细变更见 CHANGELOG。
欢迎 Issue / PR / Star ⭐ —— 觉得好用就点个星,这是对项目最大的鼓励。
MIT © j606y


