services: app: build: context: . dockerfile: docker/Dockerfile container_name: laravel_frankenphp restart: unless-stopped working_dir: /var/www user: "${UID:-1000}:${GID:-1000}" volumes: - ./laravel:/var/www - ./docker/Caddyfile:/etc/frankenphp/Caddyfile - caddy_data:/data ports: - "8080:80" - "8443:443" environment: USER_ID: "${UID:-1000}" GROUP_ID: "${GID:-1000}" APP_ENV: local APP_DEBUG: true APP_URL: http://localhost DB_CONNECTION: pgsql DB_HOST: postgres DB_PORT: 5432 DB_DATABASE: laravel DB_USERNAME: laravel DB_PASSWORD: secret depends_on: postgres: condition: service_healthy networks: - laravel_network postgres: image: postgres:16-alpine container_name: laravel_postgres restart: unless-stopped ports: - "5432:5432" environment: POSTGRES_DB: laravel POSTGRES_USER: laravel POSTGRES_PASSWORD: secret POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C" volumes: - postgres_data:/var/lib/postgresql/data networks: - laravel_network healthcheck: test: [ "CMD-SHELL", "pg_isready -U laravel -d laravel" ] interval: 10s timeout: 5s retries: 5 start_period: 30s pgadmin: image: dpage/pgadmin4:latest container_name: laravel_pgadmin restart: unless-stopped ports: - "8081:80" environment: PGADMIN_DEFAULT_EMAIL: admin@admin.com PGADMIN_DEFAULT_PASSWORD: admin volumes: - pgadmin_data:/var/lib/pgadmin depends_on: - postgres networks: - laravel_network queue: build: context: . dockerfile: docker/Dockerfile container_name: laravel_queue working_dir: /var/www command: php artisan queue:work --verbose --tries=3 volumes: - ./laravel:/var/www depends_on: - postgres networks: - laravel_network schedule: build: context: . dockerfile: docker/Dockerfile container_name: laravel_schedule working_dir: /var/www user: "${UID:-1000}:${GID:-1000}" command: php artisan schedule:work volumes: - ./laravel:/var/www depends_on: - app networks: - laravel_network networks: laravel_network: driver: bridge volumes: caddy_data: postgres_data: pgadmin_data: