services: artwork: image: artwork-app:latest build: context: . dockerfile: ./dockerfiles/release.Dockerfile depends_on: - db ports: - '${APP_PORT:-80}:80' env_file: - .env environment: RUN_INIT: 1 extra_hosts: - "host.docker.internal:host-gateway" volumes: - './:/var/www/html' artwork_worker: image: artwork-app:latest container_name: artwork_worker restart: unless-stopped depends_on: - artwork env_file: - .env environment: - APP_ENV=develop command: php artisan queue:work --queue=default,webhooks,workflows --sleep=3 --tries=3 --max-time=3600 volumes: - ./.env:/var/www/html/.env:ro - ./storage:/var/www/html/storage artwork_reverb: image: artwork-app:latest container_name: artwork_reverb restart: unless-stopped depends_on: - artwork ports: - "127.0.0.1:8080:8080" env_file: - .env environment: - APP_ENV=develop command: php artisan reverb:start --host=0.0.0.0 --port=8080 volumes: - ./.env:/var/www/html/.env:ro db: image: 'mariadb:10.11' # DB-Port nur an die Loopback-Adresse des Hosts binden (DB_BIND_HOST, Default 127.0.0.1). # Die App-Container erreichen die DB über das Compose-Netzwerk, ein Host-Port ist nur für # lokale Werkzeuge nötig. Für Remote-Zugriff DB_BIND_HOST bewusst setzen (z. B. VPN-IP). ports: - '${DB_BIND_HOST:-127.0.0.1}:${FORWARD_DB_PORT:-3306}:3306' environment: # Root-Login nur lokal im DB-Container (kein Remote-Root über '%'); die App nutzt DB_USERNAME. MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' volumes: - 'artwork-db-maria:/var/lib/mysql' meilisearch: image: 'getmeili/meilisearch:v1.20.0' environment: MEILI_MASTER_KEY: ${MEILISEARCH_KEY} MEILI_ENV: development # Meilisearch-Port ebenfalls nur an DB_BIND_HOST (Default 127.0.0.1) binden. ports: - '${DB_BIND_HOST:-127.0.0.1}:${FORWARD_MEILISEARCH_PORT:-7700}:7700' volumes: - 'artwork-meilisearch:/data' redis: image: 'redis:alpine' environment: - REDIS_PASSWORD=${REDIS_PASSWORD} volumes: - 'artwork-redis:/data' volumes: artwork-db-maria: driver: local artwork-meilisearch: driver: local artwork-redis: driver: local artwork-files: driver: local