生产部署
主席选举的生产进程 不经过主服务器 Nginx。无仓库内官方流水线。按通用 Next.js + Neon 清单执行。本机拓扑见 基础设施概览。
检查清单
-
DATABASE_URL、AUTH_SECRET、AUTH_GOOGLE_ID、AUTH_GOOGLE_SECRET已在托管平台配置。 -
不要设置
AUTH_ALLOW_EMPTY_USER_TABLE=1。 -
public.users至少有一名admin,邮箱与将用于登录的 Google 账号一致。 -
生产库已按顺序执行需要的
001–007,并备份ballots/ballot_allocations/campaign_candidate_options。 -
Google OAuth 授权 JavaScript 来源与重定向 URI 包含生产域名:
https://<部署域名>/api/auth/callback/google -
若平台区分
AUTH_URL/ 信任主机,按 Auth.js 部署说明 配置,避免回调跑到localhost。
构建与启动(Node 主机)
npm ci
npm run build
npm run start
Vercel:连接 Git 仓库后配置同样环境变量即可;本仓库没有额外 vercel.json。
发布后冒烟
用 admin、moderator、voter 各测一次:登录、建或加入竞选、分票、结束投票、打开结果。确认 admin 无法投票。