GameAP 4.5.8 配置参数详解
GameAP v4.5.8 全部 216 个环境变量配置项分类详解:监听、TLS/ACME、数据库、认证、缓存、文件、gRPC、插件、安全头与指标,含权威默认值、生产模板与实测坑。
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_* | 3 | 5.1 |
| TLS 终结 | TLS_* | 5 | 5.2 |
| Let's Encrypt | ACME_* | 9 | 5.3 |
| 数据库 | DATABASE_* | 3 | 5.4 |
| 认证与安全 | ENCRYPTION_KEY、AUTH_* | 8 | 5.5 |
| 管理员种子 | ADMIN_* | 3 | 5.6 |
| RBAC 与缓存 | RBAC_*、CACHE_* | 11 | 5.7 |
| 文件存储与上传 | FILES_* | 10 | 5.8 |
| 日志与审计 | LOGGER_* | 2 | 5.9 |
| gRPC 节点通道 | GRPC_* | 10 | 5.10 |
| 消息总线 | PUBSUB_* | 11 | 5.11 |
| 插件系统 | PLUGINS_*(loader/runtime/权限/调度/限额) | 60+ | 5.12 |
| 插件市场 | PLUGINS_STORE_* | 2 | 5.13 |
| CAPTCHA | CAPTCHA_* | 6 | 5.14 |
| 安全响应头 | SECURITY_* | 17 | 5.15 |
| 指标 | METRICS_TOKEN | 1 | 5.16 |
| 其他 | DEFAULT_LANGUAGE、GLOBAL_API_URL、LEGACY_* | 4 | 5.17 |
五、核心参数分类详解
5.1 服务监听
| 变量 | 默认 | 说明 |
|---|---|---|
HTTP_HOST | 0.0.0.0 | HTTP 监听地址;填域名时若解析到本机地址则按该地址绑定,否则回落全接口(gameapctl README 的绑定规则) |
HTTP_PORT | 8025 | HTTP 端口;gameapctl 系统级安装默认改 80 |
HTTPS_PORT | 443 | HTTPS 端口;绑定 ≤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_HTTPS | false | true 时 HTTP 端口全部 301 跳转 https://${HTTP_HOST}:${HTTPS_PORT} |
⚠️ 注意:
TLS_FORCE_HTTPS=true但 HTTPS 端口不可达时会锁死管理入口,开跳转前先验证 443/8443 可达(gameapctl README 同样强调此点)。
5.3 Let's Encrypt(ACME,内嵌 lego 客户端)
| 变量 | 默认 | 说明 |
|---|---|---|
ACME_ENABLED | false | 总开关 |
ACME_CHALLENGE_TYPE | http-01 | http-01(需 80 可达,不支持通配符)/ dns-01(支持通配符,需 DNS API) |
ACME_EMAIL | 空(必填) | LE 账户邮箱 |
ACME_DOMAINS | 空(必填) | 逗号分隔域名列表;通配符 *.example.com 必须配 dns-01 |
ACME_DIRECTORY_URL | LE 生产端点 | 调试期改 staging 端点避免限流(5 张重复证书/周) |
ACME_DNS_PROVIDER | 空 | dns-01 时的 provider,当前内置 cloudflare(凭证走 CLOUDFLARE_DNS_API_TOKEN 环境变量) |
ACME_RENEWAL_THRESHOLD | 720h | 剩余有效期低于 30 天即续期 |
ACME_RENEWAL_CHECK_INTERVAL | 12h | 后台检查周期;续期经 GetCertificate 热替换,不重启监听 |
ACME_PROPAGATION_TIMEOUT | 180s | dns-01 等待 DNS 传播上限 |
ACME_STORAGE_PATH | acme | 账户与证书材料子目录,落在 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_TIMEOUT | 30s | 启动时重试初始连接时长 |
三种生产 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_KEY | PASETO/JWT 签名密钥 |
AUTH_SERVICE | paseto | 令牌服务类型 |
AUTH_ALLOW_WEAK_PASSWORDS | false | true 时关闭 46146 条弱口令黑名单(OWASP ASVS §2.1.7),启动打警告;长度校验不受影响 |
AUTH_SSO_TICKET_TTL | 60s | 一次性 SSO 票据寿命,签发端硬上限 120s;负载均衡后必须共享 CACHE_DRIVER(redis/postgres),memory 不可用 |
AUTH_REQUIRE_MFA_FOR_ADMINS | true(源码 envDefault) | 管理员 MFA 强制策略 |
AUTH_MFA_HARD_FAIL_DAYS | 30(源码 envDefault) | 宽限天数,超期后仅允许进入 2FA 绑定页 |
AUTH_MFA_ENROLLMENT_TOKEN_TTL | 15m(源码 envDefault) | MFA 绑定令牌寿命 |
实测行为三条:
AUTH_SECRET给 64 个 hex 字符时启动打印WARN Auth secret key is longer than 32 bytes, trimming the key to 32 bytes length=64——密钥被截为 32 字节使用,属预期,不影响功能但别指望 64 字符全量参与签名;- 密码策略硬编码下限:改密 API 提交 8 位口令返回 400
invalid input: password must be at least 12 characters long(min 12 / max 128 不可配); - 启动日志
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_TTL | 30s | 权限判定缓存 |
CACHE_DRIVER | memory | memory / redis / postgres |
CACHE_REDIS_ADDR | localhost:6379 | Redis 地址 |
CACHE_REDIS_PASSWORD / CACHE_REDIS_DB | 空 / 0 | Redis 认证与库号 |
CACHE_TTL_RBAC | 24h | 以下六项为各类数据缓存寿命 |
CACHE_TTL_GAMES | 48h | |
CACHE_TTL_NODES | 24h | |
CACHE_TTL_USERS | 6h | |
CACHE_TTL_PERSONAL_TOKENS | 24h | |
CACHE_TTL_SERVER_SETTINGS | 12h |
单机可全默认(memory);多实例必须换 redis/postgres,否则 SSO 票据、ACME 锁、插件同步都不可用。
5.8 文件存储与上传会话
| 变量 | 默认 | 说明 |
|---|---|---|
FILES_DRIVER | local | local / 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_SIZE | 8M | 分块上传会话的块大小,支持 8M/8MB/8MiB/1000KB/2GB 人读格式 |
FILES_UPLOAD_SESSION_TTL | 24h | 未完成上传会话回收周期 |
FILES_UPLOAD_MAX_CHUNKS | 1000000 | 单文件块数上限(×chunk 即最大文件) |
FILES_UPLOAD_JANITOR_INTERVAL | 1h | 清理器扫描间隔 |
⚠️ 注意:走 nginx 反代时
client_max_body_size默认 1m 会以 413 拒掉 8M 分块,官方 DOCKER.md 建议 ≥64m。
5.9 日志与审计
| 变量 | 默认 | 说明 |
|---|---|---|
LOGGER_LEVEL | info | debug / info / warn / error |
LOGGER_LOG_DB_QUERIES | false | 开 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_ENABLED | true | 面板 gRPC 默认 TLS(自签证书,SAN=localhost+面板 IP,实测排障见部署篇 11.2) |
GRPC_PORT | 31718 | Daemon 接入端口(gameapctl panel install --grpc-port 写入 config.env) |
GRPC_REQUIRE_MTLS | false | 开启双向证书校验 |
GRPC_ENABLE_REFLECTION | false | gRPC 反射(调试用 grpcurl 时开) |
GRPC_MAX_RECV_MSG_SIZE / GRPC_MAX_SEND_MSG_SIZE | 10485760 | 10MB 收发上限(日志实测 max_recv_mb=10 max_send_mb=10) |
GRPC_MAX_CONCURRENT_STREAMS | 100 | 并发流上限 |
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_DRIVER | memory | memory / redis;多实例插件同步与权限缓存失效广播依赖 redis |
PUBSUB_INSTANCE_ID | 空 | 实例标识,日志/审计/插件事件用它点名实例 |
PUBSUB_RETRY_ENABLED / PUBSUB_RETRY_MAX_RETRIES / PUBSUB_RETRY_INITIAL_DELAY / PUBSUB_RETRY_MAX_DELAY / PUBSUB_RETRY_MULTIPLIER | true / 3 / 100ms / 5s / 2.0 | 发布重试退避 |
PUBSUB_DLQ_ENABLED / PUBSUB_DLQ_DRIVER / PUBSUB_DLQ_MAX_SIZE | false / 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_DISABLED | false | 总开关 |
PLUGINS_AUTOLOAD | 空 | 启动时注册的 wasm 文件列表 |
PLUGINS_STRICT_LOAD | false | true 时任一插件加载失败拒绝启动;默认坏插件标 error 跳过 |
PLUGINS_RUNTIME_CACHE_ENABLED / PLUGINS_RUNTIME_CACHE_DIR | true / 用户缓存目录下 gameap/plugins | 编译缓存;目录必须仅面板用户可写,否则退回内存缓存;一周未用的编译码启动时清除 |
PLUGINS_RUNTIME_COMPILE_WORKERS | 0(=按可用 CPU 数) | 编译并发 |
PLUGINS_RUNTIME_MAX_MEMORY / PLUGINS_RUNTIME_MAX_MODULE_SIZE | 256M / 128M | 单模块线性内存上限 / wasm 文件大小上限(0 分别为 4GiB / 不限) |
权限与恢复:
| 变量 | 默认 | 说明 |
|---|---|---|
PLUGINS_PERMISSIONS_ENFORCE | false | 实测启动警告:WARN plugin permission enforcement is disabled: ... set PLUGINS_PERMISSIONS_ENFORCE=true。关闭时授权仅记录不校验;官方声明未来默认 true,且要求所有实例取值一致 |
PLUGINS_PERMISSIONS_CACHE_TTL | 30s | 授权缓存(0 每次查库);变更经 pub/sub 广播即时失效 |
PLUGINS_RECOVERY_ENABLED / _INITIAL_DELAY / _MAX_DELAY / _MAX_ATTEMPTS | true / 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_INLINE | 32M | 单次内联读写上限(0 不限) |
PLUGINS_NODEFS_PATH_POLICY | unrestricted | 路径策略三选一: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-http | PLUGINS_HTTP_BLOCK_PRIVATE_IPS=true、ALLOWED_SCHEMES=https、MAX_TIMEOUT=30s、MAX_REDIRECTS=5、响应头白名单外不透传(Set-Cookie/WWW-Authenticate 永不透传) |
| gameap-net | PLUGINS_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_SCORE | 0.5 | 仅 v3 生效 |
CAPTCHA_FAIL_OPEN | false | fail-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_URL | https://api.gameap.com | 游戏更新元数据源 |
LEGACY_PATH / LEGACY_ENV_PATH | /var/www/gameap/ / /var/www/gameap/.env | v3 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)。
八、参考链接
- 官方 README「Configuration」全量 env 清单:https://github.com/gameap/gameap (查询日期 2026-11-02)
- 源码权威默认值:github.com/gameap/gameap
internal/config/config.go(v4.5.8,216 个 env 标签) - 官方部署文档:https://github.com/gameap/gameap/blob/main/DOCKER.md
- 文档站:https://docs.gameap.com
- 站内相关:《GameAP 介绍与选型指南》、《GameAP Docker Compose 部署指南》、《GameAP 4.5.8 常用 CLI 命令与工具详解》