# ignore: true
# documentation: https://invoiceninja.github.io/selfhost.html
# slogan: The leading open-source invoicing platform
# tags: invoicing, billing, accounting, finance, self-hosted

services:
  invoice-ninja:
    image: invoiceninja/invoiceninja:5
    environment:
      - SERVICE_FQDN_INVOICENINJA
      - APP_ENV=production
      - APP_URL=${SERVICE_FQDN_INVOICENINJA}
      - APP_KEY=${SERVICE_BASE64_INVOICENINJA}
      - APP_DEBUG=false
      - REQUIRE_HTTPS=false
      - PHANTOMJS_PDF_GENERATION=false
      - PDF_GENERATOR=snappdf
      - TRUSTED_PROXIES=*
      - QUEUE_CONNECTION=database
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_DATABASE=${MYSQL_DATABASE:-invoice_ninja}
      - DB_USERNAME=${SERVICE_USER_MYSQL}
      - DB_PASSWORD=${SERVICE_PASSWORD_MYSQL}
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:9000']
      interval: 5s
      timeout: 20s
      retries: 10
    volumes:
      - invoice-ninja-public:/var/www/app/public
      - invoice-ninja-storage:/var/www/app/storage
      - type: bind
        source: ./php.ini
        target: /usr/local/etc/php/php.ini
        content: |
          session.auto_start = Off
          short_open_tag = Off

          error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED

          ; opcache.enable=1
          ; opcache.preload=/srv/www/invoiceninja/current/preload.php
          ; opcache.preload_user=www-data

          ; ; The OPcache shared memory storage size.
          ; opcache.max_accelerated_files=300000
          ; opcache.validate_timestamps=1
          ; opcache.revalidate_freq=30
          ; opcache.jit_buffer_size=256M
          ; opcache.jit=1205
          ; opcache.memory_consumption=1024M


          post_max_size = 60M
          upload_max_filesize = 50M
          memory_limit=512M
      - type: bind
        source: ./php-cli.ini
        target: /usr/local/etc/php/php-cli.ini
        content: |
          session.auto_start = Off
          short_open_tag = Off

          error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED

          ; opcache.enable_cli=1
          ; opcache.fast_shutdown=1
          ; opcache.memory_consumption=256
          ; opcache.interned_strings_buffer=8
          ; opcache.max_accelerated_files=4000
          ; opcache.revalidate_freq=60
          ; # http://symfony.com/doc/current/performance.html
          ; realpath_cache_size = 4096K
          ; realpath_cache_ttl = 600

          memory_limit = 2G
          post_max_size = 60M
          upload_max_filesize = 50M
    depends_on:
      mysql:
        condition: service_healthy
  mysql:
    image: mariadb:lts
    environment:
      - MYSQL_USER=${SERVICE_USER_MYSQL}
      - MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}
      - MYSQL_DATABASE=${MYSQL_DATABASE:-invoice_ninja}
      - MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}
    healthcheck:
      test:
        [
          "CMD",
          "mysqladmin",
          "ping",
          "-h",
          "localhost",
          "-uroot",
          "-p${SERVICE_PASSWORD_MYSQLROOT}",
        ]
      interval: 5s
      timeout: 20s
      retries: 10
    volumes:
      - invoice-ninja-mysql-data:/var/lib/mysql
