5.0 KiB
5.0 KiB
Project Bootstrap(任务清单)
说明:本清单用于把
plan.md拆成“可逐条执行”的任务。执行完成后请把对应项从[ ]勾选为[x]。
0. 约定与前置
- 确认后端依赖管理方式:使用
requirements.txt + pip - 确认环境:仅 dev / prod
- 确认 Redis 方案:单实例 + ACL(
dev:*/pro:*)+ prodmaxmemory=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|prodDATABASE_URL=.../mindfulness_dev(dev)或.../mindfulness(prod)REDIS_URL=redis://<user>:<pass>@<REDIS_HOST>:6379/0CELERY_BROKER_URL=redis://<user>:<pass>@<REDIS_HOST>:6379/0- (默认不写)
CELERY_RESULT_BACKEND
B2. FastAPI 最小入口
- 新增
server/app/main.py- 创建 FastAPI 实例
app - 增加健康检查接口
/healthz
- 创建 FastAPI 实例
- 新增
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)
- Celery 初始化使用
- 新增 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)