version: '3.8' services: # PostgreSQL Database postgres: image: postgres:14 environment: POSTGRES_DB: saas_platform POSTGRES_USER: postgres POSTGRES_PASSWORD: devpass volumes: - postgres_data:/var/lib/postgresql/data - ./docker/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql ports: - "5432:5432" networks: - saas-network # Redis Cache redis: image: redis:7-alpine ports: - "6379:6379" volumes: - redis_data:/data networks: - saas-network # Backend Django API backend: build: context: ./backend dockerfile: Dockerfile environment: - DEBUG=True - DB_HOST=postgres - DB_NAME=saas_platform - DB_USER=postgres - DB_PASSWORD=devpass - REDIS_URL=redis://redis:6379/0 - SECRET_KEY=django-insecure-key-for-development - ALLOWED_HOSTS=localhost,backend volumes: - ./backend:/app - ./shared:/shared ports: - "8000:8000" depends_on: - postgres - redis networks: - saas-network command: python manage.py runserver 0.0.0.0:8000 # Frontend Next.js frontend: build: context: ./frontend dockerfile: Dockerfile environment: - NEXT_PUBLIC_API_URL=http://localhost:8000/api/v1 - NEXT_PUBLIC_APP_URL=http://localhost:3000 volumes: - ./frontend:/app - /app/node_modules - /app/.next ports: - "3000:3000" depends_on: - backend networks: - saas-network command: npm run dev # Celery Worker celery: build: context: ./backend dockerfile: Dockerfile environment: - DEBUG=True - DB_HOST=postgres - DB_NAME=saas_platform - DB_USER=postgres - DB_PASSWORD=devpass - REDIS_URL=redis://redis:6379/0 - SECRET_KEY=django-insecure-key-for-development volumes: - ./backend:/app depends_on: - postgres - redis networks: - saas-network command: celery -A core worker --loglevel=info # Celery Beat (Scheduled Tasks) celery-beat: build: context: ./backend dockerfile: Dockerfile environment: - DEBUG=True - DB_HOST=postgres - DB_NAME=saas_platform - DB_USER=postgres - DB_PASSWORD=devpass - REDIS_URL=redis://redis:6379/0 - SECRET_KEY=django-insecure-key-for-development volumes: - ./backend:/app depends_on: - postgres - redis networks: - saas-network command: celery -A core beat --loglevel=info volumes: postgres_data: redis_data: networks: saas-network: driver: bridge