MeshCentral 1.3.1 配置参数详解

MeshCentral 1.3.1 主配置文件 config.json 逐项详解:settings/domains/smtp/letsEncrypt 分类精讲、_前缀注释与大小写行为实测、证书重生成机制、生产配置模板与常见配置故障排查。

MeshCentral远程接入MeshCentral2026/10/27

MeshCentral 1.3.1 配置参数详解

目标:讲清 MeshCentral 主配置文件 config.json 的组织结构、查看与修改方式、核心参数的分类语义与安全相关行为,并给出一份可直接落地的生产配置模板。参数语义以官方 meshcentral-config-schema.json(master 分支,2026-10-27 查询)为准,关键行为(证书重生成、环境变量不写入、_ 前缀注释、meshctrl 配置动作)在 1.3.1 部署环境实测验证。部署过程见《MeshCentral 1.3.1 服务端 Docker Compose 部署指南》。

一、环境信息

  • MeshCentral 版本:1.3.1(官方最新稳定版,Docker Compose 部署,实测环境与本文一致)
  • 宿主系统:Ubuntu 22.04 LTS(x86_64)
  • 配置文件路径:/opt/meshcentral/data/config.json(数据目录 bind mount 视角;服务端内为 /opt/meshcentral/meshcentral-data/config.json)
  • 参数溯源来源:官方配置 Schema https://raw.githubusercontent.com/Ylianst/MeshCentral/master/meshcentral-config-schema.json(实测文件 209,723 字节,查询日期 2026-10-27);首启自动生成的 config.json 模板;官方 Wiki 配置文档
  • 实测行为取证:修改 settings.cert 重启(证书重生成范围)、meshctrl Config 动作、首启日志回显(详见各节)

二、前置条件

  1. 已按部署指南完成 MeshCentral 服务端部署并能登录管理台(或使用 meshctrl 管理通道);
  2. 已获取官方 Schema 文件(推荐下载到本地,供编辑器校验):
curl -LO https://raw.githubusercontent.com/Ylianst/MeshCentral/master/meshcentral-config-schema.json
  1. 理解配置生效机制:config.json 位于 data 目录,服务端只在启动时读取一次,任何修改都需要重启服务端生效。

三、参数查看与修改方式

3.1 直接编辑 config.json(默认方式)

DYNAMIC_CONFIG=false(官方镜像默认)时,config.json 是唯一配置源。实测流程:

vi /opt/meshcentral/data/config.json
docker compose restart meshcentral   # 或 systemctl restart meshcentral

实测确认的三条规则:

  1. 服务端不改写该文件:首启生成模板后,每次重启日志都回显 Pre-existing config found, not recreating... 与 Leaving config as-is. Dynamic Configuration is off.,手工编辑安全;
  2. _ 前缀 = 注释:JSON 不支持注释,MeshCentral 约定以 _ 开头的键为「未启用项」,模板中 _sessionKey、_letsencrypt 整段都是示例;去掉 _ 前缀即启用该参数;
  3. 键名大小写不敏感:官方模板写的是 AllowFraming、WebRTC、AgentPong、SelfUpdate(混合大小写),而 Schema 中定义为 allowFraming、webRTC、agentPong、selfUpdate,两种写法均正常生效——这是服务端读取配置时统一小写化处理的结果。

3.2 环境变量模式(DYNAMIC_CONFIG=true)

官方容器镜像支持以环境变量管理配置:设 DYNAMIC_CONFIG=true 后,HOSTNAME、ALLOW_NEW_ACCOUNTS、USE_MONGODB 等变量会在每次启动时动态生成 config.json。注意两种模式互斥:默认 false 模式下环境变量不写入 config.json(实测 HOSTNAME=meshcentral.lab.local 未生效,证书名称仍以 settings.cert 为准),必须改文件本身。变量清单见部署指南第六章。

3.3 meshctrl Config 动作

