Skip to content

环境变量参考

所有运行时配置都走 CNV_* 环境变量,不读配置文件、不硬编码敏感值。本页是完整速查。

加载逻辑见 internal/config/config.go。带 ⭐ 的是必填;带 🔒 的与安全强相关,生产务必正确设置。

通用(节点与面板共用)

变量默认说明
CNV_ADDR:8080(节点)/ :8090(面板)HTTP 监听地址
CNV_TLS_CERT / CNV_TLS_KEY进程内 TLS 证书/私钥;两者都设才启用 HTTPS
CNV_TRUST_PROXY 🔒是否解析 X-Forwarded-For/X-Real-IP。详见下文
CNV_SKIP_MIGRATEfalse1 时跳过启动时的自动迁移

节点(magireco-node

角色与通用

变量默认说明
CNV_NODE_ROLEbusiness节点角色:business(全功能)或 edge(仅资源)
CNV_NODE_IDhostname节点唯一标识,用于管控通道身份上报
CNV_NODE_KEY_FILE./data/node.key节点自持密钥文件路径。首次启动自动生成,管理员将密钥复制到面板注册表
CNV_CONTROL_ADDR127.0.0.1:9090管控 WS 监听地址(面板拨号到此)。跨机部署时改为 :9090 并用防火墙限制
CNV_PUBLIC_URL节点对外基准 URL,用于拼接资源地址

业务节点专用(CNV_NODE_ROLE=business

变量默认说明
CNV_DB_URL数据库连接串,按前缀识别驱动。见 选择数据库
CNV_ADMIN_JWT_SECRET ⭐🔒管理后台 cookie 完整性密钥,≥16 字符
CNV_RESOURCE_TOKEN_SECRET可选;resource_token 的 HMAC 签名根密钥。不设则首次启动自动生成并持久化(写入 configresource_token_secret,重启复用)
CNV_PANEL_PUBLIC_URL面板对外 URL(如 https://panel.example.com)。设置后:客户端入口页 /account/register/account/forgot/account/verify-email 302 跳转到面板;并作为 CORS 放行来源,允许面板托管的前端跨域直连本节点 API。留空=单机回落:节点本地托管入口页(零跨域)。见 节点与面板
CNV_WEB_DIR./web前端静态目录。面板用它托管全部人类前端(登录/注册/管理后台/用户中心);业务节点仅在未接入面板(CNV_PANEL_PUBLIC_URL 留空)时回落用它服务客户端入口页
CNV_DIRECTORY_FILE已签名节点目录 JSON 文件路径;设置后随 /client/init 下发给客户端。节点启动时会自检:文件读不到、不是合法 {payload,sig}、或能力分配违规(如边缘节点持有 save)一律拒绝启动(退出码 2);已过期只告警仍启动。详见 多节点架构 · 节点启动自检
CNV_TOTENTANZ_DISCOVERY_URL上游 Totentanz 端点发现接口的完整 URL(形如 https://<引导端点>/magica/api/snaa)。设置后服务端会后台周期拉取真实游戏后端地址,经 services.game_server_base / game_server_host / game_max_threads 下发给客户端。空 = 不启用,完全沿用 KV 配置。详见 客户端协议 · 上游端点发现
CNV_TOTENTANZ_CLIENT_VERSION0向发现接口上报的版本号,对应底包的 rNNN(如 128)
CNV_TOTENTANZ_REFRESH_SEC300发现结果的后台刷新间隔(秒)

安全闸门 🔒

变量默认说明
CNV_SIGNATURE_WHITELIST 🔒APK 签名证书 SHA-256 白名单(64 位小写 hex,逗号分隔)。为空时放行所有签名并打 WARN
CNV_REQUIRE_SIGNATURE 🔒falsetrue 时强制 /client/init 必须带非空 signature
CNV_CHANNEL_WHITELIST渠道白名单,空=放行所有。常用 normal,internal-test

自动封禁没有环境变量:启用开关与各路阈值都存 config 表,在后台「设备封禁」页运行时调整(改完即时生效,无需重启),见 限流与防爆破 · 自动封禁

CNV_TRUST_PROXY 取值

取值含义
空 / off / false不信任任何转发头,只用 TCP 对端(默认,最安全)
all / true / *信任所有上游(仅在确有可信前置网关时)
loopback信任 127.0.0.0/8::1
CIDR 列表仅信任列出的网段,如 10.0.0.0/8,192.168.0.0/16

会话有效期

变量默认说明
CNV_CLIENT_SESSION_TTL7d/client/init 签发的 access_token 有效期
CNV_ADMIN_SESSION_TTL7d管理员 cookie 有效期
CNV_ACCOUNT_SESSION_TTL30d玩家 token 有效期(支持滑动续期)

时长可写秒数(纯数字)或 Go duration(如 720h30m)。

资源与离线包

变量默认说明
CNV_PRIMARY_RES_DIR本地资源目录(业务/边缘节点均可设)
CNV_SECONDARY_RES_DIR$CNV_PRIMARY_RES_DIR边缘节点资源目录(优先级高于 CNV_PRIMARY_RES_DIR
CNV_PRIMARY_RES_PATH/res资源对外 URL 前缀
CNV_OFFLINE_DIR./data/offline离线整包产物目录
CNV_OFFLINE_URL_PATH/dl/offline-pack离线整包对外 URL 前缀
CNV_HOTUPDATE_DIR./data/hotupdate热更新包(JS/剧情)托管目录;服务端下载或接收上传后存此目录并对外提供下载
CNV_HOTUPDATE_URL_PATH/dl/hot-update热更新包对外 URL 前缀
CNV_HOTUPDATE_MAX_MB1024热更新包上传/下载大小上限初值(MiB);管理后台「服务器控制 → 上限」可运行时调整,无需重启
CNV_BODY_LIMIT_MB8全局请求体大小上限初值(MiB);同上可后台运行时调整

SMTP 邮件

变量默认说明
CNV_SMTP_HOSTSMTP 服务器地址;为空则禁用邮件发送
CNV_SMTP_PORT587SMTP 端口
CNV_SMTP_USER / CNV_SMTP_PASSSMTP 认证
CNV_SMTP_FROM发件人地址
CNV_SMTP_FROM_NAME魔法纪录复兴计划发件人显示名

面板(magireco-panel

变量默认说明
CNV_PANEL_KEY ⭐🔒面板 cookie HMAC 签名密钥,≥16 字符
CNV_PANEL_DB_FILE./data/panel.db面板本地 SQLite 路径(节点注册表 + 面板管理员)
CNV_WEB_DIR./web面板托管的游戏前端静态目录(与业务节点同一套 web/)。存在即托管;缺失时根路径回落到内置节点状态页
CNV_ADDR:8090面板 HTTP 监听地址(面板默认改为 8090)
CNV_NODE_BIN安装向导第 4 步勾"本机也装业务节点"时找的 magireco-node 二进制路径。默认:面板自身二进制所在目录的 magireco-node(Windows 是 .exe)。设此变量为绝对路径可覆盖;版本必须与面板字符串严格相等才放过

校验规则

启动时会校验:

  • 业务节点MustValidateNode):CNV_DB_URL 必填;CNV_ADMIN_JWT_SECRET 必须 ≥16 字符。
  • 边缘节点MustValidateNodeCNV_NODE_ROLE=edge):无强制必填,但需有资源目录。
  • 面板MustValidatePanel):CNV_PANEL_KEY 必须 ≥16 字符。

校验不过直接 exit(2) 并打印缺什么。

生产推荐基线

bash
# ── 业务节点 ──
export CNV_DB_URL='postgres://user:pass@db:5432/magireco?sslmode=require'
export CNV_ADMIN_JWT_SECRET="$(openssl rand -hex 32)"
export CNV_SIGNATURE_WHITELIST='<APK 签名 sha256>'
export CNV_REQUIRE_SIGNATURE=true
export CNV_CHANNEL_WHITELIST='normal,internal-test'
export CNV_TRUST_PROXY='loopback'
# 跨机管控时取消注释:
# export CNV_CONTROL_ADDR=:9090

# ── 面板 ──
export CNV_PANEL_KEY="$(openssl rand -hex 32)"
export CNV_ADDR=:8090

上生产前请对照 安全加固清单 逐项确认。

向后兼容(已废弃变量)

以下变量已从代码中移除(不再读取),仅列出迁移去向:

废弃变量替代方案
CNV_SECONDARY_SHARED_KEY节点自持密钥,面板通过注册表管理
CNV_PRIMARY_URL不再需要;面板通过注册表管理节点地址
CNV_HEARTBEAT_SEC不再需要;管控 WS 长连接替代心跳
CNV_NODE_ROLE=primary改为 CNV_NODE_ROLE=business
CNV_NODE_ROLE=secondary改为 CNV_NODE_ROLE=edge

文档正文以 CC BY-NC-SA 4.0 授权 · 代码部分以 GPLv3 开源 · 本项目仅作学习研究使用,与版权方无任何关联