- 后端: FastAPI + SQLAlchemy 2.0 + Pydantic v2 + Celery (19个API模块) - 前端: React 18 + TypeScript + Ant Design 5 + Zustand (19个页面组件) - 权限: RBAC四维权限体系 (RB-01~RB-13) - 任务: 四步向导创建 + 双执行器(龙虾/脚本) + 定时调度 - 部署: Docker Compose 6服务 + Nginx反代 + Alembic迁移 统计: 88个文件 | 8779行代码 | 默认账号: admin/admin123
112 lines
2.8 KiB
YAML
112 lines
2.8 KiB
YAML
version: '3.9'
|
|
|
|
services:
|
|
# ── PostgreSQL ──
|
|
db:
|
|
image: postgres:16-alpine
|
|
container_name: agent_db
|
|
restart: always
|
|
environment:
|
|
POSTGRES_DB: agent_system
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: agent_system_2026
|
|
ports:
|
|
- "5432:5432"
|
|
volumes:
|
|
- pgdata:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
# ── Redis ──
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: agent_redis
|
|
restart: always
|
|
ports:
|
|
- "6379:6379"
|
|
volumes:
|
|
- redisdata:/data
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
# ── Backend API ──
|
|
backend:
|
|
build: ./backend
|
|
container_name: agent_backend
|
|
restart: always
|
|
env_file: ./backend/.env
|
|
environment:
|
|
DATABASE_URL: postgresql+asyncpg://postgres:agent_system_2026@db:5432/agent_system
|
|
REDIS_URL: redis://redis:6379/0
|
|
CELERY_BROKER_URL: redis://redis:6379/1
|
|
CELERY_RESULT_BACKEND: redis://redis:6379/2
|
|
ports:
|
|
- "8000:8000"
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
command: >
|
|
sh -c "
|
|
alembic upgrade head &&
|
|
python -m app.scripts.seed &&
|
|
uvicorn app.main:app --host 0.0.0.0 --port 8000
|
|
"
|
|
|
|
# ── Celery Worker ──
|
|
celery-worker:
|
|
build: ./backend
|
|
container_name: agent_celery_worker
|
|
restart: always
|
|
env_file: ./backend/.env
|
|
environment:
|
|
DATABASE_URL: postgresql+psycopg2://postgres:agent_system_2026@db:5432/agent_system
|
|
REDIS_URL: redis://redis:6379/0
|
|
CELERY_BROKER_URL: redis://redis:6379/1
|
|
CELERY_RESULT_BACKEND: redis://redis:6379/2
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
command: celery -A app.celery_app worker --loglevel=info --concurrency=4
|
|
|
|
# ── Celery Beat (定时调度) ──
|
|
celery-beat:
|
|
build: ./backend
|
|
container_name: agent_celery_beat
|
|
restart: always
|
|
env_file: ./backend/.env
|
|
environment:
|
|
DATABASE_URL: postgresql+psycopg2://postgres:agent_system_2026@db:5432/agent_system
|
|
REDIS_URL: redis://redis:6379/0
|
|
CELERY_BROKER_URL: redis://redis:6379/1
|
|
CELERY_RESULT_BACKEND: redis://redis:6379/2
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
command: celery -A app.celery_app beat --loglevel=info
|
|
|
|
# ── Frontend (Nginx + SPA) ──
|
|
frontend:
|
|
build: ./frontend
|
|
container_name: agent_frontend
|
|
restart: always
|
|
ports:
|
|
- "80:80"
|
|
depends_on:
|
|
- backend
|
|
|
|
volumes:
|
|
pgdata:
|
|
redisdata:
|