Files
vscode-workbench/BLOCKED_RUNBOOK.md
T

62 lines
3.6 KiB
Markdown
Raw 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.
# BLOCKED 可执行 Runbook(未执行,需拍板)
> 状态:只读落盘,不执行;不输出密钥原文;不提交 git;未改远端。
> 拍板格式:`B1暂不 / B2暂不 / B3暂不 / B5暂不 / B6暂不` 或注明哪项执行。
## B1 线上密钥轮换(需停机窗口)
- 前置:停机窗口 + 远端 docker.env 备份 + 回滚方案。
- 步骤(远端执行,占位符,非真实值):
1. `cp docker.env docker.env.bak.YYYYMMDD-HHMM`
2. 生成三段随机值分别写入 `DJANGO_SECRET_KEY` / `POSTGRES_PASSWORD` / `REDIS_PASSWORD`(本地生成后粘贴,不在聊天输出原文)
3. `docker compose --project-name chunyu -f docker-compose.yml -f docker-compose.server.yml restart backend postgres redis`
4. 验证:登录 /user/login、`/api/apidirectory/categories/` 200、Celery 心跳
5. 失败回滚:`cp docker.env.bak.* docker.env && restart` 同上
- 阻塞:缺停机窗口确认。
## B2 生产 TLS/HSTS(需域名+证书方案)
- 前置:域名 + 证书来源(ACME/ALB/WAF)+ 80/443 入口方案。
- 步骤:
1. 确认证书签发与续期路径
2. Nginx 增加 443 server + `Strict-Transport-Security`(仅 HTTPS 生效后加)
3. `docker exec chunyu-frontend nginx -t && docker restart chunyu-frontend`
4. 验证:`curl -i https://<domain>/` 安全头 + http→https 跳转
- 阻塞:缺域名与证书方案。
## B3 远端防火墙(需放行 IP 清单)
- 前置:放行 IP 清单(运维 IP / CI 出口 / 访客范围)。
- 步骤:
1. 备份现有 nftables/iptables 或云安全组规则
2. 仅放行清单 IP 访问 15432/16379/18000/18080,其余 deny
3. 验证:白名单 `curl` 通、非白名单超时/拒绝
4. 失败回滚:恢复备份规则
- 阻塞:缺放行 IP 清单。
## B5 容器 USER 非 root(需可用 daemon 构建验证)
- 现状只读取证:
- 后端 `chunyu_project/Dockerfile:22-23` 工作区已有 `useradd -m -u 10001 app` + `USER app`,但该文件被 `.gitignore:15` 按 `chunyu_project/` 整目录忽略,未跟踪。
- 前端 `chunyu_project_react/Dockerfile` 仍双 stage 无 `USER`。
- 本机 `docker version` server 经 npipe 连接失败,daemon 未起,无法构建验证。
- 可执行步骤(daemon 可用后,本地先验证,不推远端):
1. `docker build -f chunyu_project/Dockerfile -t chunyu-backend-nonroot:local chunyu_project`
2. `docker build -f chunyu_project_react/Dockerfile -t chunyu-frontend-nonroot:local chunyu_project_react`
3. 启动冒烟:`/user/login`、`/api/apidirectory/categories/`、media/staticfiles 可写
4. 通过后再谈远端发布与跟踪策略(当前后端 Dockerfile 被忽略,需另行决策是否纳入跟踪)
- 阻塞:缺可用 daemon + 是否纳入跟踪的确认。
## B6 历史清理(需确认执行 git rm --cached)
- 现状只读取证:`git ls-files | grep -icE` 重数 88,与冻结规格一致。
- 可执行命令(确认后执行,未执行):
- `git ls-files | grep -E '\.log$|\.png$|\.tar\.gz$|__pycache__|\.pyc$|^.*dist/|^shots/' > /tmp/b6-list.txt`
- 核对 `/tmp/b6-list.txt` 后:`xargs -a /tmp/b6-list.txt git rm --cached`
- `.gitignore` 已新增对应模式,只对新增生效;历史需上条命令去跟踪。
- 阻塞:缺 `git rm --cached` 执行确认。
## 本轮已验证(本地可逆项)
- `manage.py check` 0 issue CHECK_EXIT=0
- `makemigrations --check` MIG_EXIT=0
- 20 测试 TEST_EXIT=0
- `tsc` TSC_EXIT=0、`vite build` BUILD_EXIT=0
- `check_routes --base 127.0.0.1:5175` ROUTES=86 PASS=86
- Playwright 图片 2 passed
- `git diff --check` EXIT 0