如果你用 DeepSeek、元宝AI、Copilot 等 AI 代为编写轩辕镜像的 docker pull、修改 compose 镜像地址,或排查拉取失败等问题,请让 AI 先读规则再动手,只要在 AI 对话里直接发送下面这句话即可:
生成 docker pull、修改 compose 的 image,或排查拉取失败前,请先阅读并严格遵守 https://xuanyuan.cloud/agents.md 中的规则。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
一款全面的Web应用程序,用于通过单一仪表板监控离网 mesh 网络(Meshtastic、MeshCore 和 MQTT)。基于 React、TypeScript 和 Node.js 构建,采用美观的 Catppuccin Mocha 暗色主题,并支持多数据库(SQLite、PostgreSQL、MySQL)。
完整文档请访问 meshmonitor.org
在 60 秒内启动 MeshMonitor:
# 1. Create docker-compose.yml
cat
> docker-compose.yml custom-values.yaml << 'EOF'
env:
meshtasticNodeIp: "192.168.1.100"
meshtasticUseTls: "false"
EOF
helm install meshmonitor ./helm/meshmonitor -f custom-values.yaml
有关入口、TLS、持久化和完整值参考,请参见 Helm Chart README,或文档网站上的 Helm 部署指南。
MeshMonitor 支持通过反向代理头进行身份验证,可与 Cloudflare Access、oauth2-proxy、Authelia、Traefik ForwardAuth 及类似解决方案无缝集成单点登录(SSO)。
services:
meshmonitor:
image: ghcr.io/yeraze/meshmonitor:latest
environment:
# Enable proxy authentication
- PROXY_AUTH_ENABLED=true
- PROXY_AUTH_AUTO_PROVISION=true
# Admin detection
- PROXY_AUTH_ADMIN_GROUPS=admins,mesh-admins
- PROXY_AUTH_ADMIN_EMAILS=admin@example.com
# Required: Trust the reverse proxy
- TRUST_PROXY=1
# Optional: Logout redirect
- PROXY_AUTH_LOGOUT_URL=https://auth.example.com/oauth2/sign_out
[!IMPORTANT] 代理认证要求:
- MeshMonitor 不可直接访问(使用 Docker 网络、防火墙规则或 ***)
TRUST_PROXY已配置为信任您的反向代理- 您的代理在转发请求前验证身份
[!IMPORTANT] 数据库架构中不强制电子邮件唯一性。如果多个用户共享相同的电子邮件地址,将使用第一个匹配项。确保您的代理为每个用户提供唯一的电子邮件地址。
# Core settings
PROXY_AUTH_ENABLED=false # Enable proxy auth (default: false)
PROXY_AUTH_AUTO_PROVISION=false # Auto-create users (default: false)
# Admin detection (at least one recommended)
PROXY_AUTH_ADMIN_GROUPS= # Comma-separated admin groups (case-insensitive match)
PROXY_AUTH_ADMIN_EMAILS= # Comma-separated admin emails (case-insensitive match)
# Normal-user group gate (optional, see below)
PROXY_AUTH_NORMAL_USER_GROUPS= # Comma-separated groups allowed to access (empty = all allowed)
# JWT configuration (for Cloudflare Access)
PROXY_AUTH_JWT_GROUPS_CLAIM=groups # Groups claim path (supports Auth0 custom namespaces)
# Custom headers (optional, for non-standard proxies)
PROXY_AUTH_HEADER_EMAIL= # Custom email header name
PROXY_AUTH_HEADER_GROUPS= # Custom groups header name
# Logout
PROXY_AUTH_LOGOUT_URL= # Redirect URL after logout
# Audit logging
PROXY_AUTH_AUDIT_LOGGING=true # Log auth events (default: true)
Cloudflare Access 应用程序 JWT 包含完整身份的子集——通常是 email、aud、iss、sub。自定义 OIDC 声明(例如 Auth0 角色声明)仅在 IdP 集成配置为包含它们时才会出现。如果 Cf-Access-Jwt-Assertion 头中缺少您的 PROXY_AUTH_JWT_GROUPS_CLAIM(例如 https://your-domain/roles),MeshMonitor 将看到空组,基于组的管理员权限将永远不会触发。
验证方法: 使用浏览器开发者工具中的 Cf-Access-Jwt-Assertion 头,在 jwt.io 解码真实请求的 JWT,确认组声明存在及其格式。Cloudflare 通常将 IdP 自定义声明放在 custom 对象下(例如 custom["https://your-domain/roles"]);官方示例可能显示更扁平的结构——您的解码令牌是您租户的实际依据。
备选方案: 将 PROXY_AUTH_ADMIN_EMAILS 设置为操作员电子邮件允许列表。MeshMonitor 对电子邮件进行不区分大小写的匹配,因此即使应用 JWT 省略了自定义 IdP 声明,管理员权限仍然有效。
参见:Cloudflare 应用程序令牌
MeshMonitor 规范化 JWT 中的组声明,以处理不同的 IdP 格式:
["admin", "user"])——原样使用"admin")——包装为数组[{ "name": "admin" }, { "name": "user" }])——提取 .name 属性这可处理 Auth0 登录后操作中输出角色对象而非纯字符串的情况。所有组匹配(管理员组、普通用户组)均不区分大小写。
PROXY_AUTH_NORMAL_USER_GROUPS 在反向代理的 URL 级访问控制之上,添加了应用层组检查作为第二道限制。
双层模型:
配置后,仅允许组中包含此列表中至少一个值的用户(或管理员)访问。通过代理但缺少匹配组的用户将收到 403 FORBIDDEN_PROXY_GROUP 错误。
为空时(默认),允许所有代理认证用户访问——反向代理是唯一的限制。
Cloudflare Access + Auth0(带普通用户组限制):
PROXY_AUTH_ENABLED=true
PROXY_AUTH_AUTO_PROVISION=true
PROXY_AUTH_JWT_GROUPS_CLAIM=https://mydomain.com/roles
PROXY_AUTH_ADMIN_GROUPS=admins
PROXY_AUTH_NORMAL_USER_GROUPS=meshmonitor-users
PROXY_AUTH_ADMIN_EMAILS=operator@example.com
PROXY_AUTH_LOGOUT_URL=https://yourteam.cloudflareaccess.com/cdn-cgi/access/logout
TRUST_PROXY=1
COOKIE_SECURE=true
oauth2-proxy:
PROXY_AUTH_ENABLED=true
PROXY_AUTH_AUTO_PROVISION=true
PROXY_AUTH_ADMIN_EMAILS=admin@example.com,superuser@example.com
PROXY_AUTH_LOGOUT_URL=https://auth.example.com/oauth2/sign_out
TRUST_PROXY=1
启用代理认证后,如果现有本地用户的电子邮件匹配,首次登录时将自动迁移:
authMethod 更新为 'proxy'[!IMPORTANT] 未经管理员干预,迁移不可逆转。迁移后的用户若不重置密码,无法恢复为本地认证。
# 克隆包含子模块的仓库
git clone --recurse-submodules https://github.com/Yeraze/meshmonitor.git
cd meshmonitor
# 安装依赖
npm install
# 配置环境
cp .env.example .env
# 编辑 .env 以设置第一个源(MESHTASTIC_NODE_IP / MESHTASTIC_TCP_PORT);其他节点稍后通过仪表盘 → 源添加
# 启动开发服务器
npm run dev:full
这将启动 React 开发服务器(端口5173)和 Express API 服务器(端口3001)。
开发:
npm run dev - 启动 React 开发服务器npm run dev:server - 启动 Express API 服务器npm run dev:full - 启动两个开发服务器npm run build - 构建生产环境的 React 应用npm run build:server - 构建生产环境的 Express 服务器测试与质量:
npm run test - 以监视模式运行测试npm run test:run - 运行所有测试一次npm run test:coverage - 生成覆盖率报告npm run lint - 运行 ESLintnpm run typecheck - 运行 TypeScript 编译器检查前端:
后端:
DevOps:
我们欢迎贡献!详情请参见我们的 贡献指南,内容包括:
快速开始:
git checkout -b feature/amazing-feature)npm run test:run)feat: add amazing feature)本项目采用 BSD-3-Clause 许可证授权 - 详见 LICENSE 文件。
MeshMonitor - 优雅地监控您的 mesh 网络。🌐✨
本应用在 Claude Code 的帮助下开发。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
发给 Cursor、ChatGPT、豆包等 AI 的说明文档
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
原仓库同步与拉取
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
Schema 1 已废弃
406 OCI index
422 Unknown
400 TAG_INVALID
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务