version: '3.8' services: coolify: image: "ghcr.io/coollabsio/coolify:${LATEST_IMAGE:latest}" 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/applications:/var/www/html/storage/app/applications - /data/coolify/databases:/var/www/html/storage/app/databases - /data/coolify/services:/var/www/html/storage/app/services - /data/coolify/backups:/var/www/html/storage/app/backups 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 - HORIZON_MAX_PROCESSES - HORIZON_BALANCE_MAX_SHIFT - HORIZON_BALANCE_COOLDOWN - SSL_MODE=off - PHP_PM_CONTROL=dynamic - PHP_PM_START_SERVERS=1 - PHP_PM_MIN_SPARE_SERVERS=1 - PHP_PM_MAX_SPARE_SERVERS=10 - PUSHER_HOST - PUSHER_BACKEND_HOST - PUSHER_PORT - PUSHER_BACKEND_PORT - PUSHER_SCHEME - PUSHER_APP_ID - PUSHER_APP_KEY - PUSHER_APP_SECRET - AUTOUPDATE - SELF_HOSTED - WAITLIST - SUBSCRIPTION_PROVIDER - STRIPE_API_KEY - STRIPE_WEBHOOK_SECRET - STRIPE_PRICE_ID_BASIC_MONTHLY - STRIPE_PRICE_ID_BASIC_YEARLY - STRIPE_PRICE_ID_PRO_MONTHLY - STRIPE_PRICE_ID_PRO_YEARLY - STRIPE_PRICE_ID_ULTIMATE_MONTHLY - STRIPE_PRICE_ID_ULTIMATE_YEARLY - STRIPE_EXCLUDED_PLANS - PADDLE_VENDOR_ID - PADDLE_WEBHOOK_SECRET - PADDLE_VENDOR_AUTH_CODE - PADDLE_PUBLIC_KEY - PADDLE_PRICE_ID_BASIC_MONTHLY - PADDLE_PRICE_ID_BASIC_YEARLY - PADDLE_PRICE_ID_PRO_MONTHLY - PADDLE_PRICE_ID_PRO_YEARLY - PADDLE_PRICE_ID_ULTIMATE_MONTHLY - PADDLE_PRICE_ID_ULTIMATE_YEARLY - LEMON_SQUEEZY_API_KEY - LEMON_SQUEEZY_WEBHOOK_SECRET - LEMON_SQUEEZY_CHECKOUT_ID_BASIC_MONTHLY - LEMON_SQUEEZY_CHECKOUT_ID_BASIC_YEARLY - LEMON_SQUEEZY_CHECKOUT_ID_PRO_MONTHLY - LEMON_SQUEEZY_CHECKOUT_ID_PRO_YEARLY - LEMON_SQUEEZY_CHECKOUT_ID_ULTIMATE_MONTHLY - LEMON_SQUEEZY_CHECKOUT_ID_ULTIMATE_YEARLY - LEMON_SQUEEZY_BASIC_PLAN_IDS - LEMON_SQUEEZY_PRO_PLAN_IDS - LEMON_SQUEEZY_ULTIMATE_PLAN_IDS ports: - "${APP_PORT:-8000}:80" expose: - "${APP_PORT:-8000}" healthcheck: test: curl --fail http://localhost:80/api/health || exit 1 interval: 5s retries: 10 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: 5s retries: 10 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: 5s retries: 10 timeout: 2s soketi: ports: - "${SOKETI_PORT:-6001}:6001" environment: SOKETI_DEBUG: "${SOKETI_DEBUG:-false}" SOKETI_DEFAULT_APP_ID: "${PUSHER_APP_ID}" SOKETI_DEFAULT_APP_KEY: "${PUSHER_APP_KEY}" SOKETI_DEFAULT_APP_SECRET: "${PUSHER_APP_SECRET}" healthcheck: test: wget -qO- http://localhost:6001/ready || exit 1 interval: 5s retries: 10 timeout: 2s volumes: coolify-db: name: coolify-db coolify-redis: name: coolify-redis