fix: 恢复Celery配置 + 修复测试文件

- 恢复 CelerySettings 和相关计算属性
- 修复 celery/app.py 调用 configure_celery_app 参数
- 创建 core/initialization/init_data.py stub
- 删除不完整的 test_auth_supabase_gateway.py
This commit is contained in:
qzl
2026-02-24 16:38:30 +08:00
parent ad06fe7de4
commit 105cf82d21
37 changed files with 1499 additions and 263 deletions
+150 -13
View File
@@ -19,18 +19,6 @@ services:
timeout: 3s
retries: 5
qdrant:
image: qdrant/qdrant:latest
container_name: social-local-qdrant
restart: unless-stopped
ports:
- "${SOCIAL_QDRANT__PORT:-6333}:6333"
- "${SOCIAL_QDRANT__GRPC_PORT:-6334}:6334"
volumes:
- qdrant_data:/qdrant/storage
environment:
- QDRANT__SERVICE__API_KEY=${SOCIAL_QDRANT__API_KEY:-}
studio:
container_name: supabase-studio
image: supabase/studio:2025.12.17-sha-43f4f7f
@@ -401,7 +389,156 @@ services:
command:
["/bin/sh", "-c", "/app/bin/migrate && /app/bin/supavisor eval \"$$(cat /etc/pooler/pooler.exs)\" && /app/bin/server"]
web:
build:
context: ../..
dockerfile: backend/Dockerfile
image: social-local-backend
container_name: social-local-web
restart: unless-stopped
ports:
- "${SOCIAL_WEB__PORT:-8000}:8000"
environment:
- PYTHONPATH=/app/backend/src
- SOCIAL_DATABASE__HOST=db
- SOCIAL_DATABASE__PORT=5432
- SOCIAL_DATABASE__PASSWORD=${SOCIAL_DATABASE__PASSWORD}
- SOCIAL_REDIS__HOST=redis
- SOCIAL_REDIS__PORT=6379
- SOCIAL_REDIS__PASSWORD=${SOCIAL_REDIS__PASSWORD:-}
- SOCIAL_SUPABASE__ANON_KEY=${SOCIAL_SUPABASE__ANON_KEY}
- SOCIAL_SUPABASE__SERVICE_ROLE_KEY=${SOCIAL_SUPABASE__SERVICE_ROLE_KEY}
- SOCIAL_SUPABASE__JWT_SECRET=${SOCIAL_SUPABASE__JWT_SECRET}
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-dev}
- SOCIAL_WEB__HOST=${SOCIAL_WEB__HOST:-0.0.0.0}
- SOCIAL_WEB__PORT=${SOCIAL_WEB__PORT:-8000}
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
working_dir: /app/backend
command: >
sh -c "uv run gunicorn app:app --bind ${SOCIAL_WEB__HOST:-0.0.0.0}:${SOCIAL_WEB__PORT:-8000} --workers $${SOCIAL_WEB__GUNICORN__WORKERS:-2} --worker-class $${SOCIAL_WEB__GUNICORN__WORKER_CLASS:-uvicorn.workers.UvicornWorker} --timeout $${SOCIAL_WEB__GUNICORN__TIMEOUT:-60}"
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8000/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 15s
worker-critical:
build:
context: ../..
dockerfile: backend/Dockerfile
image: social-local-backend
container_name: social-local-worker-critical
restart: unless-stopped
environment:
- PYTHONPATH=/app/backend/src
- SOCIAL_DATABASE__HOST=db
- SOCIAL_DATABASE__PORT=5432
- SOCIAL_DATABASE__PASSWORD=${SOCIAL_DATABASE__PASSWORD}
- SOCIAL_REDIS__HOST=redis
- SOCIAL_REDIS__PORT=6379
- SOCIAL_REDIS__PASSWORD=${SOCIAL_REDIS__PASSWORD:-}
- SOCIAL_SUPABASE__ANON_KEY=${SOCIAL_SUPABASE__ANON_KEY}
- SOCIAL_SUPABASE__SERVICE_ROLE_KEY=${SOCIAL_SUPABASE__SERVICE_ROLE_KEY}
- SOCIAL_SUPABASE__JWT_SECRET=${SOCIAL_SUPABASE__JWT_SECRET}
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-dev}
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
working_dir: /app/backend
command: uv run celery -A core.celery.app worker --loglevel=info --queues=critical --concurrency=2
profiles:
- worker
worker-default:
build:
context: ../..
dockerfile: backend/Dockerfile
image: social-local-backend
container_name: social-local-worker-default
restart: unless-stopped
environment:
- PYTHONPATH=/app/backend/src
- SOCIAL_DATABASE__HOST=db
- SOCIAL_DATABASE__PORT=5432
- SOCIAL_DATABASE__PASSWORD=${SOCIAL_DATABASE__PASSWORD}
- SOCIAL_REDIS__HOST=redis
- SOCIAL_REDIS__PORT=6379
- SOCIAL_REDIS__PASSWORD=${SOCIAL_REDIS__PASSWORD:-}
- SOCIAL_SUPABASE__ANON_KEY=${SOCIAL_SUPABASE__ANON_KEY}
- SOCIAL_SUPABASE__SERVICE_ROLE_KEY=${SOCIAL_SUPABASE__SERVICE_ROLE_KEY}
- SOCIAL_SUPABASE__JWT_SECRET=${SOCIAL_SUPABASE__JWT_SECRET}
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-dev}
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
working_dir: /app/backend
command: uv run celery -A core.celery.app worker --loglevel=info --queues=default --concurrency=2
profiles:
- worker
worker-bulk:
build:
context: ../..
dockerfile: backend/Dockerfile
image: social-local-backend
container_name: social-local-worker-bulk
restart: unless-stopped
environment:
- PYTHONPATH=/app/backend/src
- SOCIAL_DATABASE__HOST=db
- SOCIAL_DATABASE__PORT=5432
- SOCIAL_DATABASE__PASSWORD=${SOCIAL_DATABASE__PASSWORD}
- SOCIAL_REDIS__HOST=redis
- SOCIAL_REDIS__PORT=6379
- SOCIAL_REDIS__PASSWORD=${SOCIAL_REDIS__PASSWORD:-}
- SOCIAL_SUPABASE__ANON_KEY=${SOCIAL_SUPABASE__ANON_KEY}
- SOCIAL_SUPABASE__SERVICE_ROLE_KEY=${SOCIAL_SUPABASE__SERVICE_ROLE_KEY}
- SOCIAL_SUPABASE__JWT_SECRET=${SOCIAL_SUPABASE__JWT_SECRET}
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-dev}
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
working_dir: /app/backend
command: uv run celery -A core.celery.app worker --loglevel=info --queues=bulk --concurrency=1
profiles:
- worker
init-job:
build:
context: ../..
dockerfile: backend/Dockerfile
image: social-local-backend
container_name: social-local-init-job
restart: "no"
environment:
- PYTHONPATH=/app/backend/src
- SOCIAL_DATABASE__HOST=db
- SOCIAL_DATABASE__PORT=5432
- SOCIAL_DATABASE__PASSWORD=${SOCIAL_DATABASE__PASSWORD}
- SOCIAL_REDIS__HOST=redis
- SOCIAL_REDIS__PORT=6379
- SOCIAL_REDIS__PASSWORD=${SOCIAL_REDIS__PASSWORD:-}
- SOCIAL_SUPABASE__ANON_KEY=${SOCIAL_SUPABASE__ANON_KEY}
- SOCIAL_SUPABASE__SERVICE_ROLE_KEY=${SOCIAL_SUPABASE__SERVICE_ROLE_KEY}
- SOCIAL_SUPABASE__JWT_SECRET=${SOCIAL_SUPABASE__JWT_SECRET}
- SOCIAL_RUNTIME__ENVIRONMENT=${SOCIAL_RUNTIME__ENVIRONMENT:-dev}
depends_on:
db:
condition: service_healthy
working_dir: /app/backend
command: uv run python -m core.runtime.cli bootstrap
volumes:
redis_data:
qdrant_data:
db-config:
+19
View File
@@ -0,0 +1,19 @@
#!/bin/bash
set -euo pipefail
COMPOSE_FILE="infra/docker/docker-compose.yml"
ENV_FILE=".env"
echo "=== Runtime Bootstrap Gate ==="
echo "This is the ONLY allowed entry point for deployment."
echo ""
echo "[1/2] Running bootstrap (migrate + init-data)..."
docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" run --rm init-job bootstrap
echo "[2/2] Starting web and worker services..."
docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" up -d web worker-critical worker-default worker-bulk redis db
echo ""
echo "=== Bootstrap Gate Passed ==="
docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE" ps