# docker-compose.yml # 开发环境配置 - 支持本地构建和快速迭代 # # 使用方式: # docker compose up -d # 启动所有服务 # docker compose up -d --build # 重新构建并启动 # docker compose logs -f backend # 查看日志 # # 生产部署请使用: docker-compose.prod.yml services: # ============================================== # 前端服务 (C端用户 App) # ============================================== frontend: build: ./frontend image: dreamweaver-frontend:dev container_name: dreamweaver_frontend restart: unless-stopped ports: - "52080:80" depends_on: - backend # ============================================== # 管理后台前端 (Admin Console) # ============================================== frontend-admin: build: ./admin-frontend image: dreamweaver-admin-frontend:dev container_name: dreamweaver_frontend_admin restart: unless-stopped ports: - "52888:80" depends_on: - backend-admin # ============================================== # 后端服务 (FastAPI) # ============================================== backend: build: ./backend image: dreamweaver-backend:dev container_name: dreamweaver_backend restart: unless-stopped ports: - "52000:8000" env_file: - ./backend/.env environment: - DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER:-dreamweaver}:${POSTGRES_PASSWORD:-dreamweaver_password}@db:5432/${POSTGRES_DB:-dreamweaver_db} - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 - REDIS_URL=redis://redis:6379/0 volumes: - backend_static:/app/static depends_on: db: condition: service_healthy redis: condition: service_started # ============================================== # 管理后台后端 (Admin Backend) - 复用 backend 镜像 # ============================================== backend-admin: image: dreamweaver-backend:dev container_name: dreamweaver_backend_admin restart: unless-stopped ports: - "52800:8001" command: ["uvicorn", "app.admin_main:app", "--host", "0.0.0.0", "--port", "8001"] env_file: - ./backend/.env environment: - DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER:-dreamweaver}:${POSTGRES_PASSWORD:-dreamweaver_password}@db:5432/${POSTGRES_DB:-dreamweaver_db} - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 - REDIS_URL=redis://redis:6379/0 volumes: - backend_static:/app/static depends_on: backend: condition: service_started db: condition: service_healthy redis: condition: service_started # ============================================== # 工作节点 (Celery Worker) - 复用 backend 镜像 # ============================================== worker: image: dreamweaver-backend:dev container_name: dreamweaver_worker command: celery -A app.core.celery_app worker --loglevel=info restart: unless-stopped env_file: ./backend/.env environment: - DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER:-dreamweaver}:${POSTGRES_PASSWORD:-dreamweaver_password}@db:5432/${POSTGRES_DB:-dreamweaver_db} - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 - REDIS_URL=redis://redis:6379/0 depends_on: backend: condition: service_started redis: condition: service_started db: condition: service_healthy # ============================================== # 调度节点 (Celery Beat) - 复用 backend 镜像 # ============================================== celery-beat: image: dreamweaver-backend:dev container_name: dreamweaver_beat command: celery -A app.core.celery_app beat --loglevel=info restart: unless-stopped env_file: ./backend/.env environment: - DATABASE_URL=postgresql+asyncpg://${POSTGRES_USER:-dreamweaver}:${POSTGRES_PASSWORD:-dreamweaver_password}@db:5432/${POSTGRES_DB:-dreamweaver_db} - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 - REDIS_URL=redis://redis:6379/0 depends_on: backend: condition: service_started redis: condition: service_started # ============================================== # 数据库 (PostgreSQL) # ============================================== db: image: postgres:15-alpine container_name: dreamweaver_db restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-dreamweaver} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-dreamweaver_password} POSTGRES_DB: ${POSTGRES_DB:-dreamweaver_db} ports: - "52432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-dreamweaver}"] interval: 10s timeout: 5s retries: 5 # ============================================== # 缓存 (Redis) # ============================================== redis: image: redis:7-alpine container_name: dreamweaver_redis restart: unless-stopped ports: - "52379:6379" volumes: - redis_data:/data command: redis-server --appendonly yes # ============================================== # 数据库管理 (Adminer) - 仅开发环境 # ============================================== adminer: image: adminer container_name: dreamweaver_adminer restart: unless-stopped ports: - "52999:8080" depends_on: - db profiles: - dev # 仅在 --profile dev 时启动 volumes: postgres_data: redis_data: backend_static: