feat: 新增deploy.sh --init-env一键初始化.env+完善JWT_SECRET管理文档

新增 --init-env 功能:
  - 自动生成 256 位随机 JWT_SECRET (openssl rand -base64 32)
  - 推送完整.env模板到服务器,设置权限600
  - 文件已存在时先备份再覆盖,有确认提示
  - dry-run 模式下安全预览

JWT_SECRET 管理方案:
  - dev/prod 使用不同密钥
  - 仅在服务器.env中存储(不进入Git/TOML)
  - deploy.sh check_env_file() 部署前自动验证
  - AGENTS.md 新增完整管理文档(生成/存储/验证/轮换)

deploy.sh 帮助文档同步更新 --init-env 说明
This commit is contained in:
moira
2026-05-13 15:31:23 +08:00
parent 0ffe2065e1
commit cb483298d5
2 changed files with 154 additions and 4 deletions

View File

@@ -581,6 +581,7 @@ let new_expires = base_time + days(pkg_days);
| `--skip-tests` | 跳过部署后测试 |
| `--rollback` | 回滚到上一个备份版本 |
| `--backup-list` | 列出可用备份 |
| `--init-env` | 初始化远程 .env生成随机 JWT_SECRET + 推送模板到服务器) |
| `--help, -h` | 显示帮助信息 |
**示例:**
@@ -588,6 +589,7 @@ let new_expires = base_time + days(pkg_days);
./deploy.sh production --dry-run # 预览生产部署
./deploy.sh production --yes # 无需确认直接部署
./deploy.sh development --skip-tests # 跳过测试
./deploy.sh production --init-env # 初始化生产 .env
./deploy.sh production --rollback # 回滚到上一个版本
./deploy.sh production --backup-list # 列出可用备份
```
@@ -660,12 +662,49 @@ WEBHOOK_URL="https://example.com/webhook" ./deploy.sh production
参考本地文件:`rust-backend.service`(生产)、`rust-backend-dev.service`(开发)
**2. 创建 .env 环境配置:**
**2. 初始化 .env 环境配置(推荐使用 deploy.sh**
开发环境:`/root/rust/rust_backend_dev/.env`
生产环境:`/root/rust/rust_backend/.env`
```bash
# 生产环境 — 自动生成随机 JWT_SECRET推送 .env 模板到服务器
./deploy.sh production --init-env
参考 `.env.example` 或询问运维获取。
# 开发环境
./deploy.sh development --init-env
```
`--init-env` 会:
- 生成 256 位随机 `JWT_SECRET``openssl rand -base64 32`
- 推送 `.env` 文件到服务器 `${REMOTE_DIR}/.env`
- 设置文件权限 `600`(仅 root 可读)
- 如文件已存在,先备份再覆盖
执行后仍需 SSH 到服务器填写以下手动变量:
```bash
ssh root@1panel-server
vim /root/rust/rust_backend/.env
# 必须手动填写:
DATABASE_URL=postgres://user:pass@host:5432/dbname
WECHAT_APPID=wx...
WECHAT_SECRET=xxx
```
> **不建议**手动创建 `.env`——因为 `deploy.sh --init-env` 会自动生成强随机 `JWT_SECRET`,手动创建容易忘记生成或使用弱密钥。
### JWT_SECRET 管理
| 生命周期 | 操作 | 说明 |
|----------|------|------|
| **生成** | `openssl rand -base64 32` | 首次 `deploy.sh --init-env` 自动完成 |
| **存储** | 服务器 `.env`,权限 600 | 不进入 Git不进入 TOML 配置 |
| **验证** | `deploy.sh check_env_file` | 部署前自动检查是否缺失 |
| **轮换** | 手动替换 → 重启服务 | 旧 token 失效,所有用户需重新登录 |
**原则:**
- Dev 和 Prod 使用**不同**的 JWT_SECRET
- JWT_SECRET **永不出现在** `config/*.toml` 或任何 Git 管理的文件中
- 服务器 `.env` 文件**不通过 `deploy.sh` 同步**(不会上传到服务器),仅手动或通过 `--init-env` 创建
**3. 启用服务:**