# documentation: https://paymenter.org/docs/guides/docker
# slogan: Open-Source Billing, Built for Hosting
# category: cms
# tags: automation, billing, open source
# logo: svgs/paymenter.svg
# port: 80

services:
  paymenter:
    image: ghcr.io/paymenter/paymenter:latest
    volumes:
      - app_logs:/app/storage/logs
      - app_public:/app/storage/public
    environment:
      SERVICE_URL_PAYMENTER: ${SERVICE_URL_PAYMENTER_80}
      DB_DATABASE: ${MYSQL_DATABASE:-paymenter-db}
      DB_PASSWORD: ${SERVICE_PASSWORD_MYSQL}
      DB_USERNAME: ${SERVICE_USER_MYSQL}
      APP_ENV: production
      CACHE_STORE: redis
      SESSION_DRIVER: redis
      QUEUE_CONNECTION: redis
      REDIS_HOST: redis
      REDIS_USERNAME: default
      REDIS_PASSWORD: ${SERVICE_PASSWORD_64_REDIS}
      DB_CONNECTION: mariadb
      DB_HOST: mariadb
      DB_PORT: 3306
      APP_KEY: ${SERVICE_BASE64_KEY}
    depends_on:
      mariadb:
        condition: service_healthy
      redis:
        condition: service_started
    healthcheck:
      test: ["CMD-SHELL", "curl -sf http://localhost:80 || exit 1"]
      interval: 10s
      timeout: 1s
      retries: 3

  mariadb:
    image: mariadb:11
    volumes:
      - paymenter_mariadb_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
      - MYSQL_DATABASE=${MYSQL_DATABASE:-paymenter-db}
      - MYSQL_USER=${SERVICE_USER_MYSQL}
      - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 5s
      timeout: 20s
      retries: 10

  redis:
    image: redis:alpine
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping || exit 1"]
      interval: 10s
      timeout: 1s
      retries: 3
