diff --git a/.env.example b/.env.example index f025340..63af86b 100644 --- a/.env.example +++ b/.env.example @@ -2,11 +2,14 @@ DATABASE_URL=mysql://root:password@localhost:3306/duoqi # JWT +# 生成安全密钥: openssl rand -base64 32 +# 或: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" JWT_SECRET=change-me-to-a-secure-secret JWT_EXPIRES_IN=1h JWT_REFRESH_EXPIRES_IN=30d # Admin +# 生成方式同 JWT_SECRET,建议与生产环境使用不同的值 ADMIN_TOKEN=change-me-admin-token # Huawei ID Kit (Phase 1b) diff --git a/.env.prod.example b/.env.prod.example index c2fd3c4..8c998d3 100644 --- a/.env.prod.example +++ b/.env.prod.example @@ -5,11 +5,14 @@ DATABASE_URL=mysql://duoqi_prod:prod-password@your-rds-endpoint:3306/duoqi_prod # JWT +# 生成安全密钥: openssl rand -base64 32 +# 密钥长度必须 >= 32 字符 JWT_SECRET=prod-super-secret-jwt-key-change-this JWT_EXPIRES_IN=1h JWT_REFRESH_EXPIRES_IN=30d # Admin +# 生成方式同 JWT_SECRET,生产环境必须使用强密钥 ADMIN_TOKEN=prod-admin-token-change-this # Huawei ID Kit diff --git a/docs/ci-deployment-guide.md b/docs/ci-deployment-guide.md index 733dcb5..94fc671 100644 --- a/docs/ci-deployment-guide.md +++ b/docs/ci-deployment-guide.md @@ -344,14 +344,33 @@ FLUSH PRIVILEGES; #### 环境配置文件 +**密钥生成**(在配置环境变量之前): + +```bash +# 生成 JWT_SECRET(用于签名和验证用户 JWT) +openssl rand -base64 32 + +# 生成 ADMIN_TOKEN(管理后台认证令牌) +openssl rand -base64 32 + +# 或使用 Node.js 生成: +node -e "console.log(require('crypto').randomBytes(32).toString('base64'))" +``` + +> **安全提示**: +> - `JWT_SECRET` 必须至少 32 字符(代码中有强制校验) +> - 生产环境和测试环境必须使用不同的密钥 +> - 密钥生成后应妥善保管,不要提交到 Git 仓库 +> - 可在任意服务器生成,关键是通过安全渠道传输到目标环境 + **生产环境** `/opt/duoqi-api/.env.prod`: ```env DATABASE_URL=mysql://duoqi_prod:prod-password@your-rds-endpoint:3306/duoqi_prod -JWT_SECRET=prod-super-secret-jwt-key +JWT_SECRET=prod-super-secret-jwt-key # 替换为生成的密钥 JWT_EXPIRES_IN=1h JWT_REFRESH_EXPIRES_IN=30d -ADMIN_TOKEN=prod-admin-token +ADMIN_TOKEN=prod-admin-token # 替换为生成的密钥 PORT=3000 NODE_ENV=production LOG_LEVEL=warn @@ -362,10 +381,10 @@ LOG_LEVEL=warn ```env DATABASE_URL=mysql://duoqi_test:test-password@your-rds-endpoint:3306/duoqi_test -JWT_SECRET=test-secret-key +JWT_SECRET=test-secret-key # 与生产环境不同 JWT_EXPIRES_IN=1h JWT_REFRESH_EXPIRES_IN=30d -ADMIN_TOKEN=test-admin-token +ADMIN_TOKEN=test-admin-token # 与生产环境不同 PORT=3001 NODE_ENV=test LOG_LEVEL=debug