配置说明
配置分三层:
- 构建期环境变量:决定打包什么(数据库驱动、部署形态),改动后必须重新构建。
- 运行期环境变量:连接串、密钥、存储凭据,可在不重新构建的情况下修改。
- 后台设置:站点信息、SEO / AI GEO、接口缓存规则等,存在数据库里,改动即时生效。
完整变量清单见仓库根目录的 .env.example。
必填密钥
| 变量 | 说明 |
|---|---|
NUXT_JWT_SECRET | 登录 Cookie 的 JWT 签名密钥,32 位以上 |
NUXT_SETUP_TOKEN | 安装令牌。公网部署建议设置:安装向导必须填写它才能创建第一个管理员,防止被抢先安装 |
NUXT_SESSION_PASSWORD | 密码哈希组件要求的密钥,32 位以上 |
NUXT_PUBLIC_SITE_URL | 站点公网地址,用于 sitemap、hreflang、llms.txt 中的绝对链接 |
数据库
| 变量 | 阶段 | 说明 |
|---|---|---|
NUXT_DB_DRIVER | 构建 | sqlite(默认)/ pg / mysql,只打包对应适配器 |
DATABASE_URL | 运行 | file:.data/cms.sqlite、postgres://user:pass@host:5432/db、mysql://user:pass@host:3306/db |
DATABASE_POOL_MAX | 运行 | pg / mysql 连接池大小,默认 10 |
NUXT_DB_AUTO_MIGRATE | 运行 | 1 = Node 形态启动时自动执行迁移 |
NUXT_DB_TABLE_PREFIX | 构建 | 表前缀,默认 cms_ |
Cloudflare 上忽略 DATABASE_URL,使用 D1 绑定 DB;pg / mysql 可通过 Hyperdrive 绑定 HYPERDRIVE。
三套 schema 在 server/database/dialects/<driver>/schema.ts,迁移目录分别为 migrations、migrations-pg、migrations-mysql。写查询时只用跨方言的 Drizzle API,方言差异由 server/database/index.ts 导出的 firstRow、insertReturning、updateReturning、upsert、likeCi 抹平;不要使用 .all()、.get()、.returning()、onConflictDoUpdate。
多语言
i18n/config.json:
{
"fallbackLocale": "us",
"defaultLocale": "zh",
"locales": [
{ "code": "zh", "language": "zh-CN", "name": "简体中文", "file": "zh.json", "content": "zh" },
{ "code": "us", "language": "en-US", "name": "English", "file": "en.json", "content": "en", "aliases": ["en"] }
]
}
| 字段 | 说明 |
|---|---|
code | URL 前缀与界面语言代码,如 /us/... |
language | BCP 47 语言标签,用于 hreflang、og:locale、JSON-LD |
file | 界面翻译文件,位于 i18n/locales/,可多个语言共用 |
content | 数据库里内容行使用的语言代码(posts.locale),缺省等于 code |
aliases | 其他 URL 前缀,301 跳转到 code,如 /en/** → /us/** |
英文内容在数据库里始终以 en 存储,URL 用 /us;/en 自动跳转。旧站点仍可使用 cn 作为中文代码。
界面文案的翻译存在 translations 表,可在后台「多语言翻译」中修改,优先级高于文件;首次启动时会从文件写入初始值。
接口约定
所有接口只使用 GET 和 POST。更新与删除通过 POST /api/admin/<资源>/:id 并在请求体传 _method: 'put' | 'delete'。
接口缓存
后台 /admin/cache:
- 启用开关与缓存时长(1–168 小时)
- 缓存的接口路径:留空即
/api/public/**;路径必须在/api/下,/api/admin|auth|setup|docs|media永不缓存 - 不缓存的路径:优先级更高
规则模式:精确、前缀、通配符(* ?)、包含、正则。环境变量 NUXT_PUBLIC_API_CACHE_ENABLED、_MAX_AGE、_INCLUDE、_EXCLUDE 提供初始值。后台写入文章、产品、分类、设置、翻译后会自动清空缓存。
附件存储
| 变量 | 说明 |
|---|---|
NUXT_STORAGE_DRIVER | local(默认)/ r2 / oss / cos / s3;留空时 Cloudflare 上自动用 R2 绑定 BUCKET |
NUXT_STORAGE_BUCKET | 存储桶名称 |
NUXT_STORAGE_REGION | oss-cn-hangzhou、ap-guangzhou、us-east-1 等 |
NUXT_STORAGE_ENDPOINT | 可选,覆盖默认域名(须包含桶) |
NUXT_STORAGE_ACCESS_KEY_ID / NUXT_STORAGE_SECRET_ACCESS_KEY | 访问密钥 |
NUXT_STORAGE_ACCOUNT_ID | 在 Cloudflare 之外通过 S3 API 访问 R2 时需要 |
NUXT_STORAGE_PUBLIC_URL | CDN 或桶的公网域名;设置后媒体地址直出该域名,否则走 /api/media/<key> 代理 |
阿里云 OSS 与腾讯云 COS 通过 S3 兼容接口(SigV4)访问。
SEO 与 AI GEO
后台 /admin/seo:
- SEO 标签:按语言的站点名称、SEO 标题、Meta 描述、关键词、分享图;全局的 Google / Bing / 百度验证码、附加 robots 规则。
- AI GEO 标签:AI 摘要与目标受众(按语言)、组织信息(类型、Logo、官方账号),
llms.txt开关,16 个 AI 爬虫逐个允许 / 禁止。
对外地址:/robots.txt、/sitemap.xml(多语言索引,带 lastmod 与 Last-Modified)、/__sitemap__/<lang>.xml、/llms.txt、/llms-full.txt、/api/public/ai-summary?locale=。页面自动输出 hreflang、x-default、og:locale 与 Organization / WebSite JSON-LD。
部署与前后端分离
| 变量 | 阶段 | 说明 |
|---|---|---|
NUXT_DEPLOY_TARGET | 构建 | cloudflare-pages / cloudflare-worker / node / static-frontend |
NUXT_PUBLIC_API_BASE | 构建(前端) | 静态前端指向的后端地址 |
NUXT_CORS_ORIGINS | 运行(后端) | 允许的前端来源,逗号分隔 |
NUXT_AUTH_COOKIE_SAME_SITE | 运行(后端) | 跨域时设为 none(需 HTTPS) |
详见 部署指南。
其他
| 变量 | 说明 |
|---|---|
NUXT_API_DOCS_KEY | 保护 /api/docs(OpenAPI)的访问密钥 |
NUXT_ALTCHA_HMAC_KEY | 登录验证码 HMAC 密钥 |
NUXT_CF_ACCOUNT_ID / NUXT_CF_API_TOKEN | 部署脚本使用的 Cloudflare 凭据(通常放在 .cloudflare.env) |