# 本文件为开发环境配置模板。复制为 .env 后填写实际值。 # 生产环境由 docker-compose.prod.yml 的 environment 覆盖数据库/Redis/端口等配置。 # 端口配置 VITE_DEV_PORT=4273 GAME_SERVER_PORT=18000 API_SERVER_PORT=18001 # 邮件服务配置 (可选 - 用于邮箱绑定功能) # 使用 QQ 邮箱示例: # 1. 登录 QQ 邮箱 - 设置 - 账户 - 开启 IMAP/SMTP 服务 # 2. 获取授权码(不是密码) # 3. 填写下方配置 SMTP_HOST=smtp.qq.com SMTP_PORT=465 SMTP_USER=your_email@qq.com SMTP_PASS=your_authorization_code # JWT 密钥 (生产环境必须修改) JWT_SECRET=your-super-secret-key-change-in-production # 单体部署下 game-server 反向代理目标(可选) GAME_SERVER_PROXY_TARGET=http://127.0.0.1:18000 # 数据库连接(推荐显式配置;直接运行 API / game 进程时仍为必填) # `npm run dev` 在检测到本地 127.0.0.1:27017 可用时,会自动注入下面这个开发默认值 # 本地开发可使用 localhost / 127.0.0.1,Docker 会显式覆盖为 mongodb 容器名 MONGO_URI=mongodb://127.0.0.1:27017/boardgame # 反馈系统(系统自动上报) # game-server -> API 的基础地址(可配置为 http://web/feedback 或 https://api.example.com/feedback) # FEEDBACK_API_URL= # 如需显式指定内部入口,可配置为完整内部地址(优先生效) # FEEDBACK_INTERNAL_API_URL= # 系统反馈受信令牌(internal/feedback/system 校验) # INTERNAL_FEEDBACK_TOKEN=please-change-me # 初始化管理员(仅开发/首次启动) # ADMIN_EMAIL= # ADMIN_PASSWORD= # ADMIN_USERNAME=管理员 # 自动发布游戏更新日志(可选) # 脚本会通过 /auth/login 登录,再调用 /admin/game-changelogs,不直接写数据库 # BG_CHANGELOG_API_BASE_URL=http://127.0.0.1:18001 # BG_CHANGELOG_ACCOUNT= # BG_CHANGELOG_PASSWORD= # BG_CHANGELOG_PUBLISH=true # BG_CHANGELOG_PINNED=false # 是否启用持久化存储(可选,默认 true,保持与生产一致) # 如需在本地关闭(退回内存存储)可设为 false # USE_PERSISTENT_STORAGE=false # 是否启用训练数据采集(可选;默认仅 production 开启,其他环境默认关闭) # 如需在非 production 本地验证,显式设为 true;如需在 production 关闭,显式设为 false # ENABLE_TRAINING_DATA_CAPTURE=false # TRAINING_DATA_DIR=memory/training-data # 完整对局最低时长(毫秒):游戏 manifest 的 ai.trainingMinCompletedDurationMs 优先 # 没有游戏级配置时使用此全局值;两者都未配置时安全停录,不提交正式训练数据 # TRAINING_DATA_MIN_COMPLETED_MATCH_DURATION_MS=600000 # 兼容旧变量名:TRAINING_DATA_MIN_MATCH_DURATION_MS # 未完成对局的 pending 暂存最多保留 24 小时,过期后自动清理 # TRAINING_DATA_PENDING_RETENTION_HOURS=24 # Redis 缓存(可选) # 本地开发:注释掉这两行,使用内存缓存 # Docker 部署:会自动覆盖为 redis 容器名 # REDIS_HOST=localhost # REDIS_PORT=6379 # 前端认证 API 地址(可选,留空走 Vite 代理 /auth) # 本地开发和 Docker 同域部署均无需配置,仅 Pages 分离部署才需要 # VITE_AUTH_API_URL=http://127.0.0.1:18001/auth # 前端游戏服务地址(可选) # 开发环境建议留空(走 Vite 代理,避免 CORS) VITE_GAME_SERVER_URL= # 前端资源基址(可选,默认 /assets,可配置为独立服务器资源域名) # 本地部署:不配置此项,资源从服务器 /assets 加载(已打包进镜像) # 正式环境:配置为服务器素材主源域名,不再配置 R2 作为玩家下载链路 # VITE_ASSETS_BASE_URL=https://assets.example.com # 前端音频资源基址(可选,默认继承 VITE_ASSETS_BASE_URL) # 用于“图片走本地 /assets、音频走服务器素材主源”这类分流场景 # VITE_AUDIO_ASSETS_BASE_URL=https://assets.example.com # UGC 资源基址(可选,默认 /assets) # 用于拼接 UGC 包的 rules/view 入口路径 # VITE_UGC_ASSET_BASE_URL=https://ugc-assets.example.com # 跨域白名单 (用于生产环境分离部署,多个地址用逗号隔开) # WEB_ORIGINS=https://your-project.pages.dev,http://localhost:4273 # ========== Cloudflare Pages 分离部署配置 ========== # 前端部署到 Pages,后端部署到服务器时,需要配置: # # 1. 前端构建时(Pages 环境变量): # VITE_BACKEND_URL=https://api.yourdomain.com # # 2. 后端 .env(服务器): # WEB_ORIGINS=https://your-project.pages.dev # (允许 Pages 域名跨域访问) # ========== 第三方监控配置 ========== # ========== Android / App WebView 构建配置 ========== # Android 壳构建会执行 vite build --mode android,因此请把 App 专用地址放到 .env.android 或 .env.android.local # GitHub Actions 的 Android Release / OTA workflow 也默认优先读取同名的 `VITE_BACKEND_URL` # (推荐配成 GitHub Variables),`ANDROID_VITE_BACKEND_URL` 仅作为兼容别名。 # # 典型示例: # VITE_BACKEND_URL=https://api.easyboardgame.top # VITE_ASSETS_BASE_URL=https://assets.easyboardgame.top # CAPACITOR_APP_ID=top.easyboardgame.app # CAPACITOR_APP_NAME=EasyBoardGame # # 后端生产环境若需要允许 App WebView 访问,请在服务器 .env 增加: # APP_WEB_ORIGINS=http://localhost,https://localhost,capacitor://localhost # # Android 壳资源自动生成(默认使用 public/logos/logo_1_grid.png): # ANDROID_ICON_SOURCE=public/logos/logo_1_grid.png # ANDROID_SPLASH_SOURCE=public/logos/logo_1_grid.png # ANDROID_ICON_BACKGROUND=#FFFFFF # ANDROID_SPLASH_BACKGROUND=#FFFFFF # ANDROID_ICON_INSET_RATIO=0.68 # ANDROID_ADAPTIVE_ICON_INSET_RATIO=0.72 # ANDROID_SPLASH_LOGO_RATIO=0.34 # # Android 原生 APK 自更新(下载新包后调起系统安装) # - manifest 通常放在对象存储: # https://assets.easyboardgame.top/official/native-app-updates/android/stable/latest.json # - 网页端“下载 App”入口默认也会优先读取这个 latest.json 里的 url # - 如需手动兜底,可额外配置 VITE_ANDROID_APP_DOWNLOAD_URL 为 APK 直链 # VITE_ANDROID_APP_DOWNLOAD_URL=https://assets.easyboardgame.top/official/native-app-updates/android/stable/packages/0.5.1.apk # - 客户端会检查是否有更新的 APK;若有则下载到本地并拉起系统安装器 # VITE_ANDROID_NATIVE_UPDATE_ENABLED=true # VITE_ANDROID_NATIVE_UPDATE_ALLOW_DEBUG_APP=false # VITE_ANDROID_NATIVE_UPDATE_MANIFEST_URL=https://assets.easyboardgame.top/official/native-app-updates/android/stable/latest.json # VITE_ANDROID_NATIVE_UPDATE_CHANNEL=stable # # Android Release 签名(二选一): # ANDROID_KEYSTORE_PATH=C:/secure/release-upload.keystore # ANDROID_KEYSTORE_BASE64= # ANDROID_KEYSTORE_PASSWORD= # ANDROID_KEY_ALIAS= # ANDROID_KEY_PASSWORD= # # CAPACITOR_APP_ID=top.easyboardgame.app # CAPACITOR_APP_NAME=EasyBoardGame # APP_WEB_ORIGINS=http://localhost,https://localhost,capacitor://localhost # # Android embedded OTA / Live Update(H5 本体热更新) # - 默认推荐:App 继续用 embedded,前端 bundle 通过 OTA 更新 # - manifest 必须发布到服务器素材主源: # https://assets.easyboardgame.top/official/app-updates/android/stable/latest.json # - GitHub Actions 推荐配置: # Variables: VITE_BACKEND_URL / VITE_ASSETS_BASE_URL / ANDROID_OTA_AUTO_CHANNEL / CAPACITOR_APP_ID / CAPACITOR_APP_NAME # VITE_ANDROID_OTA_ENABLED=true # VITE_ANDROID_OTA_ALLOW_DEBUG_APP=false # VITE_ANDROID_OTA_MANIFEST_URL=https://assets.easyboardgame.top/official/app-updates/android/stable/latest.json # VITE_ANDROID_OTA_CHANNEL=stable # VITE_ANDROID_OTA_APP_READY_TIMEOUT_MS=15000 # iOS TestFlight embedded OTA / Live Update(H5 本体热更新) # - 原生壳通过 TestFlight 更新;不要在 iOS 内下载/安装 IPA # - H5 OTA channel 语义与 Android 保持一致,但 artifact 路径按平台隔离 # VITE_IOS_OTA_ENABLED=true # VITE_IOS_OTA_ALLOW_DEBUG_APP=false # VITE_IOS_OTA_MANIFEST_URL=https://assets.easyboardgame.top/official/app-updates/ios/stable/latest.json # VITE_IOS_OTA_CHANNEL=stable # VITE_IOS_OTA_APP_READY_TIMEOUT_MS=15000 # VITE_MOBILE_PACKAGE_MANIFEST_URL=https://assets.easyboardgame.top/official/mobile-packages/ios # # Android 游戏资源包(package-managed 游戏下载) # - 如不配置,客户端默认读取: # ${VITE_ASSETS_BASE_URL}/mobile-packages/android//games/.json # - 如需单独切到其他静态源,可显式覆盖: # VITE_MOBILE_PACKAGE_MANIFEST_URL=https://assets.easyboardgame.top/official/mobile-packages/android VITE_SENTRY_DSN= SENTRY_DSN= # ========== E2E 测试配置 ========== # 测试 API 基础 URL(默认 http://localhost:18001) TEST_API_BASE=http://localhost:18001 # 测试 API 认证令牌(测试环境必须配置) TEST_API_TOKEN=test-token-12345 # ========== Cloudflare / Pages 排障(按需配置,不进仓库真实值) ========== # 根域名如果直连服务器,保持默认即可: # PUBLIC_WEB_URL=https://easyboardgame.top # PUBLIC_ENTRY_SYNC_SOURCE_URL=http://127.0.0.1/ # # 根域名如果实际挂在 Cloudflare Pages(当前正式环境就是这种): # PUBLIC_WEB_URL=https://easyboardgame.top # PUBLIC_ENTRY_SYNC_SOURCE_URL=https://boardgame-e6c.pages.dev/ # # Cloudflare purge 支持两种认证方式,二选一: # CLOUDFLARE_API_TOKEN= # 或 # CLOUDFLARE_AUTH_EMAIL= # CLOUDFLARE_GLOBAL_API_KEY= # CLOUDFLARE_ZONE_ID=