Files
dreamweaver/docker-compose.yml
zhangtuo e9d7f8832a Initial commit: clean project structure
- Backend: FastAPI + SQLAlchemy + Celery (Python 3.11+)
- Frontend: Vue 3 + TypeScript + Pinia + Tailwind
- Admin Frontend: separate Vue 3 app for management
- Docker Compose: 9 services orchestration
- Specs: design prototypes, memory system PRD, product roadmap

Cleanup performed:
- Removed temporary debug scripts from backend root
- Removed deprecated admin_app.py (embedded UI)
- Removed duplicate docs from admin-frontend
- Updated .gitignore for Vite cache and egg-info
2026-01-20 18:20:03 +08:00

175 lines
5.2 KiB
YAML

version: '3.8'
services:
# ==============================================
# 前端服务 (C端用户 App)
# ==============================================
frontend:
build:
context: ./frontend
dockerfile: Dockerfile
container_name: dreamweaver_frontend
restart: always
ports:
- "52080:80" # User App UI
depends_on:
- backend
# ==============================================
# 管理后台前端 (Admin Console)
# ==============================================
frontend-admin:
build:
context: ./admin-frontend
dockerfile: Dockerfile
container_name: dreamweaver_frontend_admin
restart: always
ports:
- "52888:80" # Admin Console UI
depends_on:
- backend-admin
# ==============================================
# 后端服务 (FastAPI)
# ==============================================
backend:
build:
context: ./backend
dockerfile: Dockerfile
container_name: dreamweaver_backend
restart: always
ports:
- "52000:8000" # User App API
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
volumes:
- backend_static:/app/static
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
# ==============================================
# 管理后台后端 (Admin Backend)
# ==============================================
backend-admin:
build:
context: ./backend
dockerfile: Dockerfile
container_name: dreamweaver_backend_admin
restart: always
ports:
- "52800:8001" # Admin API
command: ["uvicorn", "app.admin_main:app", "--host", "0.0.0.0", "--port", "8001"]
env_file:
- ./backend/.env
environment:
# 复用相同的 DB/Redis 连接
- 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
volumes:
- backend_static:/app/static
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
# ==============================================
# ==============================================
# 工作节点 (Celery Worker)
# ==============================================
# ==============================================
# 工作节点 (Celery Worker)
# ==============================================
worker:
build:
context: ./backend
container_name: dreamweaver_worker
command: celery -A app.core.celery_app worker --loglevel=info
restart: always
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
depends_on:
- backend
- redis
# ==============================================
# 调度节点 (Celery Beat)
# ==============================================
celery-beat:
build:
context: ./backend
container_name: dreamweaver_beat
command: celery -A app.core.celery_app beat --loglevel=info
restart: always
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
depends_on:
- backend
- redis
# ==============================================
# 数据库 (PostgreSQL)
# ==============================================
db:
image: postgres:15-alpine
container_name: dreamweaver_db
restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER:-dreamweaver}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-dreamweaver_password}
POSTGRES_DB: ${POSTGRES_DB:-dreamweaver_db}
ports:
- "52432:5432" # DB Host Port
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: always
ports:
- "52379:6379" # Redis Host Port
volumes:
- redis_data:/data
command: redis-server --appendonly yes
# ==============================================
# 数据库管理 (Adminer)
# ==============================================
adminer:
image: adminer
container_name: dreamweaver_adminer
restart: always
ports:
- "52999:8080" # Adminer UI
depends_on:
- db
volumes:
postgres_data:
redis_data:
backend_static: