Files
incudal/.env.example
2026-06-20 14:26:29 +08:00

186 lines
7.4 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
根据分析 `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 IP31.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 中配置。