services: app: build: context: . dockerfile: Dockerfile target: production container_name: cachet-app restart: unless-stopped ports: - "${APP_PORT:-8000}:8000" environment: - APP_NAME=${APP_NAME:-Cachet} - APP_ENV=${APP_ENV:-production} - APP_KEY=${APP_KEY} - APP_DEBUG=${APP_DEBUG:-false} - APP_TIMEZONE=${APP_TIMEZONE:-UTC} - APP_URL=${APP_URL:-http://localhost:8000} - APP_LOCALE=${APP_LOCALE:-en} - LOG_CHANNEL=${LOG_CHANNEL:-stack} - LOG_LEVEL=${LOG_LEVEL:-warning} - DB_CONNECTION=${DB_CONNECTION:-pgsql} - DB_HOST=${DB_HOST:-database} - DB_PORT=${DB_PORT:-5432} - DB_DATABASE=${DB_DATABASE:-cachet} - DB_USERNAME=${DB_USERNAME:-cachet} - DB_PASSWORD=${DB_PASSWORD:-secret} - SESSION_DRIVER=${SESSION_DRIVER:-database} - QUEUE_CONNECTION=${QUEUE_CONNECTION:-database} - CACHE_STORE=${CACHE_STORE:-redis} - REDIS_HOST=${REDIS_HOST:-redis} - REDIS_PORT=${REDIS_PORT:-6379} - REDIS_PASSWORD=${REDIS_PASSWORD:-null} - MAIL_MAILER=${MAIL_MAILER:-log} - MAIL_HOST=${MAIL_HOST:-mailpit} - MAIL_PORT=${MAIL_PORT:-1025} - MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS:-hello@example.com} - MAIL_FROM_NAME=${MAIL_FROM_NAME:-Cachet} - CACHET_BEACON=${CACHET_BEACON:-false} - CACHET_DOCKER=true volumes: - cachet-storage:/var/www/html/storage/app - cachet-logs:/var/www/html/storage/logs depends_on: database: condition: service_healthy redis: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: - cachet database: image: postgres:16-alpine container_name: cachet-db restart: unless-stopped environment: - POSTGRES_DB=${DB_DATABASE:-cachet} - POSTGRES_USER=${DB_USERNAME:-cachet} - POSTGRES_PASSWORD=${DB_PASSWORD:-secret} volumes: - cachet-db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME:-cachet} -d ${DB_DATABASE:-cachet}"] interval: 10s timeout: 5s retries: 5 networks: - cachet redis: image: redis:7-alpine container_name: cachet-redis restart: unless-stopped command: redis-server --appendonly yes volumes: - cachet-redis:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 networks: - cachet volumes: cachet-storage: cachet-logs: cachet-db: cachet-redis: networks: cachet: driver: bridge