version: '3.8'
services:
  coolify:
    image: "ghcr.io/coollabsio/coolify:${LATEST_IMAGE:-4.0.0-nightly.0}"
    volumes:
      - type: bind
        source: /data/coolify/source/.env
        target: /var/www/html/.env
        read_only: true
      - /data/coolify/ssh:/var/www/html/storage/app/ssh
      - /data/coolify/deployments:/var/www/html/storage/app/deployments
    environment:
      - APP_ID
      - APP_ENV=production
      - APP_DEBUG
      - APP_NAME
      - APP_KEY
      - APP_URL
      - DB_CONNECTION
      - DB_HOST
      - DB_PORT
      - DB_DATABASE
      - DB_USERNAME
      - DB_PASSWORD
      - QUEUE_CONNECTION
      - REDIS_HOST
      - REDIS_PASSWORD
      - SSL_MODE=off
      - PHP_PM_CONTROL=dynamic
      - PHP_PM_START_SERVERS=1
      - PHP_PM_MIN_SPARE_SERVERS=1
      - PHP_PM_MAX_SPARE_SERVERS=10
      - SELF_HOSTED
      - LEMON_SQUEEZY_WEBHOOK_SECRET
      - LEMON_SQUEEZY_CHECKOUT_ID
      - LEMON_SQUEEZY_PRODUCT_ID
    ports:
      - "${APP_PORT:-8000}:80"
    expose:
      - "${APP_PORT:-8000}"
    healthcheck:
      test: curl --fail http://localhost:80/api/health || exit 1
      interval: 4s
      retries: 5
      timeout: 2s
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
  postgres:
    volumes:
      - coolify-db:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: "${DB_USERNAME:-coolify}"
      POSTGRES_PASSWORD: "${DB_PASSWORD}"
      POSTGRES_DB: "${DB_DATABASE:-coolify}"
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "pg_isready -U ${DB_USERNAME:-coolify}",
          "-d",
          "${DB_DATABASE:-coolify}"
        ]
      interval: 2s
      retries: 5
      timeout: 2s
  redis:
    command: redis-server --save 20 1 --loglevel warning --requirepass ${REDIS_PASSWORD}
    environment:
      REDIS_PASSWORD: "${REDIS_PASSWORD}"
    volumes:
      - coolify-redis:/data
    healthcheck:
      test: redis-cli ping
      interval: 2s
      retries: 5
      timeout: 2s
volumes:
  coolify-db:
    name: coolify-db
  coolify-redis:
    name: coolify-redis