命令行工具 meshctrl 提供 Config 动作直接操作 config.json(工具安装见《MeshCentral 命令行工具 meshctrl 实战》):

$ meshctrl Config --show

实测要点:该动作读取执行命令时工作目录下的 ./meshcentral-data/config.json 本地文件(不走服务端通道),因此需在能直接看到 data 目录的机器上执行——容器部署时可在宿主机建一个指向 data 目录的软链 meshcentral-data:

cd /opt/meshcentral && ln -s data meshcentral-data
meshctrl Config --show          # 实测:原样打印 config.json
meshctrl Config --listdomains   # 列出非默认域名

在错误的目录执行时实测报错:

Unable to find config.json.

修改类子动作(同样作用于本地文件,改完需重启服务端):

meshctrl Config --adddomain "MyDomain" --title "My Server Name" --newAccounts false
meshctrl Config --settodomain "MyDomain" --themePack "Stylish-UI"
meshctrl Config --removefromdomain "MyDomain" --title
meshctrl Config --removedomain "MyDomain"

3.4 配置校验

config.json 首行的 $schema 指向官方 Schema,VS Code 等编辑器据此提供参数补全与类型校验;启动时配置不合法会在日志中明确报错并拒绝启用相关特性,属于「宁可启动失败也不静默错配」的取向。

四、参数总览

官方 Schema 的顶层配置节(实测统计,2026-10-27 master 版):

配置节参数量作用
settings124 项服务端全局:端口、证书、数据库、会话、Agent 通道、代理等
domains每域 131 项多域名站点:每个子站点独立的外观、注册、认证、功能开关
domaindefaults—所有域的公共默认值(与 domains 同构)
letsEncrypt8 项Let's Encrypt / ZeroSSL 自动证书
smtp12 项SMTP 邮件服务(通知、邮件验证、邀请)
messaging8 类Telegram/Discord/XMPP/ntfy/Pushover/Slack/CallMeBot/Zulip 消息通知
sendmail / sendgrid / sms—备选邮件通道与短信网关
peers—多服务器互联(服务器间共享设备)

本文第五章精讲日常运维高频参数;冷门参数以官方 Schema 描述为准。

五、核心参数分类详解

5.1 服务与端口(settings)

参数类型/默认说明
certstring证书名称 = 服务端对外主名。首启据此签发自签名证书;实测修改后重启自动重签 HTTPS、代码签名、AMT MPS 三套证书(根证书与 Agent 证书保留,已上线 Agent 不受影响),日志先提示 Error: <新名> does not match name in TLS certificate: <旧名> 再重签
keepCertsbool/false名称不匹配也强制沿用现有 HTTPS/MPS 证书(自定义证书场景)
portint/443HTTPS 主端口(Web 管理台 + Agent WebSocket 共用)
portBindstringHTTPS 端口绑定地址(多网卡场景收敛监听面)
aliasPortint对外呈现的主端口(反向代理映射后与内部不一致时设置)
redirPortint/80HTTP 重定向端口,0 关闭
redirAliasPortint对外呈现的重定向端口
relayPort / relayDNSint / stringWeb 中继(WebRelay)独立端口或专用域名
agentPortintAgent 专用接入端口(与 Web 流量分离,需配套 agentAliasPort)
agentPortTlsboolAgent 专用端口是否启用 TLS
exactPortsbool/falsetrue 时端口被占直接失败,不自动尝试下一端口(排障友好)

💡 说明:容器映射端口后,对 Agent 下发的连接地址来自 cert 名称 + port(或 aliasPort)。内网映射非标准端口(如部署指南的 8131→443)且设备从外部接入时,Agent 侧实际连接 wss://<cert名>:443——容器网络内由网络别名解析;跨网段接入需让 <cert名>:443 真实可达,或用 certUrl(见 5.5)指定下载与连接基准。

5.2 运行模式(settings)

