GameAP 4.5.8 配置参数详解

GameAP v4.5.8 全部 216 个环境变量配置项分类详解:监听、TLS/ACME、数据库、认证、缓存、文件、gRPC、插件、安全头与指标,含权威默认值、生产模板与实测坑。

GameAPGameAP配置参数详解Golang游戏服务器2026/11/03

GameAP 4.5.8 配置参数详解

目标:把 GameAP v4.5.8 的全部配置项(环境变量族)按功能分类逐项讲清含义、默认值与生效方式,并给出可直接落地的生产模板。参数清单以官方 README(查询日期 2026-11-02)与 v4.5.8 源码 internal/config/config.go(共 216 个 env: 标签)为权威依据,关键行为均经真实服务器实测验证。

一、环境信息

  • 服务器:Ubuntu 24.04.5 LTS(x86_64),GameAP v4.5.8(Build date: 2026-10-18T17:08:49+00:00)
  • 权威来源:github.com/gameap/gameap README「Configuration」节 + 源码 internal/config/config.go(env 标签与 envDefault 值)
  • 验证环境:面板以 PostgreSQL 17 + Redis 7 全栈运行(部署过程见 《GameAP Docker Compose 部署指南》),另以 SQLite 单机形态对照验证若干默认值行为

二、前置条件

  • 已完成 GameAP 安装并能启动(安装路径任选官方脚本或 Compose,见站内部署篇);
  • 具备生成强随机密钥的能力:openssl rand -hex 32;
  • 理解一条总原则:GameAP 没有独立配置文件格式,全部配置 = 环境变量。二进制仅接受一个命令行参数 -env <path> 指向 env 文件(见 3.1)。

三、参数查看与修改方式

3.1 唯一的命令行参数:-env

实测 gameap --help 全量回显(逐行照抄):

Usage of ./gameap:
  -env string
    	Path to environment file
  -testify.m string
    	regular expression to select tests of the testify suite to run
  -version
    	Print version information and exit

-testify.m 是 Go 测试框架残留参数,运维中只用 -env 与 -version:

$ ./gameap -version
GameAP v4.5.8
Build date: 2026-10-18T17:08:49+00:00

3.2 env 文件与 systemd

gameapctl panel install(系统级)生成的配置在 /etc/gameap/config.env,由 systemd 单元 EnvironmentFile= 注入;rootless(--scope=user)形态在 ~/.config/gameap/config.env。修改后需重启面板进程生效(gameapctl panel restart)。

3.3 查看当前生效值

面板无「导出全量配置」API,实操两条路:

# ① 读配置源文件
cat /etc/gameap/config.env

# ② 读进程环境(root)
tr '\0' '\n' < /proc/$(pgrep -x gameap)/environ | grep -E '^(HTTP|DATABASE|CACHE|FILES|AUTH|ENCRYPTION|GRPC|PLUGINS|SECURITY)_'

启动日志会打印关键生效值(gRPC 端口/TLS、bcrypt cost、blocklist 条数、pub-sub driver 等),是最可靠的「实际生效」证据,见各分类下的实测行。

⚠️ 注意:源码 config.go 的 envDefault 标签才是最终权威——README 个别措辞与代码默认值存在出入时,以代码为准;本文两处的取值均经实测日志核对。

四、参数总览

按前缀族分类(v4.5.8,共 216 个 env 标签,README 全量清单核对一致):

分类前缀/关键变量数量级本文位置
服务监听HTTP_*35.1
TLS 终结TLS_*55.2
Let's EncryptACME_*95.3
数据库DATABASE_*35.4
认证与安全ENCRYPTION_KEY、AUTH_*85.5
管理员种子ADMIN_*35.6
RBAC 与缓存RBAC_*、CACHE_*115.7
文件存储与上传FILES_*105.8
日志与审计LOGGER_*25.9
gRPC 节点通道GRPC_*105.10
消息总线PUBSUB_*115.11
插件系统PLUGINS_*(loader/runtime/权限/调度/限额)60+5.12
插件市场PLUGINS_STORE_*25.13
CAPTCHACAPTCHA_*65.14
安全响应头SECURITY_*175.15
指标METRICS_TOKEN15.16
其他DEFAULT_LANGUAGE、GLOBAL_API_URL、LEGACY_*45.17

五、核心参数分类详解

5.1 服务监听

