services: pgsql: image: postgres:18-alpine3.21 restart: unless-stopped environment: POSTGRES_DB: ${DB_DATABASE:-app} POSTGRES_USER: ${DB_USERNAME:-laravel} POSTGRES_PASSWORD: ${DB_PASSWORD:-password} volumes: - pgsql-data:/var/lib/postgresql/data:rw ports: - 5432:5432 healthcheck: test: pg_isready -d ${DB_DATABASE:-app} -U ${DB_USERNAME:-laravel} interval: 2s timeout: 5s start_period: 2s redis: image: redis:8-alpine3.21 restart: unless-stopped command: > --requirepass ${REDIS_PASSWORD} volumes: - redis-data:/data:rw healthcheck: test: [ 'CMD', 'redis-cli', 'ping' ] interval: 500ms timeout: 1s mailpit: image: axllent/mailpit:v1.27 restart: unless-stopped volumes: - mailpit-data:/data minio: image: minio/minio:latest restart: unless-stopped command: 'minio server /data --console-address ":8900"' environment: MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID} MINIO_ROOT_PASSWORD: ${AWS_SECRET_ACCESS_KEY} volumes: - minio-data:/data healthcheck: test: [ "CMD", "curl", "-f", "http://localhost:8900/minio/health/live" ] interval: 5s retries: 5 minio-init: image: minio/mc entrypoint: > /bin/sh -c "sleep 5 && mc alias set local http://minio:${FORWARD_MINIO_PORT:-9000} ${AWS_ACCESS_KEY_ID} ${AWS_SECRET_ACCESS_KEY} && mc mb ${AWS_DEFAULT_REGION}/${AWS_BUCKET}" depends_on: - minio volumes: redis-data: { } minio-data: { } pgsql-data: { } mailpit-data: { }