参数类型/默认说明
WANonlybool/false只启用广域网特性:Agent 全部按 DNS 名回连,关闭局域网组播发现
LANonlybool/false只启用局域网特性:Agent 用组播包发现服务端,无需 DNS
maintenanceModebool/false维护模式:仅管理员可登录(也可用服务端控制台 maintenance 命令切换)
SelfUpdatebool+string/falsetrue=每天凌晨自动自更新;设为版本号(如 "1.3.1")则启动时更新到指定版本。容器部署应保持 false,更新走「拉新镜像重建」
plugins.enabledbool/false插件系统开关(官方镜像另有 ALLOW_PLUGINS 环境变量)

5.3 会话与安全(settings)

参数类型/默认说明
sessionKeystringWeb 会话 Cookie 加密密钥。不设置则每次重启随机生成,所有用户登录态失效;多实例共享会话必须显式设置并保持一致
sessionTimeint/60会话 Cookie 有效期(分钟)
sessionSameSitestring/laxCookie SameSite 策略
cookieIpCheckstring/lax会话与来源 IP 的绑定检查强度
dbEncryptKeystringNeDB 内置数据库的整体加密密钥
dbRecordsEncryptKeystring任意数据库下对记录中敏感字段(如设备凭据)的加密密钥
StrictTransportSecuritybool+stringHSTS 头控制,默认 1 年
allowLoginTokenbool/false允许用登录令牌作为 URL 参数替代登录(配合嵌入场景)
allowFramingbool/false允许站点被 iframe 嵌套(默认禁止,防点击劫持;allowedFramingOrigins 可放行指定来源)
lockAgentDownloadbool/false未登录用户禁止下载任何 Agent(含安装脚本与 /meshsettings 配置,公网部署建议开启)

5.4 Agent 通道(settings)

参数类型/默认说明
AgentPongint服务端向 Agent 定期发送心跳的间隔(秒),官方模板默认 300
agentPingint心跳并要求 Agent 应答(更强连通性检测,NAT 超时环境按需调小)
agentIdleTimeoutint/150Agent 无流量多少秒后断开连接
agentsInRamboolAgent 二进制全部载入内存,批量升级更快(内存换速度)
noAgentUpdateint1=禁止服务端更新任何 Agent(版本冻结)
agentUpdateSystemint2=Agent 升级走 meshcore 通道
ignoreAgentHashCheckbool+stringAgent 忽略服务端证书校验(仅调试用,支持 IP 列表/网段)
agentLogDumpbool自动回收 Agent 错误日志到 data 目录
agentCoreDump / agentCoreDumpUsersbool / array自动收集 Agent 崩溃转储及查看权限
npmProxystring服务端下载 npm 包与默认 Agent 时的 HTTP 代理(离线环境配合 agentbuilds 离线路径使用)
agentDownloadsobject指定 Agent 默认文件的 GitHub 下载源

5.5 反向代理与对外暴露(settings + domains)

参数位置说明
tlsOffloadsettings前置 TLS 卸载器/反代时设 true,或设为代理 IP 列表(如 "127.0.0.1,192.168.1.100")以信任转发的 IP 头
trustedProxysettings信任哪些来源的转发头(X-Forwarded-For 等),支持 "CloudFlare" 魔法值自动拉取 CF 网段
aliasPort / redirAliasPortsettings反代对外端口与内部不一致时设置,服务端按此生成对外的链接与 Agent 地址
certUrldomains反代后 Agent 拉取证书/配置用的基准 URL(如 "https://mesh.example.com"),Agent 据此校验服务端
allowedOrigindomains允许的 HTTP Origin 列表;false=按域名自动推断

5.6 数据库(settings)

参数说明
(默认)不配置即使用内置 NeDB(meshcentral.db 等文件),适合中小规模
mongoDbMongoDB 连接串(如 "mongodb://user:pass@host:27017/meshcentral");mongoDbChangeStream/mongoDbBulkOperations 提升事件同步与批量写入性能
mariaDB对象形式 {host, port, user, password, database}
postgres对象形式 {host, port, user, password, database}
mySQL / sqlite3 / acebase其余可选后端(sqlite3 亦可填文件路径启用)
dbExpire各类事件/统计在库内的保留秒数

