version: '3.8' services: web: container_name: wagw-web build: context: ./docker/nginx dockerfile: Dockerfile ports: - "8088:80" volumes: - ./:/var/www/html - ./docker/nginx/conf.d:/etc/nginx/conf.d depends_on: - app networks: - wagw-network restart: unless-stopped app: container_name: wagw-app build: context: ./docker/php dockerfile: Dockerfile volumes: - ./:/var/www/html - ./docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini environment: - DB_CONNECTION=pgsql - DB_HOST=postgres - DB_PORT=5432 - DB_DATABASE=${DB_DATABASE:-wagw_saas} - DB_USERNAME=${DB_USERNAME:-wagw_user} - DB_PASSWORD=${DB_PASSWORD:-wagw_secret} - REDIS_HOST=redis - REDIS_PORT=6379 - QUEUE_CONNECTION=redis depends_on: - postgres - redis networks: - wagw-network restart: unless-stopped postgres: container_name: wagw-postgres image: postgres:16-alpine ports: - "54328:5432" environment: - POSTGRES_DB=${DB_DATABASE:-wagw_saas} - POSTGRES_USER=${DB_USERNAME:-wagw_user} - POSTGRES_PASSWORD=${DB_PASSWORD:-wagw_secret} volumes: - postgres-data:/var/lib/postgresql/data networks: - wagw-network restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME:-wagw_user}"] interval: 10s timeout: 5s retries: 5 redis: container_name: wagw-redis image: redis:7-alpine ports: - "63798:6379" volumes: - redis-data:/data networks: - wagw-network restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 5 worker: container_name: wagw-worker build: context: ./docker/php dockerfile: Dockerfile command: php artisan queue:work redis --tries=3 --backoff=10,60,300 --timeout=120 volumes: - ./:/var/www/html - ./docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini environment: - DB_CONNECTION=pgsql - DB_HOST=postgres - DB_PORT=5432 - DB_DATABASE=${DB_DATABASE:-wagw_saas} - DB_USERNAME=${DB_USERNAME:-wagw_user} - DB_PASSWORD=${DB_PASSWORD:-wagw_secret} - REDIS_HOST=redis - REDIS_PORT=6379 - QUEUE_CONNECTION=redis depends_on: - app - postgres - redis networks: - wagw-network restart: unless-stopped scheduler: container_name: wagw-scheduler build: context: ./docker/php dockerfile: Dockerfile command: php artisan schedule:work volumes: - ./:/var/www/html - ./docker/php/php.ini:/usr/local/etc/php/conf.d/custom.ini environment: - DB_CONNECTION=pgsql - DB_HOST=postgres - DB_PORT=5432 - DB_DATABASE=${DB_DATABASE:-wagw_saas} - DB_USERNAME=${DB_USERNAME:-wagw_user} - DB_PASSWORD=${DB_PASSWORD:-wagw_secret} - REDIS_HOST=redis - REDIS_PORT=6379 - QUEUE_CONNECTION=redis depends_on: - app - postgres - redis networks: - wagw-network restart: unless-stopped minio: container_name: wagw-minio image: minio/minio:latest ports: - "9000:9000" - "9001:9001" environment: - MINIO_ROOT_USER=${MINIO_ROOT_USER:-minioadmin} - MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minioadmin} volumes: - minio-data:/data command: server /data --console-address ":9001" networks: - wagw-network restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 gowa: container_name: wagw-gowa build: context: ./gowa-src dockerfile: Dockerfile ports: - "3000:3000" environment: - WEBHOOK_URL=${GOWA_WEBHOOK_URL:-http://app/api/webhooks/gowa} - WEBHOOK_SECRET=${GOWA_WEBHOOK_SECRET:-} volumes: - gowa-storages:/app/storages - gowa-statics:/app/statics networks: - wagw-network restart: unless-stopped networks: wagw-network: driver: bridge volumes: postgres-data: redis-data: minio-data: gowa-storages: gowa-statics: