环境变量
Backend (backend/.env)
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
PORT | 否 | 4000 | HTTP 端口 |
FRONTEND_URL | 是 | http://localhost:3000 | CORS + Socket Origin |
REDIS_URL | 是 | — | Redis 连接串 |
JWT_SECRET | 是 | — | 与 Frontend 相同 |
DEFAULT_ROOM_ID | 否 | main_room | 房间 ID |
DATABASE_URL | 推荐 | — | PostgreSQL |
Frontend (frontend/.env.local)
| 变量 | 必填 | 说明 |
|---|---|---|
NEXT_PUBLIC_API_BASE | 是 | Backend URL |
NEXTAUTH_URL | 是 | Frontend 公网 URL |
NEXTAUTH_SECRET | 是 | NextAuth 加密 |
JWT_SECRET | 是 | 与 Backend 相同 |
STAFF_ADMIN_PASSWORD | 国内* | Admin /staff-login 密码 |
STAFF_DISPLAY_PASSWORD | 国内* | Display /staff-login 密码 |
NEXT_PUBLIC_THEME | 否 | spring(默认)或 mario |
GOOGLE_CLIENT_ID | 美国* | Google OAuth |
GOOGLE_CLIENT_SECRET | 美国* | Google OAuth |
AZURE_AD_CLIENT_ID | 美国 | Azure AD(可选) |
AZURE_AD_CLIENT_SECRET | 美国 | Azure AD |
AZURE_AD_TENANT_ID | 美国 | Azure AD |
DATABASE_URL | 推荐 | Prisma migrate |
* 国内场景:STAFF_*_PASSWORD 必填;OAuth 可选。
* 美国场景:GOOGLE_*(及/或 AZURE_AD_*)必填;STAFF_* 可不配。
详见 认证场景。
角色白名单(代码)
frontend/src/lib/auth.ts:
const ADMIN_EMAILS = ['bucssatech@gmail.com'];
const DISPLAY_EMAILS = ['jijicandlehouse@gmail.com', '...'];
修改后需重新 deploy Frontend。
生产检查清单
-
JWT_SECRET强随机且前后端一致 -
STAFF_*_PASSWORD足够强,勿提交 git -
NEXTAUTH_URL= 用户访问域名 - OAuth 回调 URL 已更新(若启用)
-
NEXT_PUBLIC_THEME按活动设定
示例 .env.local(国内)
NEXT_PUBLIC_API_BASE=https://api.example.com
NEXTAUTH_URL=https://lottery.example.com
NEXTAUTH_SECRET=xxx
JWT_SECRET=xxx
STAFF_ADMIN_PASSWORD=xxx
STAFF_DISPLAY_PASSWORD=xxx
NEXT_PUBLIC_THEME=mario
DATABASE_URL=postgresql://...
示例 .env.local(美国)
NEXT_PUBLIC_API_BASE=https://api.example.com
NEXTAUTH_URL=https://lottery.example.com
NEXTAUTH_SECRET=xxx
JWT_SECRET=xxx
GOOGLE_CLIENT_ID=xxx
GOOGLE_CLIENT_SECRET=xxx
# AZURE_AD_CLIENT_ID=...
NEXT_PUBLIC_THEME=spring
DATABASE_URL=postgresql://...