💡 说明:切换外部数据库不迁移既有 NeDB 数据(需用导出工具或重新纳管)。大规模(数千设备)或需要高可用时选 PostgreSQL/MongoDB;容器镜像请配套选择 -postgresql/-mongodb 变体或用全量镜像。

5.7 站点域名(domains)

domains 以域名为键,"" 即默认域名(访问根路径的站点)。高频参数(每域独立生效):

参数类型/默认说明
title / title2string站点主标题 / 右上角副标题
titlePicture / loginPicturestring450x66 顶栏 Logo / 登录页 Logo(PNG 放 data 目录,填文件名)
welcomeText / welcomePicturestring登录页欢迎语 / 欢迎图
minifybool下发压缩版前端页面(官方容器 MINIFY 默认 true,模板默认 false)
NewAccountsbool登录页开放注册(部署指南实测依赖它完成管理员注册)
newAccountsPassstring注册口令(开放注册又防滥用的折中)
newAccountsCaptchabool注册验证码
userNameIsEmailbool用户名即邮箱
localSessionRecordingbool会话录像存于设备本地(默认 true)
nightModeint0=用户自选昼夜,1=恒夜间,2=恒日间
userSessionIdleTimeoutint空闲自动登出(分钟)
userAllowedIP / userBlockedIParray用户访问的来源 IP 白/黑名单(网段写法 "192.168.1.0/24")
agentAllowedIP / agentBlockedIParrayAgent 接入的 IP 白/黑名单
terminal / desktop / filesobject终端/远程桌面/文件功能的子项(滚动、剪贴板、会话录制等细节开关)
twoFactorCookieDurationDaysint2FA「记住此设备」天数
geoLocation / ipLocationbool设备定位与地图展示
novnc / mstsc / sshbool内置 Web VNC / RDP 网关 / SSH 客户端开关
hideint位掩码隐藏界面元素(1 头部、2 标签、4 页脚、8 标题…)
footer / loginfooterstring登录后/登录前页脚(HTML)

多域名:domains 下新增键即新增子站点(如 "mysite": {...},经 /mysite 路径访问;配 dns 参数可绑定独立域名)。domaindefaults 节为所有域的公共默认。

5.8 邮件与消息通知(smtp / messaging)

smtp(启用后支持邮件验证、设备上下线通知、邀请邮件、账号找回):

参数默认说明
host / port— / 587(或 tls=true 时 465)SMTP 服务器地址与端口
from—发件人地址
user / pass—SMTP 认证凭据
tlsfalse连接即用 TLS(465 隐式 TLS 设 true;587 STARTTLS 保持 false)
tlscertcheck / tlsstrict—服务端证书校验开关
verifyemailtruefalse=不校验邮箱格式与 MX 记录
emailDelaySeconds—设备上下线通知的延迟合并窗口(防轰炸)
name / auth—SMTP 客户端标识 / OAuth2 认证对象

messaging(设备上下线的即时通知与双因素登录推送):telegram(botId+token)、discord(url webhook)、xmpp、ntfy(boolean 或对象配置自建 ntfy)、pushover、slack、callmebot、zulip。用户在个人账号设置里绑定接收账号后生效。

5.9 Let's Encrypt 自动证书(letsEncrypt)

去掉整节的 _ 前缀并填入实际值即启用(需 80 端口公网可达,production 默认 false 先取测试证书):

参数说明
email管理员邮箱(LE 账户,过期提醒)
names证书 DNS 名列表,逗号分隔,首个为主名(应与 settings.cert 一致)
productionfalse=Let's Encrypt 测试证书;true=正式证书
skipChallengeVerification跳过本地 HTTP-80 自检(反代环境)
rsaKeySize密钥位数,默认 2048
nochecks跳过邮箱/域名有效性预检
zerossl改用 ZeroSSL 签发(对象配置)
custom自定义 ACME 服务器

