跳转到主要内容

.env

环境变量和密钥,随部署环境配置,不纳入版本库

在阅读完 配置说明 后,我们已经了解 .env 与 site.config.ts 的分工。本节将逐项介绍 .env 中的配置项。开发环境与生产环境共用同一模板 .env.example,复制为 .env 后按需启用。

必填项

数据库连接与运行模式必须配置:

变量默认说明
DB_HOSTlocalhostPostgreSQL 地址;Docker compose 内强制覆盖为 postgres
DB_PORT5432PostgreSQL 端口
DB_USERpostgresPG 用户;compose 默认是 imqi1
DB_PASSWORD—PG 密码,无默认,留空启动失败
DB_NAME—PG 数据库名;Docker compose 用它建库,缺省 imqi1-cms
NODE_ENVdevelopment生产环境设为 production,Nuxt 的构建与 SSR 路径都按它分流

注:NODE_ENV 在开发环境不需要设置。在构建时,Nuxt 内部会自动将这个值设为 production。唯一需要显式设置的是生产环境。

应用密钥

三项密钥都只供服务端使用,不会下发到浏览器:

变量默认说明
SSR_INTERNAL_REQUEST_SECRET启动时随机生成SSR 内部请求绕过 referer 门禁的密钥;空值启动时随机生成、重启即变,强烈建议在生产环境配置
LOGIN_SECRETSSR_INTERNAL_REQUEST_SECRET2FA 验证与「信任此设备」令牌的 HMAC 签名密钥;空值时降级到 SSR_INTERNAL_REQUEST_SECRET,再空才随机生成,强烈建议在生产环境配置一个和 SSR_INTERNAL_REQUEST_SECRET 不一致的值
MINI_API_SECRET—小程序 /api/mini/* HMAC 签名密钥;生产空值则小程序接口全部 401,开发环境跳过校验;需与小程序端 VITE_MINI_API_SECRET 完全一致

受信代理

应用侧与 nginx 侧各有一个名字相近的变量,作用域不同,两侧都要配置才完整:

变量默认说明
TRUSTED_PROXY仅本机回环地址应用侧白名单,逗号分隔,可填单个地址或网段。决定应用是否采信反向代理转来的客户端地址:代理不在本机时必须填回源地址,否则评论来源与登录限流会退化成同一个地址
DEPLOY_TRUSTED_PROXY不启用nginx 侧白名单,决定从哪些来源恢复真实客户端地址;留空则不恢复

请求经过反向代理后,应用在连接上看到的对端是代理自己的地址,真实客户端地址只能由代理写进请求头转交。而请求头是普通文本、客户端自己就能伪造,所以应用默认不采信,只认来自已知代理的对端。转发链上每一跳都会往头里追加自己看到的对端,应用因此只取最后一段,它由最近的可信代理写入,客户端伪造不了。

微信小程序

变量默认说明
WECHAT_MINI_APPID—微信小程序 AppID;与 WECHAT_MINI_SECRET 配对才有意义,缺则小程序码入口隐藏
WECHAT_MINI_SECRET—微信小程序 AppSecret

小程序接口签名密钥见 应用密钥 一节的 MINI_API_SECRET,主站与小程序必须使用同一值。

高德地图

变量默认说明
AMAP_KEY—高德 JS API Key;旅行足迹地图功能依赖,缺则该功能不可用
AMAP_SECURITY_CODE—高德 JS API 安全密钥;与 Key 配对才有意义

上传目录

变量默认说明
UPLOADS_DIR<public>/uploads本地上传根目录;相对路径按进程 cwd 解析,绝对路径直接用;Docker compose 里同时作为 bind mount 宿主路径

日志目录

变量默认说明
LOGS_DIR./logs/站点日志(9 类分类)根目录,优先于 site.config.ts 的 logs.dir;相对路径按进程 cwd 解析;Docker compose 里同时作为 bind mount 宿主路径,格式与分类含义见 日志系统

部署脚本

仅供 bun run <script> 工具使用,应用进程不会读取:

变量默认说明
DEPLOY_PORT—bun run nginx:generate 反代上游端口;Docker compose 模板默认 3000
DEPLOY_PROJECT_ROOT_DIR—bun run nginx:generate 写入 nginx 片段内 /sw.js /robots.txt 的静态文件根目录
DEPLOY_SITE_DOMAIN—bun run nginx:generate 主站域名,打印用
DEPLOY_CDN_DOMAIN—bun run nginx:generate CDN 域名,nginx 用它做 /favicon.ico /manifest.webmanifest 301 重定向
DEPLOY_ENABLE_CDN_REDIRECT—bun run nginx:generate 是否输出上述 CDN 301 重定向片段,取值字符串 "true" 才输出;未设置时脚本直接退出
DEPLOY_TRUSTED_PROXY—bun run nginx:generate 写入 nginx 侧 set_real_ip_from 的回源地址段(逗号分隔,可填单个地址或网段)
DEPLOY_REAL_IP_HEADERX-Forwarded-Forbun run nginx:generate 真实客户端 IP 在哪个转发头
COS_SECRET_ID—bun run upload:cos 腾讯云 COS SecretId
COS_SECRET_KEY—bun run upload:cos 腾讯云 COS SecretKey
COS_BUCKET—bun run upload:cos COS 桶名
COS_REGION—bun run upload:cos COS 地域
COS_CONCURRENCY15bun run upload:cos 上传并发数
SERVER_HOST—bun run upload:server 上传目标服务器 IP
SERVER_PORT22bun run upload:server SSH 端口
SERVER_USERrootbun run upload:server SSH 用户
SERVER_PASSWORD—bun run upload:server SSH 密码
SERVER_UPLOAD_DIR—bun run upload:server 远端上传目录
SERVER_UPLOAD_CONCURRENCY8bun run upload:server 上传并发数
BT_PANEL_URL—bun run restart:server / bun run clear:redis 宝塔面板地址
BT_API_KEY—同上,宝塔接口密钥
BT_PROJECT_NAME—同上,宝塔 Node 项目管理器里的项目名
FFMPEG_PATH—bun run compress:livephoto ffmpeg 可执行路径,空则依次试 ffmpeg-static → 系统 PATH

其中 bun run clear:redis 清空的是该 Redis 实例的全部 16 个库(0–15),不只是本站的缓存,同实例上别的库会一起被清掉。

MCP 运维令牌

变量默认说明
MCP_OPS_TOKEN空/mcp 端点运维工具组的门禁令牌,建议随机长字符串;留空则五个运维工具完全不注册(fail-closed)

配置后 MCP Server 会额外注册系统状态、日志、内容统计、缓存诊断与清缓存五个运维工具,调用时必须携带本令牌作为 token 入参;令牌每请求现读,生产补配无须重新构建。

小程序的环境变量

小程序是独立子包,拥有自己的 mini/.env.development 与 mini/.env.production,不使用主站 .env。小程序端的 VITE_API_BASE_URL 与 VITE_MINI_API_SECRET 见 小程序。