services: app: image: ${LARASEND_IMAGE:-ghcr.io/savvyagents/larasend:latest} env_file: .env depends_on: postgres: condition: service_healthy redis: condition: service_started ports: - "${LARASEND_HTTP_PORT:-8080}:8080" volumes: - larasend-storage:/var/www/html/storage healthcheck: test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1:8080/up"] interval: 5s timeout: 3s retries: 20 start_period: 15s restart: unless-stopped queue: image: ${LARASEND_IMAGE:-ghcr.io/savvyagents/larasend:latest} command: php artisan queue:work --queue=default,webhooks --tries=3 --timeout=150 env_file: .env environment: LARASEND_RUN_MIGRATIONS: "false" depends_on: app: condition: service_healthy redis: condition: service_healthy volumes: - larasend-storage:/var/www/html/storage restart: unless-stopped scheduler: image: ${LARASEND_IMAGE:-ghcr.io/savvyagents/larasend:latest} command: php artisan schedule:work env_file: .env environment: LARASEND_RUN_MIGRATIONS: "false" depends_on: app: condition: service_healthy redis: condition: service_healthy volumes: - larasend-storage:/var/www/html/storage restart: unless-stopped postgres: image: postgres:17-alpine environment: POSTGRES_DB: ${DB_DATABASE:-larasend} POSTGRES_USER: ${DB_USERNAME:-larasend} POSTGRES_PASSWORD: ${DB_PASSWORD:?Set DB_PASSWORD in .env} healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME:-larasend} -d ${DB_DATABASE:-larasend}"] interval: 2s timeout: 5s retries: 20 volumes: - larasend-postgres:/var/lib/postgresql/data redis: image: redis:7-alpine healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 2s timeout: 3s retries: 20 volumes: larasend-postgres: larasend-storage: