根据分析 `docker-compose.yml`、`.env.example` 和代码中使用的环境变量,以下是完整的环境变量清单: --- ## Docker Compose 部署环境变量 ### 必需变量(必须配置) | 变量名 | 说明 | 示例值 | 生成方式 | |--------|------|--------|----------| | `POSTGRES_PASSWORD` | PostgreSQL 数据库密码 | `BJ4hbYQTLsz97zzJUGg8RFiq` | `openssl rand -base64 24` | | `JWT_SECRET` | JWT 签名密钥(≥32字符,至少 3 类字符) | `A1!b7e9c4d0...` | `printf 'A1!%s\n' "$(openssl rand -hex 48)" \| cut -c1-64` | | `ENCRYPTION_KEY` | 敏感数据加密密钥(≥32字符,需稳定保存) | `XpPc3tcVSmy4/...` | `openssl rand -base64 32` | --- ### 可选变量(有默认值) | 变量名 | 说明 | 默认值 | |--------|------|--------| | `POSTGRES_USER` | 数据库用户名 | `incudal` | | `POSTGRES_DB` | 数据库名称 | `incudal` | | `REDIS_PASSWORD` | Redis 密码 | 空(无密码) | | `APP_PORT` | 外部暴露端口 | `3000` | | `ADMIN_PASSWORD` | 首次初始化管理员密码 | `admin123` | | `LOG_LEVEL` | 日志级别 | `info` | | `DISABLE_REQUEST_LOG` | 禁用请求日志 | `true` | | `COOKIE_SECRET` | Cookie 签名密钥 | 空 | | `FRONTEND_URL` | 前端 URL(CORS 白名单 + 页面跳转) | 空 | | `PAYMENT_CALLBACK_BASE_URL` | 支付回调使用的后端公网 URL | 空(默认回退到 `FRONTEND_URL`) | | `PAYMENT_CALLBACK_IP_WHITELIST` | 支付回调来源 IP 白名单(逗号分隔,留空时 Heleket 默认收紧到官方 IP) | 空 | | `PAYMENT_CALLBACK_SKIP_IP_WHITELIST` | 跳过支付回调 IP 白名单校验(仅开发调试) | `false` | | `ALERT_WEBHOOK_URL` | 系统告警 Webhook URL | 空 | | `DB_POOL_MAX` | PostgreSQL 连接池最大连接数 | `20` | | `DB_POOL_MIN` | PostgreSQL 连接池最小连接数 | `5` | | `DB_CONNECTION_TIMEOUT` | 获取数据库连接超时(毫秒) | `5000` | | `DB_IDLE_TIMEOUT` | 数据库空闲连接超时(毫秒) | `30000` | | `DB_STATEMENT_TIMEOUT` | PostgreSQL 语句超时(毫秒) | `30000` | | `DB_QUERY_TIMEOUT` | PostgreSQL 查询超时(毫秒) | `30000` | | `TRAFFIC_CONCURRENCY_PER_HOST` | 每宿主机流量采集并发数 | `10` | | `TRAFFIC_HOST_CONCURRENCY` | 同时处理宿主机数量 | `3` | | `DB_WORKER_BACKOFF_MS` | worker 遇到数据库异常后的退避时间(毫秒) | `15000` | --- ### 最小 .env 配置示例 可以直接自动生成或补齐缺失项: ```bash bash scripts/init-env.sh ``` 脚本只补齐缺失或空值的变量,不覆盖已有非空配置。 ```bash # ============ 必需配置 ============ # 数据库密码 - 使用 openssl rand -base64 24 生成 POSTGRES_PASSWORD=your_strong_password_here # JWT 密钥 - 使用下面命令生成: # printf 'A1!%s\n' "$(openssl rand -hex 48)" | cut -c1-64 JWT_SECRET=your_mixed_64_char_secret_here # 敏感数据加密密钥 - 使用 openssl rand -base64 32 生成 # 注意:上线后必须稳定保存,不能随意更换 ENCRYPTION_KEY=your_base64_32_byte_encryption_key_here # ============ 建议配置 ============ # 管理员初始密码(首次启动后建议立即修改) ADMIN_PASSWORD=your_admin_password # Redis 密码(可选但推荐) REDIS_PASSWORD=your_redis_password ``` --- ### 完整 .env 配置示例(生产环境推荐) ```bash # ============ 数据库配置 ============ POSTGRES_USER=incudal POSTGRES_PASSWORD=BJ4hbYQTLsz97zzJUGg8RFiq POSTGRES_DB=incudal # ============ Redis 配置 ============ REDIS_PASSWORD=redis_password_here # ============ 安全配置(必须修改!)============ # JWT 密钥 - 生成方式: # printf 'A1!%s\n' "$(openssl rand -hex 48)" | cut -c1-64 JWT_SECRET=A1!b7e9c4d0f2a8e6b9d1c3f5a7b8d0e2c4f6a9b1d3e5c7a8f0b2d4e6c8 # Cookie 签名密钥(可选,增强安全性) COOKIE_SECRET=another_random_string_here # 敏感数据加密密钥(2FA 等)- 生成方式: openssl rand -base64 32 ENCRYPTION_KEY=XpPc3tcVSmy4/pxpLL40jVfMDJyayR+bE1ibamEWlys= # ============ 应用配置 ============ APP_PORT=3000 ADMIN_PASSWORD=QpXEZrBkDosvu7TFMcAJjbv7 LOG_LEVEL=info DISABLE_REQUEST_LOG=true # ============ CORS 配置 + 页面跳转(必配!)============ FRONTEND_URL=https://your-domain.com # ============ 支付回调(前后端分域时必配)============ # 第三方支付平台回调到后端时使用的公网地址 # 例如前端为 https://panel.example.com,后端为 https://api.example.com # 则这里应配置为 https://api.example.com PAYMENT_CALLBACK_BASE_URL=https://api.your-domain.com # 支付回调来源 IP 白名单(逗号分隔) # 留空时 Heleket 默认仅允许官方文档中的 webhook IP:31.133.220.8 # PAYMENT_CALLBACK_IP_WHITELIST=31.133.220.8 # 仅开发调试时可临时跳过支付回调 IP 白名单校验 # PAYMENT_CALLBACK_SKIP_IP_WHITELIST=false # ============ 监控告警(可选)============ # 系统异常时发送 Webhook 告警 # ALERT_WEBHOOK_URL=https://your-webhook-url # ============ 数据库稳定性调优(可选)============ DB_POOL_MAX=30 DB_POOL_MIN=2 DB_CONNECTION_TIMEOUT=10000 DB_IDLE_TIMEOUT=15000 DB_STATEMENT_TIMEOUT=30000 DB_QUERY_TIMEOUT=30000 TRAFFIC_CONCURRENCY_PER_HOST=10 TRAFFIC_HOST_CONCURRENCY=3 DB_WORKER_BACKOFF_MS=15000 ``` --- ### 部署命令 ```bash # 1. 创建 .env 文件 cp .env.example .env # 2. 编辑 .env,配置上述变量 nano .env # 3. 启动服务 docker-compose up -d # 4. 查看日志 docker-compose logs -f app ``` --- ### 变量来源说明 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 环境变量流向图 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ .env 文件 │ │ │ │ │ ├─── POSTGRES_* ──────► db 容器 (PostgreSQL) │ │ │ │ │ ├─── REDIS_PASSWORD ──► redis 容器 │ │ │ │ │ └─── 其他变量 ────────► app 容器 (Incudal) │ │ │ │ │ ├── DATABASE_URL (自动组装) │ │ ├── REDIS_URL (自动组装) │ │ ├── JWT_SECRET │ │ ├── ENCRYPTION_KEY │ │ ├── ADMIN_PASSWORD │ │ └── LOG_LEVEL 等 │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` **重点**:`DATABASE_URL` 和 `REDIS_URL` 由 docker-compose.yml 自动组装,无需在 .env 中配置。