# vlink-sub 环境变量说明(示例模板) # # 建议用法: # 1) 复制本文件生成 .env:cp .env.example .env # 2) 把占位符替换为你的真实值 # # 注意: # - 以 NEXT_PUBLIC_ 开头的变量会暴露到浏览器端,请勿放入任何敏感密钥 # - SUPABASE_SERVICE_ROLE_KEY / DATA_ENCRYPTION_KEY 等属于服务端机密,只能放在服务端环境变量里 # ========================= # Supabase(前端/后端共用) # ========================= # Supabase Project URL(必填) # Supabase Dashboard -> connect -> App Frameworks # 用于创建 supabase-js client;浏览器端也需要,所以必须带 NEXT_PUBLIC_ 前缀 NEXT_PUBLIC_SUPABASE_URL="" # Supabase anon key(必填) # Supabase Dashboard -> connect -> App Frameworks # Supabase Publishable API Key # 浏览器端用于登录/读写(受 RLS 策略约束);服务端的 RLS client 也会用它 + JWT NEXT_PUBLIC_SUPABASE_ANON_KEY="" # 可选:服务端专用的 Supabase URL 变量名(当你不想在服务端复用 NEXT_PUBLIC_SUPABASE_URL 时) # 本项目代码会优先读取 NEXT_PUBLIC_SUPABASE_URL,其次才读 SUPABASE_URL SUPABASE_URL="" # ========================= # 原文加密(服务端必填) # ========================= # AES-256-GCM 32 字节 base64 key(必填) # 用于加密 subscriptions.raw_data;务必使用随机强密钥 # 生成示例:openssl rand -base64 32 DATA_ENCRYPTION_KEY="" # 可选:当前加密 key 的 ID(默认 k1) # 加密后的密文格式:v2:: DATA_ENCRYPTION_KEY_ID="k1" # 可选:旧密钥环(用于密钥轮换后仍能解密历史数据) # 格式:id=base64,id=base64(逗号分隔) # 示例:DATA_ENCRYPTION_KEYRING="k1=BASE64_32_BYTES,k0=BASE64_32_BYTES_OLD" DATA_ENCRYPTION_KEYRING="" # ========================= # 订阅导出统计(可选) # ========================= # 同一订阅两次 download_count 写库的最小间隔(秒) # 用于“去抖”避免千万级请求把 Postgres 写爆: # - 600:生产推荐(同一订阅 10 分钟最多 +1) # - 60:测试/小规模可用(同一订阅 1 分钟最多 +1) # - 0:每次访问都 +1(不建议大规模生产环境) DOWNLOAD_COUNT_MIN_INTERVAL_SECONDS="" # 可选:Supabase service_role key(仅服务端) # Supabase -> Project Settings -> API Keys # 用途: # - 运行 `pnpm supabase:sync-templates` 同步内置公开模板(绕过 RLS) # - 调用 RPC `increment_subscription_download_count`(去抖写库) # 强烈注意:绝对不要用 NEXT_PUBLIC_ 前缀,也不要在浏览器端暴露 SUPABASE_SERVICE_ROLE_KEY="" # ========================= # 登录防刷(可选) # ========================= # 可选:hCaptcha site key(公开) # - 在 Supabase Dashboard 启用 Captcha 后,/otp 等接口会要求传 captcha token # - 前端会在登录页展示验证码并把 token 透传给 Supabase NEXT_PUBLIC_HCAPTCHA_SITE_KEY="" # ========================= # Next.js(可选) # ========================= # 可选:关闭 Next.js 遥测 NEXT_TELEMETRY_DISABLED="1"