变量默认说明
HTTP_HOST0.0.0.0HTTP 监听地址;填域名时若解析到本机地址则按该地址绑定,否则回落全接口(gameapctl README 的绑定规则)
HTTP_PORT8025HTTP 端口;gameapctl 系统级安装默认改 80
HTTPS_PORT443HTTPS 端口;绑定 ≤1024 特权端口需 CAP_NET_BIND_SERVICE(gameapctl 的 systemd 单元已授权)

5.2 TLS 终结(面板自终结,无需反代)

三个证书来源按优先级择优:ACME > 静态文件 > 内联 PEM;三者皆未配置则 HTTPS 监听不启动、只跑 HTTP。

变量默认说明
TLS_CERT_FILE / TLS_KEY_FILE空静态证书/私钥路径
TLS_CERT / TLS_KEY空内联证书内容(PEM 或 base64)
TLS_FORCE_HTTPSfalsetrue 时 HTTP 端口全部 301 跳转 https://${HTTP_HOST}:${HTTPS_PORT}

⚠️ 注意:TLS_FORCE_HTTPS=true 但 HTTPS 端口不可达时会锁死管理入口,开跳转前先验证 443/8443 可达(gameapctl README 同样强调此点)。

5.3 Let's Encrypt(ACME,内嵌 lego 客户端)

变量默认说明
ACME_ENABLEDfalse总开关
ACME_CHALLENGE_TYPEhttp-01http-01(需 80 可达,不支持通配符)/ dns-01(支持通配符,需 DNS API)
ACME_EMAIL空(必填)LE 账户邮箱
ACME_DOMAINS空(必填)逗号分隔域名列表;通配符 *.example.com 必须配 dns-01
ACME_DIRECTORY_URLLE 生产端点调试期改 staging 端点避免限流(5 张重复证书/周)
ACME_DNS_PROVIDER空dns-01 时的 provider,当前内置 cloudflare(凭证走 CLOUDFLARE_DNS_API_TOKEN 环境变量)
ACME_RENEWAL_THRESHOLD720h剩余有效期低于 30 天即续期
ACME_RENEWAL_CHECK_INTERVAL12h后台检查周期;续期经 GetCertificate 热替换,不重启监听
ACME_PROPAGATION_TIMEOUT180sdns-01 等待 DNS 传播上限
ACME_STORAGE_PATHacme账户与证书材料子目录,落在 FILES_* 根之下(local 形态即 ${FILES_LOCAL_BASE_PATH}/acme/)

关键行为:首次签发失败(LE 不可达/DNS 配错)面板直接退出码 1,不会静默回落 HTTP。多实例横向扩展时官方推荐 dns-01 + CACHE_DRIVER=redis + FILES_DRIVER=s3(Redis 兼作续期分布式锁,S3 让所有副本读同一证书)。状态查询:GET /api/admin/letsencrypt/status,state ∈ disabled/pending/active/renewing/failed。

5.4 数据库

变量默认说明
DATABASE_DRIVER无(必填)mysql / postgres / sqlite / inmemory(仅测试,重启丢数据)
DATABASE_URL无(必填)连接串,格式按驱动而异,见下
DATABASE_CONNECT_TIMEOUT30s启动时重试初始连接时长

三种生产 URL 格式(官方 README 原文):

MySQL:      username:password@tcp(host:port)/database?parseTime=true
PostgreSQL: postgres://username:password@host:port/database?sslmode=disable
SQLite:     file:path/to/database.db?_busy_timeout=5000&_journal_mode=WAL&cache=shared

💡 技术拓展:SQLite URL 的三个参数是官方推荐的并发组合——_journal_mode=WAL(预写日志,读写不互斥)、_busy_timeout=5000(写锁竞争时重试 5s)、cache=shared(同进程共享页缓存)。对比 MySQL/PG 走服务端并发控制,SQLite 仅适合单机低并发;面板多实例部署禁用 SQLite。

实测:PG 形态启动时按序应用 23 条迁移(Applied migration path=001_create_gameap_tables.sql version=1 result="OK up ... (22.37ms)");SQLite 形态同库文件首启建表。

5.5 认证与安全

变量默认说明
ENCRYPTION_KEY无(必填)敏感数据加密密钥(插件 secrets、节点密钥等)
AUTH_SECRET取 ENCRYPTION_KEYPASETO/JWT 签名密钥
AUTH_SERVICEpaseto令牌服务类型
AUTH_ALLOW_WEAK_PASSWORDSfalsetrue 时关闭 46146 条弱口令黑名单(OWASP ASVS §2.1.7),启动打警告;长度校验不受影响
AUTH_SSO_TICKET_TTL60s一次性 SSO 票据寿命,签发端硬上限 120s;负载均衡后必须共享 CACHE_DRIVER(redis/postgres),memory 不可用
AUTH_REQUIRE_MFA_FOR_ADMINStrue(源码 envDefault)管理员 MFA 强制策略
AUTH_MFA_HARD_FAIL_DAYS30(源码 envDefault)宽限天数,超期后仅允许进入 2FA 绑定页
AUTH_MFA_ENROLLMENT_TOKEN_TTL15m(源码 envDefault)MFA 绑定令牌寿命