六、生产配置模板

以下模板整合本文高频参数(按内网域名 + SMTP 通知 + 关闭注册的收敛形态;证书名称、邮箱、密钥按实际替换):

{
  "$schema": "https://raw.githubusercontent.com/Ylianst/MeshCentral/master/meshcentral-config-schema.json",
  "settings": {
    "cert": "mesh.example.com",
    "port": 443,
    "redirPort": 80,
    "WANonly": true,
    "sessionKey": "换成64位以上随机字符串",
    "sessionTime": 480,
    "AgentPong": 300,
    "agentIdleTimeout": 150,
    "exactPorts": true,
    "lockAgentDownload": true,
    "allowFraming": false,
    "WebRTC": false,
    "SelfUpdate": false,
    "plugins": { "enabled": false }
  },
  "domains": {
    "": {
      "title": "运维管理台",
      "NewAccounts": false,
      "localSessionRecording": true,
      "userSessionIdleTimeout": 30,
      "welcomeText": "内部设备管理系统,账号请联系管理员开通",
      "nightMode": 0
    }
  },
  "smtp": {
    "host": "smtp.example.com",
    "port": 587,
    "from": "meshcentral@example.com",
    "user": "meshcentral@example.com",
    "pass": "SMTP密码",
    "tls": false,
    "emailDelaySeconds": 60
  },
  "_letsEncrypt": {
    "_comment": "公网部署时去掉本节 _ 前缀启用自动证书,names 需与 settings.cert 一致",
    "email": "admin@example.com",
    "names": "mesh.example.com",
    "production": false
  }
}

要点复核:sessionKey 必设(否则重启全员掉线);WANonly + NewAccounts: false + lockAgentDownload 是公网收敛三件套;exactPorts 让端口冲突在启动时显式报错;SMTP 启用后管理员可在「我的账号」开启设备上下线邮件通知。

七、常见问题

7.1 改了参数没有生效

按顺序检查:① 参数键是否带 _ 前缀(带 = 注释未启用);② 是否重启了服务端(配置仅启动时读取);③ DYNAMIC_CONFIG 模式确认——false 模式下环境变量全部无效(部署指南 4.5 节实测);④ 键名拼写(大小写不敏感但拼写必须准确,用编辑器 Schema 校验兜底)。

7.2 修改 settings.cert 后日志报 Error 且证书重生成

预期行为:先提示名称不匹配,再重签 HTTPS/代码签名/AMT MPS 三套证书;根证书不变,已上线 Agent 无感(部署指南 4.5 节实测,含 OpenSSL 输出)。想保留现有证书不重签可加 keepCerts: true。

7.3 每次重启后所有用户都要重新登录

未设置 settings.sessionKey,服务端每次启动随机生成会话加密密钥,旧 Cookie 全部失效。设置固定 sessionKey(随机长字符串)即可,多实例部署必须一致。

7.4 meshctrl Config --show 报 "Unable to find config.json."

该动作读的是本机当前目录下的 ./meshcentral-data/config.json,不经过服务端(5.3 节实测)。在 data 目录的父目录执行,或按 5.3 节建软链。

7.5 反向代理后 Agent 连不上或证书校验失败

反代改变了 Agent 看到的地址与证书链:设置 domains.""."certUrl" 指向对外 HTTPS 地址,配合 tlsOffload/trustedProxy 信任代理转发的头部,aliasPort 对齐对外端口。调试期可临时 ignoreAgentHashCheck,定位后务必关闭。

7.6 Let's Encrypt 签发失败

最常见原因:80 端口未放行(HTTP-01 挑战必须走 80)、names 与实际域名不符、production: false 拿到的是测试证书(浏览器仍报不可信)。反代环境可设 skipChallengeVerification: true 跳过本地自检。

八、参考链接