环境变量
仓库根的 .env.example 完整列出了所有 env var。每行注释说明用途与是否 server-only。本节按域分组。
安全分级
NEXT_PUBLIC_* 前缀意味着注入到客户端 bundle。永远不要把 secret 放进 public 变量。
Core
NEXT_PUBLIC_SITE_URL 是 canonical URL,缺省值在 data/site.ts 兜底为 https://arsvine.com。
Public
Content(外部 GitHub 仓库)
全部未设置时:
- 博文回退到
content/blog/init/(内置 6 个 locale 兜底) - tweets 回退到空状态(除非 dev 开了
TWEETS_STRESS_TEST=1) - 受保护博文自然不可用
Security
ACCESS_GRANT_SECRET 签 HttpOnly access-grant cookie;TOTP_GROUPS_JSON 是 group → TOTP 密钥映射;REVALIDATE_SECRET 守 /api/revalidate*;TRUST_PROXY=1|true|yes 时受信任的代理可以传 X-Forwarded-For,否则 rate limit 用 req.socket.remoteAddress。
Infra
UPSTASH_* 在 Vercel Marketplace 集成 Upstash 后会自动注入。配置后 lib/content/rate-limit.ts 走 Redis 跨实例限流;未配置回退进程内 Map。
COS_* 仅供 scripts/assets-publish.mjs 用,平时 dev 不需要。运行时通过 node --env-file=.env.local 临时注入,不要写进 coscli 配置文件。
Tweets Dev(仅 dev)
合成数据让 tweets 页面在外部仓库未配置时也能看到分页与组件。生产绝不开。
Advanced
加入新 env var 的清单
- 在
.env.example加注释完整的行 pnpm env:sync同步(如果你让 sync 脚本管这一份)- 任何 server-only 的 env 走
process.env.<NAME>,public 必须NEXT_PUBLIC_前缀 - 任何 dev-only 的 env 在生产代码里要有
process.env.NODE_ENV !== 'production'guard - 文档里只写变量名与用途,绝不写真实值