实测行为三条:

  1. AUTH_SECRET 给 64 个 hex 字符时启动打印 WARN Auth secret key is longer than 32 bytes, trimming the key to 32 bytes length=64——密钥被截为 32 字节使用,属预期,不影响功能但别指望 64 字符全量参与签名;
  2. 密码策略硬编码下限:改密 API 提交 8 位口令返回 400 invalid input: password must be at least 12 characters long(min 12 / max 128 不可配);
  3. 启动日志 INFO Password blocklist loaded entries=46146 source=embedded 与 INFO password hashing configured bcrypt_cost=13——bcrypt cost 13 为编译期固定,无 env 可调。

5.6 管理员种子

变量说明
ADMIN_LOGIN首启种子管理员登录名(实测 admin)
ADMIN_EMAIL邮箱(实测 admin@example.com)
ADMIN_PASSWORD口令。种子路径不校验密码策略——实测 8 位口令种子成功(INFO Admin user seeded successfully login=admin email=admin@example.com),但后续 API 改密受 min 12 约束

5.7 RBAC 与缓存

变量默认说明
RBAC_CACHE_TTL30s权限判定缓存
CACHE_DRIVERmemorymemory / redis / postgres
CACHE_REDIS_ADDRlocalhost:6379Redis 地址
CACHE_REDIS_PASSWORD / CACHE_REDIS_DB空 / 0Redis 认证与库号
CACHE_TTL_RBAC24h以下六项为各类数据缓存寿命
CACHE_TTL_GAMES48h
CACHE_TTL_NODES24h
CACHE_TTL_USERS6h
CACHE_TTL_PERSONAL_TOKENS24h
CACHE_TTL_SERVER_SETTINGS12h

单机可全默认(memory);多实例必须换 redis/postgres,否则 SSO 票据、ACME 锁、插件同步都不可用。

5.8 文件存储与上传会话

变量默认说明
FILES_DRIVERlocallocal / s3
FILES_LOCAL_BASE_PATH/var/www/gameap/storage/app本地文件根。实测坑:裸跑二进制未设该变量且目录不存在时直接 panic failed to open root directory: open /var/www/gameap/storage/app: no such file or directory——生产务必显式设置(如 /var/lib/gameap/files)
FILES_S3_ENDPOINT / FILES_S3_USE_SSL / FILES_S3_ACCESS_KEY_ID / FILES_S3_SECRET_ACCESS_KEY / FILES_S3_BUCKET— / true / — / — / —S3 兼容存储五件套;多实例共享 ACME 材料与插件文件的推荐形态
FILES_UPLOAD_CHUNK_SIZE8M分块上传会话的块大小,支持 8M/8MB/8MiB/1000KB/2GB 人读格式
FILES_UPLOAD_SESSION_TTL24h未完成上传会话回收周期
FILES_UPLOAD_MAX_CHUNKS1000000单文件块数上限(×chunk 即最大文件)
FILES_UPLOAD_JANITOR_INTERVAL1h清理器扫描间隔

⚠️ 注意:走 nginx 反代时 client_max_body_size 默认 1m 会以 413 拒掉 8M 分块,官方 DOCKER.md 建议 ≥64m。

5.9 日志与审计

变量默认说明
LOGGER_LEVELinfodebug / info / warn / error
LOGGER_LOG_DB_QUERIESfalse开 SQL 日志(仅排障用,量大)

审计事件走结构化日志(实测行照抄):

INFO audit event_type=auth.login.success actor_login=admin ip=127.0.0.1 http_method=POST path=/api/auth/login

5.10 gRPC 节点通道(面板侧)

源码 config.go envDefault 权威值:

