feat: complete auth/profile username migration and runtime safeguards
This commit is contained in:
@@ -28,18 +28,43 @@ tmux attach -t social-dev
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml up -d
|
||||
|
||||
# 2. 运行迁移和初始化
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile job run --rm init-job
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile job run --rm --build init-job
|
||||
|
||||
# 3. 一键执行应用层启动(bootstrap + web + workers)
|
||||
bash infra/scripts/dev-app-up.sh
|
||||
```
|
||||
|
||||
### 生产环境迁移防遗漏(必读)
|
||||
|
||||
- 生产发布前必须先通过 bootstrap gate,再启动业务进程;禁止绕过 gate 直接起服务。
|
||||
- 使用容器执行迁移时必须带 `--build`,确保最新 Alembic 迁移已进入镜像。
|
||||
- 建议在迁移后做一次版本核对,确认已到预期 head。
|
||||
|
||||
```bash
|
||||
# 1) 先执行 bootstrap gate
|
||||
make runtime-bootstrap-gate
|
||||
|
||||
# 2) 如采用 init-job 单跑,必须带 --build
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile job run --rm --build init-job
|
||||
|
||||
# 3) 核对 Alembic 版本
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml exec -T db \
|
||||
psql -U postgres -d postgres -c "SELECT version_num FROM public.alembic_version;"
|
||||
```
|
||||
|
||||
### 本地 CLI (开发调试)
|
||||
|
||||
> 适用于本地开发调试,不依赖 Docker。
|
||||
> 开发调试阶段推荐直接使用本地一次性迁移脚本,不通过 Docker 触发数据库迁移,避免反复重建镜像。
|
||||
|
||||
```bash
|
||||
# 初始化/迁移
|
||||
# 推荐:一次性迁移(开发调试)
|
||||
PYTHONPATH=backend/src uv run python -m core.runtime.cli migrate
|
||||
|
||||
# 需要初始化数据时再执行
|
||||
PYTHONPATH=backend/src uv run python -m core.runtime.cli init-data
|
||||
|
||||
# 或一键执行(migrate + init-data)
|
||||
PYTHONPATH=backend/src uv run python -m core.runtime.cli bootstrap
|
||||
|
||||
# 启动 Web (gunicorn)
|
||||
@@ -102,7 +127,7 @@ tmux kill-session -t social-dev
|
||||
curl -fsS http://127.0.0.1:${SOCIAL_SUPABASE__KONG_HTTP_PORT:-8000}/health
|
||||
|
||||
# 数据库迁移与初始化
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile job run --rm init-job
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile job run --rm --build init-job
|
||||
```
|
||||
|
||||
## 查看服务状态
|
||||
@@ -112,7 +137,30 @@ docker compose --env-file .env -f infra/docker/docker-compose.yml ps
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml logs -f db
|
||||
|
||||
# init-job 为一次性任务(run --rm),如需查看日志请重跑:
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile job run --rm init-job
|
||||
docker compose --env-file .env -f infra/docker/docker-compose.yml --profile job run --rm --build init-job
|
||||
```
|
||||
|
||||
## Auth/Profile 验证
|
||||
|
||||
```bash
|
||||
# signup: username + email + password
|
||||
curl -sS -X POST http://127.0.0.1:8000/api/v1/auth/signup \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"username":"demo","email":"demo@example.com","password":"secret123"}'
|
||||
|
||||
# login: email + password
|
||||
curl -sS -X POST http://127.0.0.1:8000/api/v1/auth/login \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"email":"demo@example.com","password":"secret123"}'
|
||||
|
||||
# by-email lookup
|
||||
curl -sS "http://127.0.0.1:8000/api/v1/auth/users/by-email?email=demo@example.com"
|
||||
|
||||
# patch profile: username/avatar_url/bio only
|
||||
curl -sS -X PATCH http://127.0.0.1:8000/api/v1/profile/me \
|
||||
-H 'Content-Type: application/json' \
|
||||
-H "Authorization: Bearer <access_token>" \
|
||||
-d '{"username":"demo2","bio":"hello"}'
|
||||
```
|
||||
|
||||
---
|
||||
@@ -125,3 +173,4 @@ docker compose --env-file .env -f infra/docker/docker-compose.yml --profile job
|
||||
| 2026-02-24 | 清理配置:合并 AppSettings 到 WebSettings,删除 Worker 旧配置 (enabled_queues/queues),统一使用 SOCIAL_WEB__GUNICORN__* 命名 |
|
||||
| 2026-02-24 | 开发阶段 compose 暂不编排 web/worker,仅保留 redis/supabase 与 init-job |
|
||||
| 2026-02-24 | 新增 dev-app-up 脚本:手动基础设施后,一键 bootstrap + tmux 拉起 web/worker |
|
||||
| 2026-02-25 | 补充迁移防遗漏规则:容器迁移命令统一追加 --build;开发调试优先使用本地 CLI 一次性迁移脚本 |
|
||||
|
||||
Reference in New Issue
Block a user