version: '3.8' services: # PostgreSQL数据库 db: image: postgres:15-alpine container_name: daily_report_db environment: POSTGRES_DB: daily_report POSTGRES_USER: daily_report_user POSTGRES_PASSWORD: daily_report_password volumes: - postgres_data:/var/lib/postgresql/data - ./backend/init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "5432:5432" networks: - daily_report_network restart: unless-stopped # Redis缓存 redis: image: redis:7-alpine container_name: daily_report_redis ports: - "6379:6379" volumes: - redis_data:/data networks: - daily_report_network restart: unless-stopped command: redis-server --appendonly yes # Django后端 backend: build: context: ./backend dockerfile: Dockerfile container_name: daily_report_backend environment: - DEBUG=False - SECRET_KEY=your-production-secret-key-here - DATABASE_URL=postgresql://daily_report_user:daily_report_password@db:5432/daily_report - REDIS_URL=redis://redis:6379/0 - ALLOWED_HOSTS=localhost,127.0.0.1,backend - CORS_ALLOWED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000 volumes: - ./backend:/app - static_volume:/app/staticfiles - media_volume:/app/media ports: - "8000:8000" depends_on: - db - redis networks: - daily_report_network restart: unless-stopped command: > sh -c "python manage.py collectstatic --noinput && python manage.py migrate && python create_superuser.py && gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 4" # Vue.js前端 frontend: build: context: ./frontend dockerfile: Dockerfile container_name: daily_report_frontend ports: - "3000:80" depends_on: - backend networks: - daily_report_network restart: unless-stopped # Nginx反向代理 nginx: image: nginx:alpine container_name: daily_report_nginx ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/conf.d:/etc/nginx/conf.d - static_volume:/var/www/static - media_volume:/var/www/media - ./ssl:/etc/nginx/ssl # SSL证书目录 depends_on: - backend - frontend networks: - daily_report_network restart: unless-stopped volumes: postgres_data: redis_data: static_volume: media_volume: networks: daily_report_network: driver: bridge