变量默认说明
GRPC_TLS_ENABLEDtrue面板 gRPC 默认 TLS(自签证书,SAN=localhost+面板 IP,实测排障见部署篇 11.2)
GRPC_PORT31718Daemon 接入端口(gameapctl panel install --grpc-port 写入 config.env)
GRPC_REQUIRE_MTLSfalse开启双向证书校验
GRPC_ENABLE_REFLECTIONfalsegRPC 反射(调试用 grpcurl 时开)
GRPC_MAX_RECV_MSG_SIZE / GRPC_MAX_SEND_MSG_SIZE1048576010MB 收发上限(日志实测 max_recv_mb=10 max_send_mb=10)
GRPC_MAX_CONCURRENT_STREAMS100并发流上限
GRPC_EXTERNAL_HOST / GRPC_EXTERNAL_PORT空 / 0面板在 NAT/LB 后时下发给 Daemon 的对外地址
GRPC_FILE_TRANSFER_BASE_PATH空gRPC 文件传输根

实测启动行:INFO Starting gRPC server address=0.0.0.0:31718 tls_enabled=true mtls_required=false reflection_enabled=false max_recv_mb=10 max_send_mb=10。

5.11 消息总线(PUBSUB)

变量默认说明
PUBSUB_DRIVERmemorymemory / redis;多实例插件同步与权限缓存失效广播依赖 redis
PUBSUB_INSTANCE_ID空实例标识,日志/审计/插件事件用它点名实例
PUBSUB_RETRY_ENABLED / PUBSUB_RETRY_MAX_RETRIES / PUBSUB_RETRY_INITIAL_DELAY / PUBSUB_RETRY_MAX_DELAY / PUBSUB_RETRY_MULTIPLIERtrue / 3 / 100ms / 5s / 2.0发布重试退避
PUBSUB_DLQ_ENABLED / PUBSUB_DLQ_DRIVER / PUBSUB_DLQ_MAX_SIZEfalse / memory / 1000死信队列
PUBSUB_REDIS_ADDR / PUBSUB_REDIS_PASSWORD / PUBSUB_REDIS_DB空 / 空 / 1总线专用 Redis(可与缓存分库,默认 DB 1)

单机实测启动行 INFO Starting pub-sub listener driver=memory 即默认形态。

5.12 插件系统(PLUGINS_* 族,60+ 项)

v4.5.8 起统一 PLUGINS_ 前缀(旧 PLUGIN_* 拼写仍被接受,启动时翻译并警告改名,未来版本移除)。分五组:

加载与运行时:

变量默认说明
PLUGINS_DISABLEDfalse总开关
PLUGINS_AUTOLOAD空启动时注册的 wasm 文件列表
PLUGINS_STRICT_LOADfalsetrue 时任一插件加载失败拒绝启动;默认坏插件标 error 跳过
PLUGINS_RUNTIME_CACHE_ENABLED / PLUGINS_RUNTIME_CACHE_DIRtrue / 用户缓存目录下 gameap/plugins编译缓存;目录必须仅面板用户可写,否则退回内存缓存;一周未用的编译码启动时清除
PLUGINS_RUNTIME_COMPILE_WORKERS0(=按可用 CPU 数)编译并发
PLUGINS_RUNTIME_MAX_MEMORY / PLUGINS_RUNTIME_MAX_MODULE_SIZE256M / 128M单模块线性内存上限 / wasm 文件大小上限(0 分别为 4GiB / 不限)

权限与恢复:

变量默认说明
PLUGINS_PERMISSIONS_ENFORCEfalse实测启动警告:WARN plugin permission enforcement is disabled: ... set PLUGINS_PERMISSIONS_ENFORCE=true。关闭时授权仅记录不校验;官方声明未来默认 true,且要求所有实例取值一致
PLUGINS_PERMISSIONS_CACHE_TTL30s授权缓存(0 每次查库);变更经 pub/sub 广播即时失效
PLUGINS_RECOVERY_ENABLED / _INITIAL_DELAY / _MAX_DELAY / _MAX_ATTEMPTStrue / 30s / 10m / 5被运行时禁用(guest 超时/退出)插件的指数退避自动重载

调度器限额:PLUGINS_SCHEDULER_MIN_INTERVAL(1s)、MAX_TASKS_PER_PLUGIN(32)、CALL_TIMEOUT(60s)、MAX_CALL_TIMEOUT(5m)、MAX_RETRIES(10)、MAX_RETRY_DELAY(10m)、MAX_JITTER(30s)、REFRESH_INTERVAL(30s)。

节点文件与命令(gameap-nodefs/nodecmd):

变量默认说明
PLUGINS_NODEFS_MAX_INLINE32M单次内联读写上限(0 不限)
PLUGINS_NODEFS_PATH_POLICYunrestricted路径策略三选一:unrestricted / node_workpath(节点工作目录内)/ server_dirs(游戏服务器目录内);任何模式下 .. 段一律拒绝
PLUGINS_NODEFS_ALLOWED_PATHS空受限模式下的额外白名单根(如 /opt/steamcmd)

