# xCloud-ready Laravel + MySQL + Redis + Queue Worker # Replace OWNER/REPO with your GitHub username/repo services: app: image: ghcr.io/OWNER/REPO:latest expose: - "9000" environment: APP_ENV: production APP_KEY: ${APP_KEY} APP_URL: ${APP_URL} DB_CONNECTION: mysql DB_HOST: db DB_PORT: 3306 DB_DATABASE: ${DB_DATABASE} DB_USERNAME: ${DB_USERNAME} DB_PASSWORD: ${DB_PASSWORD} REDIS_HOST: redis REDIS_PORT: 6379 CACHE_DRIVER: redis SESSION_DRIVER: redis QUEUE_CONNECTION: redis depends_on: db: condition: service_healthy redis: condition: service_healthy networks: - app-network nginx: image: nginx:alpine ports: - "8080:80" configs: - source: nginx_config target: /etc/nginx/conf.d/default.conf depends_on: - app networks: - app-network db: image: mysql:8.0 expose: - "3306" environment: MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD} MYSQL_DATABASE: ${DB_DATABASE} MYSQL_USER: ${DB_USERNAME} MYSQL_PASSWORD: ${DB_PASSWORD} volumes: - db-data:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 networks: - app-network redis: image: redis:7-alpine expose: - "6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - app-network queue: image: ghcr.io/OWNER/REPO:latest command: php artisan queue:work --sleep=3 --tries=3 --max-time=3600 environment: APP_ENV: production APP_KEY: ${APP_KEY} DB_CONNECTION: mysql DB_HOST: db DB_DATABASE: ${DB_DATABASE} DB_USERNAME: ${DB_USERNAME} DB_PASSWORD: ${DB_PASSWORD} REDIS_HOST: redis QUEUE_CONNECTION: redis depends_on: - db - redis restart: unless-stopped networks: - app-network configs: nginx_config: content: | upstream php-fpm { server app:9000; } server { listen 80; root /var/www/html/public; index index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass php-fpm; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } volumes: db-data: networks: app-network: driver: bridge