version: '3' services: app: build: context: . dockerfile: Dockerfile container_name: tastyigniter-app restart: unless-stopped environment: - APP_NAME=TastyIgniter - APP_ENV=production - APP_KEY= - APP_DEBUG=false - APP_URL=http://localhost # Database configuration - DB_CONNECTION=mysql - DB_HOST=db - DB_PORT=3306 - DB_DATABASE=tastyigniter - DB_USERNAME=tastyigniter - DB_PASSWORD=secret_password # Admin account - ADMIN_USER=admin - ADMIN_EMAIL=admin@example.com - ADMIN_PASSWORD=admin123 # Scheduler and Queue - QUEUE_CONNECTION=database volumes: - ./:/var/www/html - ./storage:/var/www/html/storage depends_on: - db networks: - tastyigniter-network nginx: image: nginx:alpine container_name: tastyigniter-nginx restart: unless-stopped ports: - "80:80" volumes: - ./:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - app networks: - tastyigniter-network db: image: mysql:8 container_name: tastyigniter-db restart: unless-stopped environment: - MYSQL_DATABASE=tastyigniter - MYSQL_USER=tastyigniter - MYSQL_PASSWORD=secret_password - MYSQL_ROOT_PASSWORD=root_password volumes: - dbdata:/var/lib/mysql networks: - tastyigniter-network cron: build: context: . dockerfile: Dockerfile container_name: tastyigniter-cron restart: unless-stopped command: bash -c "while true; do php /var/www/html/artisan schedule:run --verbose --no-interaction; sleep 60; done" volumes: - ./:/var/www/html depends_on: - app networks: - tastyigniter-network queue: build: context: . dockerfile: Dockerfile container_name: tastyigniter-queue restart: unless-stopped command: php /var/www/html/artisan queue:work volumes: - ./:/var/www/html depends_on: - app networks: - tastyigniter-network volumes: dbdata: networks: tastyigniter-network: driver: bridge