实测启动行:INFO plugin node path policy configured mode=unrestricted allowed_paths=0。

存储/缓存/密钥限额:PLUGINS_STORAGE_MAX_KEYS_PER_PLUGIN(10000)、PLUGINS_STORAGE_MAX_VALUE(1M)、PLUGINS_STORAGE_MAX_TOTAL(64M)、PLUGINS_CACHE_MAX_VALUE(1M)、PLUGINS_SECRETS_MAX_KEYS_PER_PLUGIN(64)、PLUGINS_SECRETS_MAX_VALUE(8K)、PLUGINS_SECRETS_REQUIRE_ENCRYPTION(true,ENCRYPTION_KEY 未设时拒绝写密钥)。

同步:PLUGINS_SYNC_DISABLED(false)、PLUGINS_SYNC_REFRESH_INTERVAL(60s)、PLUGINS_SYNC_MIN_BACKOFF(15s)、PLUGINS_SYNC_MAX_BACKOFF(15m)。

限流(每实例令牌桶,RPS/Burst):nodecmd 5/20、servercontrol 5/20、nodefs 50/200、http 20/50、rbac 10/50、ssh 20/60;被拒调用返回 rate limited: ...,插件不崩。

5.13 插件能力边界(防插件横向渗透,默认严格)

组关键变量与默认
gameap-httpPLUGINS_HTTP_BLOCK_PRIVATE_IPS=true、ALLOWED_SCHEMES=https、MAX_TIMEOUT=30s、MAX_REDIRECTS=5、响应头白名单外不透传(Set-Cookie/WWW-Authenticate 永不透传)
gameap-netPLUGINS_NET_ENABLED=true、BLOCK_PRIVATE_IPS=false(自托管游戏服务器常在私网,默认放行)、MAX_CONNECTIONS=8、READ_BUFFER=64K
gameap-ssh默认关 PLUGINS_SSH_ENABLED=false;开启后 BLOCK_PRIVATE_IPS=true(云元数据地址无论如何都拦)、MAX_CONNECTIONS=8、MAX_OPERATIONS=16、CONNECT_TIMEOUT=30s、MAX_EXEC_TIMEOUT=30m、ALLOW_ACCEPT_ANY_HOST_KEY=true

5.14 插件市场

