version: '3.8' services: postgres: image: postgres:15-alpine container_name: pragativeer_db environment: POSTGRES_USER: pragativeer_admin POSTGRES_PASSWORD: local_secure_password_2026 POSTGRES_DB: pragativeer_prod ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data networks: - pragativeer_network healthcheck: test: ["CMD-SHELL", "pg_isready -U pragativeer_admin -d pragativeer_prod"] interval: 5s timeout: 5s retries: 5 pgbouncer: image: edoburu/pgbouncer container_name: pragativeer_pgbouncer environment: - DATABASE_URL=postgres://pragativeer_admin:local_secure_password_2026@postgres:5432/pragativeer_prod volumes: - ./pgbouncer.ini:/etc/pgbouncer/pgbouncer.ini:ro - ./userlist.txt:/etc/pgbouncer/userlist.txt:ro depends_on: postgres: condition: service_healthy healthcheck: test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -p 5432 || exit 0"] interval: 5s timeout: 5s retries: 5 networks: - pragativeer_network redis: image: redis:7-alpine container_name: pragativeer_cache ports: - "6379:6379" volumes: - redisdata:/data networks: - pragativeer_network backend: build: context: ./backend dockerfile: Dockerfile.dev container_name: pragativeer_backend volumes: - ./backend:/app - ./admin_uploads:/app/admin_uploads:ro ports: - "8000:8000" environment: - DATABASE_URL=postgresql://pragativeer_admin:local_secure_password_2026@pgbouncer:5432/pragativeer_prod - REDIS_URL=redis://redis:6379/0 - ENV=development - MINIO_ENDPOINT=minio:9000 - MINIO_ACCESS_KEY=minio_admin - MINIO_SECRET_KEY=minio_secure_password_2026 - MINIO_BUCKET=pragativeer-uploads env_file: - ./backend/.env depends_on: postgres: condition: service_healthy pgbouncer: condition: service_healthy networks: - pragativeer_network worker: build: context: ./backend dockerfile: Dockerfile.dev container_name: pragativeer_worker command: celery -A worker.celery_app worker --loglevel=info volumes: - ./backend:/app environment: - DATABASE_URL=postgresql://pragativeer_admin:local_secure_password_2026@pgbouncer:5432/pragativeer_prod - REDIS_URL=redis://redis:6379/0 - MINIO_ENDPOINT=minio:9000 - MINIO_ACCESS_KEY=minio_admin - MINIO_SECRET_KEY=minio_secure_password_2026 - MINIO_BUCKET=pragativeer-uploads env_file: - ./backend/.env depends_on: - postgres - redis networks: - pragativeer_network beat: build: context: ./backend dockerfile: Dockerfile.dev container_name: pragativeer_beat command: celery -A worker.celery_app beat --loglevel=info volumes: - ./backend:/app environment: - DATABASE_URL=postgresql://pragativeer_admin:local_secure_password_2026@pgbouncer:5432/pragativeer_prod - REDIS_URL=redis://redis:6379/0 env_file: - ./backend/.env depends_on: - postgres - redis networks: - pragativeer_network frontend: build: context: . dockerfile: Dockerfile args: - NEXT_PUBLIC_API_URL=http://backend:8000 container_name: pragativeer_frontend ports: - "3000:3000" environment: - NEXT_PUBLIC_API_URL=http://backend:8000 - NEXT_PUBLIC_PAYMENT_GATEWAY=razorpay depends_on: - backend networks: - pragativeer_network minio: image: minio/minio:latest container_name: pragativeer_storage ports: - "9000:9000" - "9001:9001" volumes: - miniodata:/data environment: MINIO_ROOT_USER: minio_admin MINIO_ROOT_PASSWORD: minio_secure_password_2026 command: server /data --console-address ":9001" networks: - pragativeer_network volumes: pgdata: redisdata: miniodata: networks: pragativeer_network: driver: bridge