init
This commit is contained in:
125
spec_kit/Project Bootstrap/tasks.md
Normal file
125
spec_kit/Project Bootstrap/tasks.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# Project Bootstrap(任务清单)
|
||||
|
||||
> 说明:本清单用于把 `plan.md` 拆成“可逐条执行”的任务。执行完成后请把对应项从 `[ ]` 勾选为 `[x]`。
|
||||
|
||||
## 0. 约定与前置
|
||||
|
||||
- [ ] **确认后端依赖管理方式**:使用 `requirements.txt + pip`
|
||||
- [ ] **确认环境**:仅 dev / prod
|
||||
- [ ] **确认 Redis 方案**:单实例 + ACL(`dev:*`/`pro:*`)+ prod `maxmemory=256mb`(硬限制)
|
||||
- [ ] **确认迁移工具**:Alembic
|
||||
- [ ] **确认部署方式**:MySQL/Redis 已部署,后端通过环境变量连接(不做 Docker 起 MySQL/Redis)
|
||||
|
||||
## A. 现有 MySQL/Redis 验证与环境隔离确认
|
||||
|
||||
### A1. MySQL(schema)确认
|
||||
|
||||
- [ ] 确认 dev schema:`mindfulness_dev` 已存在(字符集 `utf8mb4`)
|
||||
- [ ] 确认 prod schema:`mindfulness` 已存在(字符集 `utf8mb4`)
|
||||
|
||||
### A2. Redis(ACL + maxmemory=256MB)确认
|
||||
|
||||
- [ ] 确认 Redis 已启用 ACL,并存在账号:
|
||||
- [ ] `dev_user` 仅允许访问 `~dev:*`
|
||||
- [ ] `pro_user` 仅允许访问 `~pro:*`
|
||||
- [ ] 确认生产环境 Redis 内存限制:
|
||||
- [ ] `maxmemory=256mb` 生效
|
||||
- [ ] `maxmemory-policy=noeviction` 生效(队列优先,不丢任务)
|
||||
|
||||
### A3. Redis ACL 验收(必须可复现)
|
||||
|
||||
- [ ] 使用 `dev_user` 写入 `dev:test=1` 成功
|
||||
- [ ] 使用 `dev_user` 写入 `pro:test=1` 失败(权限不足)
|
||||
- [ ] 使用 `pro_user` 写入 `pro:test=1` 成功
|
||||
- [ ] 使用 `pro_user` 写入 `dev:test=1` 失败(权限不足)
|
||||
|
||||
### A4. 可选:把现有配置“备份到仓库”(不参与部署)
|
||||
|
||||
- [ ] (可选)新建 `infra/redis/users.acl`(把线上 ACL 规则复制备份,注意去掉真实密码)
|
||||
- [ ] (可选)新建 `infra/redis/redis.prod.conf`(把线上关键参数备份:maxmemory/noeviction/aclfile 等)
|
||||
- [ ] (可选)新建 `infra/mysql/init/00-create-schemas.sql`(备份 schema 创建脚本)
|
||||
|
||||
## B. 后端工程骨架(server/)落地
|
||||
|
||||
> 当前 `server/` 目录可能尚未创建代码文件,本阶段目标是“能启动、能连库、能跑迁移、能跑 Celery”。
|
||||
|
||||
### B1. 依赖与环境变量模板
|
||||
|
||||
- [ ] 新增 `server/requirements.txt`
|
||||
- [ ] FastAPI、uvicorn
|
||||
- [ ] SQLAlchemy 2.x(异步)+ MySQL driver(如 `aiomysql`)
|
||||
- [ ] pydantic-settings(pydantic v2)
|
||||
- [ ] alembic
|
||||
- [ ] celery、redis(Python 客户端)
|
||||
- [ ] pytest
|
||||
- [ ] 新增 `server/.env.example`(仅字段结构,不含真实值)
|
||||
- [ ] `APP_ENV=dev|prod`
|
||||
- [ ] `DATABASE_URL=.../mindfulness_dev`(dev)或 `.../mindfulness`(prod)
|
||||
- [ ] `REDIS_URL=redis://<user>:<pass>@<REDIS_HOST>:6379/0`
|
||||
- [ ] `CELERY_BROKER_URL=redis://<user>:<pass>@<REDIS_HOST>:6379/0`
|
||||
- [ ] (默认不写)`CELERY_RESULT_BACKEND`
|
||||
|
||||
### B2. FastAPI 最小入口
|
||||
|
||||
- [ ] 新增 `server/app/main.py`
|
||||
- [ ] 创建 FastAPI 实例 `app`
|
||||
- [ ] 增加健康检查接口 `/healthz`
|
||||
- [ ] 新增 `server/app/core/config.py`
|
||||
- [ ] 使用 `pydantic-settings`
|
||||
- [ ] 根据 `APP_ENV` 加载 `.env.dev` / `.env.prod`
|
||||
|
||||
### B3. SQLAlchemy 与数据库连接
|
||||
|
||||
- [ ] 新增 `server/app/db/`(目录)
|
||||
- [ ] 新增 `server/app/db/session.py`
|
||||
- [ ] 从 `DATABASE_URL` 创建 async engine
|
||||
- [ ] 提供 session 工厂
|
||||
|
||||
### B4. Alembic 初始化
|
||||
|
||||
- [ ] 初始化 Alembic:
|
||||
- [ ] 生成 `server/alembic.ini`
|
||||
- [ ] 生成 `server/alembic/`(env.py / versions/)
|
||||
- [ ] 配置从环境变量读取数据库连接
|
||||
- [ ] 验收:
|
||||
- [ ] 能执行 `alembic revision -m "init"`(即使空迁移也可)
|
||||
- [ ] 能执行 `alembic upgrade head`
|
||||
|
||||
## C. Celery 最小闭环(Redis broker + 队列前缀)
|
||||
|
||||
### C1. Celery 入口与任务示例
|
||||
|
||||
- [ ] 新增 `server/app/worker.py`
|
||||
- [ ] Celery 初始化使用 `CELERY_BROKER_URL`
|
||||
- [ ] 默认 **不启用** result backend(或仅 dev 可选)
|
||||
- [ ] 配置默认队列名带环境前缀(例如 `dev:push` / `pro:push`)
|
||||
- [ ] 新增 1 个示例任务(例如 `server/app/tasks/ping.py`)
|
||||
- [ ] 任务只传小参数(如字符串/ID)
|
||||
|
||||
### C2. Worker/Beat 启动与验收
|
||||
|
||||
- [ ] Worker 验收:
|
||||
- [ ] `celery -A app.worker:celery_app worker -l info` 可启动
|
||||
- [ ] 发送任务后能被消费
|
||||
- [ ] Beat(如需要定时):
|
||||
- [ ] `celery -A app.worker:celery_app beat -l info` 可启动
|
||||
- [ ] 能按周期触发示例任务
|
||||
|
||||
## D. 文档与验收补全
|
||||
|
||||
### D1. 更新 README 与约定一致
|
||||
|
||||
- [ ] 更新 `server/README.md`
|
||||
- [ ] 明确:`requirements.txt + pip` 作为依赖安装方式
|
||||
- [ ] 明确:dev/pro MySQL schema(`mindfulness_dev`/`mindfulness`)
|
||||
- [ ] 明确:Redis ACL + key 前缀、prod `maxmemory=256mb` 硬限制
|
||||
- [ ] 明确:Celery 默认不启用 result backend(或启用需 TTL)
|
||||
- [ ] (可选)更新根 `README.md`
|
||||
- [ ] 追加:基础设施依赖与 dev/pro 隔离约定摘要
|
||||
|
||||
### D2. 最终验收清单(完成后统一勾选)
|
||||
|
||||
- [ ] **环境隔离**:dev/pro MySQL schema 与 Redis ACL 均生效
|
||||
- [ ] **资源约束**:prod Redis `maxmemory=256mb` 生效
|
||||
- [ ] **可运行性**:FastAPI/Celery 可启动并完成最小任务闭环(依赖通过环境变量连接现有 MySQL/Redis)
|
||||
|
||||
Reference in New Issue
Block a user