PLUGINS_STORE_URL(默认 https://plugins.gameap.dev/api)、PLUGINS_STORE_LICENSE_KEY(商业插件许可)。

5.15 CAPTCHA(登录防爆破)

变量默认说明
CAPTCHA_PROVIDER空recaptcha_v2 / recaptcha_v3 / turnstile;空=关闭
CAPTCHA_SITE_KEY / CAPTCHA_SECRET_KEY空公钥经 GET /api/config/public 下发浏览器,私钥仅服务端
CAPTCHA_MIN_SCORE0.5仅 v3 生效
CAPTCHA_FAIL_OPENfalsefail-closed:验证服务不可达时登录返回 503
CAPTCHA_VERIFY_URL空覆盖 siteverify 端点(egress 代理/测试)

5.16 安全响应头(默认全开)

SECURITY_HEADERS_ENABLED=true 总开关;HSTS 族(HSTS_ENABLED=true、HSTS_MAX_AGE=31536000、INCLUDE_SUBDOMAINS=false、PRELOAD=false,仅 TLS 请求下发);CONTENT_TYPE_OPTIONS=nosniff、FRAME_OPTIONS=SAMEORIGIN、REFERRER_POLICY=strict-origin-when-cross-origin;CSP 族(CSP_ENABLED=true、REPORT_ONLY=false、POLICY 整策覆盖、REPORT_URI、EXTRA_{SCRIPT,STYLE,CONNECT,IMG,FRAME,FONT}_SRC 追加白名单)。CSP 自动按 CAPTCHA provider 放行对应第三方源,未开 CAPTCHA 时零第三方。

5.17 指标与其他

变量默认说明
METRICS_TOKEN空非空即注册 GET /metrics(Bearer 认证),暴露 gameap_plugin_* + Go 运行时 + 进程采集器
DEFAULT_LANGUAGE空UI 默认语言码
GLOBAL_API_URLhttps://api.gameap.com游戏更新元数据源
LEGACY_PATH / LEGACY_ENV_PATH/var/www/gameap/ / /var/www/gameap/.envv3 PHP 旧版迁移工具读取路径

六、生产配置模板

模板 A:多节点生产(16GB 内存 / NVMe SSD / PG17 + Redis7,对应游戏托管业务)

# /etc/gameap/config.env
HTTP_HOST=panel.example.com
HTTP_PORT=443
HTTPS_PORT=443
TLS_FORCE_HTTPS=true
ACME_ENABLED=true
ACME_CHALLENGE_TYPE=dns-01
ACME_EMAIL=ops@example.com
ACME_DOMAINS=panel.example.com
ACME_DNS_PROVIDER=cloudflare

DATABASE_DRIVER=postgres
DATABASE_URL=postgres://gameap:<DB强口令>@db.example.com:5432/gameap?sslmode=require
DATABASE_CONNECT_TIMEOUT=30s

ENCRYPTION_KEY=<openssl rand -hex 32 输出>
AUTH_SECRET=<openssl rand -hex 32 输出>
AUTH_SERVICE=paseto
AUTH_REQUIRE_MFA_FOR_ADMINS=true

CACHE_DRIVER=redis
CACHE_REDIS_ADDR=redis.example.com:6379
CACHE_REDIS_PASSWORD=<Redis口令>
PUBSUB_DRIVER=redis
PUBSUB_REDIS_ADDR=redis.example.com:6379
PUBSUB_REDIS_DB=1
PUBSUB_INSTANCE_ID=panel-1

FILES_DRIVER=s3
FILES_S3_ENDPOINT=https://s3.example.com
FILES_S3_USE_SSL=true
FILES_S3_ACCESS_KEY_ID=<AK>
FILES_S3_SECRET_ACCESS_KEY=<SK>
FILES_S3_BUCKET=gameap

PLUGINS_PERMISSIONS_ENFORCE=true
PLUGINS_NODEFS_PATH_POLICY=node_workpath
LOGGER_LEVEL=info
METRICS_TOKEN=<Prometheus抓取口令>

要点:多实例必须 redis(pub/sub)+s3 共享状态;dns-01 免 80 端口依赖;PLUGINS_PERMISSIONS_ENFORCE=true 提前对齐未来默认。

模板 B:单机自托管(4GB 内存 / SQLite,个人游戏服)

HTTP_HOST=0.0.0.0
HTTP_PORT=8025
DATABASE_DRIVER=sqlite
DATABASE_URL=file:/var/lib/gameap/db.sqlite?_busy_timeout=5000&_journal_mode=WAL&cache=shared
ENCRYPTION_KEY=<openssl rand -hex 32 输出>
AUTH_SECRET=<openssl rand -hex 32 输出>
CACHE_DRIVER=memory
FILES_DRIVER=local
FILES_LOCAL_BASE_PATH=/var/lib/gameap/files
LOGGER_LEVEL=info

七、常见问题

7.1 裸跑 panic failed to open root directory: open /var/www/gameap/storage/app: no such file or directory

FILES_LOCAL_BASE_PATH 未设且缺省目录不存在(实测复现)。设变量或预建目录即恢复,见 5.8。

7.2 启动 WARN Auth secret key is longer than 32 bytes, trimming the key to 32 bytes length=64

AUTH_SECRET 超 32 字节被截断使用(实测),预期行为;想全量利用可改传 base64/原始 32 字节。

7.3 改密报 400 password must be at least 12 characters long

min 12 / max 128 为硬编码策略(实测),AUTH_ALLOW_WEAK_PASSWORDS 只关黑名单、不关长度。另 PUT /api/users/1 必须同时带 email,否则先报 email is required(实测)。

7.4 启动 WARN plugin permission enforcement is disabled

PLUGINS_PERMISSIONS_ENFORCE 默认 false(实测 + 源码一致)。生产建议显式 true 并对已装插件回归验证权限声明。

7.5 旧 PLUGIN_* 变量名还生效吗

生效但启动时逐个翻译并警告新名(README 明示),如 PLUGINS_RUNTIME_CACHE_ENABLED 原名 PLUGIN_COMPILE_CACHE_*;未来版本将移除旧名,新部署一律用 PLUGINS_ 前缀。

7.6 多实例部署 SSO 票据/ACME 续期随机失败

CACHE_DRIVER/PUBSUB_DRIVER 仍是 memory——票据在一台签发、浏览器到另一台兑换即失效,续期锁失去互斥。改 redis/postgres 共享(见 5.7/5.11 与模板 A)。

八、参考链接

GameAP 4.5.8 配置参数详解 - Quzuo