first commit

This commit is contained in:
qwer-xyz
2026-06-20 14:22:31 +08:00
commit c2498911ab
793 changed files with 291660 additions and 0 deletions
+185
View File
@@ -0,0 +1,185 @@
根据分析 `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 中配置。