Skip to content
Snippets Groups Projects
docker-compose.yml.twig 24.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
    name: {{ projectname }}
    {% endif %}
    
    
    jurgenhaas's avatar
    jurgenhaas committed
    
    services:
      mariadb:
    
        image: '{{ docker_image_prefix }}{% if dbserver.type == "mariadb" %}wodby/mariadb:{{ dbserver.version }}{% elseif dbserver.type == "mysql" %}mysql/mysql-server:{{ dbserver.version }}{% endif %}'
    
    jurgenhaas's avatar
    jurgenhaas committed
    
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
        restart: unless-stopped
    {% endif %}
    
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: drupal
          MYSQL_USER: drupal
          MYSQL_PASSWORD: drupal
          MYSQL_LOG_CONSOLE: 0
    
        volumes:
    
    jurgenhaas's avatar
    jurgenhaas committed
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - {{ projectrootdb }}:/var/lib/mysql
    {% endif %}
    
    {% if not drupal.live|default(0) %}
    
        image: '{{ docker_image_prefix }}{% if dbserver.type == "mariadb" %}wodby/mariadb:{{ dbserver.version }}{% elseif dbserver.type == "mysql" %}mysql/mysql-server:{{ dbserver.version }}{% endif %}'
    
    jurgenhaas's avatar
    jurgenhaas committed
    
    
    jurgenhaas's avatar
    jurgenhaas committed
        environment:
          MYSQL_ROOT_PASSWORD: password
          MYSQL_DATABASE: drupal
          MYSQL_USER: drupal
          MYSQL_PASSWORD: drupal
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    
      php:
    
        image: '{{ docker_image_prefix }}wodby/drupal-php:{{ php.version }}{% if wkhtmltox.enable %}-dev{% endif %}'
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
        restart: unless-stopped
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
        environment:
    
    {% if mailpit.enable %}
          PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S mailpit:1025
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
          DB_HOST: mariadb
          DB_USER: drupal
          DB_PASSWORD: drupal
          DB_NAME: drupal
          DB_DRIVER: mysql
    
          COMPOSER_ALLOW_SUPERUSER: 1
    
    {% if php.xdebug and not drupal.live|default(0) %}
    
    jurgenhaas's avatar
    jurgenhaas committed
          PHP_XDEBUG: 1
    
          PHP_XDEBUG_MAX_NESTING_LEVEL: 512
    
          PHP_XDEBUG_MODE: {% if php.coverage %}coverage{% elseif php.profiler %}profile{% else %}debug{% endif %}
    
          PHP_XDEBUG_REMOTE_HOST: {{ docker0.ip }}
    
          PHP_XDEBUG_CLIENT_HOST: {{ docker0.ip }}
          PHP_XDEBUG_LOG: /dev/null
    
          PHP_XDEBUG_START_WITH_REQUEST: 1
    
          PHP_IDE_CONFIG: serverName=Docker
    
          PHP_EXTENSIONS_DISABLE: xhprof
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
    {% if blackfire.enable and not drupal.live|default(0) %}
    
    jurgenhaas's avatar
    jurgenhaas committed
          PHP_BLACKFIRE: 1
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
    {% if php.ssh and not drupal.live|default(0) %}
    
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
        volumes:
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - {{ projectroot }}:/var/www/html
    
          - {{ projectroot }}/drush:/etc/drush
    
    {% if drupal.live|default(0) %}
    
    jurgenhaas's avatar
    jurgenhaas committed
          - {{ projectrootfiles }}:/data/default
    
          - {{ projectrootfiles }}/db:/var/backups/mysql
    {% endif %}
    
    {% if php.ssh and not drupal.live|default(0) %}
    
          - {{ php.ssh_auth_sock }}:/ssh-agent
    
    {% endif %}
    
    {% if (php.xdebug or webgrind.enable) and not drupal.live|default(0) %}
          - {{ projectroot }}/files/debug:/mnt/files
    
    {% endif %}
    {% if wkhtmltox.enable %}
    
          - {{ projectroot }}/.docker-init/wkhtmltox.sh:/docker-entrypoint-init.d/50-wkhtmltox.sh
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
        extra_hosts:
    
          - '{{ projectdomain }}:{{ docker0.ip }}'
    
    {% for subdomain in relatedprojectdomains %}
          - '{{ subdomain }}:{{ docker0.ip }}'
    {% endfor %}
    
    {% if crontabs.enable|default(0) %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    
      cron:
    
        image: '{{ docker_image_prefix }}mcuadros/ofelia:latest'
    
    jurgenhaas's avatar
    jurgenhaas committed
        restart: unless-stopped
        volumes:
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - /var/run/docker.sock:/var/run/docker.sock:ro
    
          - {{ projectroot }}/crontabs/jobs.ini:/etc/ofelia/config.ini
    
    jurgenhaas's avatar
    jurgenhaas committed
    
    
      {{ webserver.type }}:
    
        image: '{{ docker_image_prefix }}{% if webserver.type == "nginx" %}wodby/nginx:{{ webserver.version|default("1.23") }}{% elseif webserver.type == "apache" %}wodby/apache:2.4{% endif %}'
    
    jurgenhaas's avatar
    jurgenhaas committed
    
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
        restart: unless-stopped
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
        depends_on:
          - php
        environment:
    
    {% if webserver.type == 'nginx' %}
    
    {% if live is defined and live.uri is defined %}
          NGINX_DRUPAL_FILE_PROXY_URL: '{{ live.uri }}'
    {% endif %}
    
          NGINX_ERROR_LOG_LEVEL: debug
    
          NGINX_VHOST_PRESET: '{{ webserver.preset|default("drupal10") }}'
    
    {% elseif webserver.type == 'apache' %}
    
          APACHE_VHOST_PRESET: php
    
          APACHE_LOG_LEVEL: debug
    
    {% if webserver.overwriteconfig %}
          APACHE_INCLUDE_CONF: /var/www/html/apache/vhost.conf
    {% endif %}
    
    {% endif %}
    
          {{ webserver.type|upper }}_BACKEND_HOST: php
    
          {{ webserver.type|upper }}_SERVER_ROOT: /var/www/html/{{ webRoot }}/
    
    jurgenhaas's avatar
    jurgenhaas committed
        volumes:
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - {{ projectroot }}:/var/www/html
    
    {% if drupal.live|default(0) %}
    
    jurgenhaas's avatar
    jurgenhaas committed
          - {{ projectrootfiles }}:/data/default
    
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
        labels:
    
          traefik.enable: 'true'
    
          traefik.http.routers.{{ webserver.type }}-{{ projectname }}.middlewares: {{ webserver.type }}-{{ projectname }}-middleware
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-middleware.chain.middlewares: {{ webserver.type }}-{{ projectname }}-headers@docker{% if basicauth.enable %},{{ webserver.type }}-{{ projectname }}-auth@docker{% endif %}{% for domain in extradomains %},{{ webserver.type }}-{{ projectname }}-redirectregex{{ loop.index }}@docker{% endfor %}
    
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.server: '{{ webserver.responseheader.server }}'
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.strict-transport-security: '{{ webserver.responseheader.strict_transport_security }}'
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.referrer-policy: '{{ webserver.responseheader.referrer_policy }}'
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.permissions-policy: '{{ webserver.responseheader.permissions_policy }}'
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.cross-origin-embedder-policy: '{{ webserver.responseheader.cross_origin_embedder_policy }}'
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.cross-origin-opener-policy: '{{ webserver.responseheader.cross_origin_opener_policy }}'
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.cross-origin-resource-policy: '{{ webserver.responseheader.cross_origin_resource_policy }}'
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-headers.headers.customresponseheaders.x-permitted-cross-domain-policies: '{{ webserver.responseheader.x_permitted_cross_domain_policies }}'
    
    {% if basicauth.enable %}
    
    jurgenhaas's avatar
    jurgenhaas committed
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-auth.basicauth.users: {{ basicauth.code }}
    {% endif %}
    
          traefik.http.routers.{{ webserver.type }}-{{ projectname }}.rule: Host(`{{ projectdomain }}`){% for domain in extradomains|default([]) %} || Host(`{{ domain }}`){% endfor %}
    
    {% if drupal.live|default(0) or traefik.usessl %}
    
    jurgenhaas's avatar
    jurgenhaas committed
          traefik.http.routers.{{ webserver.type }}-{{ projectname }}.tls: 'true'
          traefik.http.routers.{{ webserver.type }}-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    
    {% for domain in extradomains|default([]) %}
    
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-redirectregex{{ loop.index }}.redirectRegex.regex: "^https://{{ domain }}/(.*)"
          traefik.http.middlewares.{{ webserver.type }}-{{ projectname }}-redirectregex{{ loop.index }}.redirectRegex.replacement: "https://{{ projectdomain }}/$${1}"
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if varnish.enable %}
    
    jurgenhaas's avatar
    jurgenhaas committed
      varnish:
    
        image: '{{ docker_image_prefix }}wodby/varnish:6.0'
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
        restart: unless-stopped
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
        depends_on:
    
          - {{ webserver.type }}
    
    jurgenhaas's avatar
    jurgenhaas committed
        environment:
          VARNISH_SECRET: secret
    
          VARNISH_BACKEND_HOST: {{ webserver.type }}
    
    jurgenhaas's avatar
    jurgenhaas committed
          VARNISH_BACKEND_PORT: 80
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
    jurgenhaas's avatar
    jurgenhaas committed
        labels:
    
          traefik.enable: 'true'
    
          traefik.http.routers.varnish-{{ projectname }}.rule: Host(`varnish-{{ projectdomain }}`)
    
    {% if drupal.live|default(0) or traefik.usessl %}
          traefik.http.routers.varnish-{{ projectname }}.tls: 'true'
          traefik.http.routers.varnish-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
    
    jurgenhaas's avatar
    jurgenhaas committed
      redis:
    
        image: '{{ docker_image_prefix }}wodby/redis:{{ redis.version }}'
    
        environment:
          REDIS_MAXMEMORY: '{{ redis.max_memory }}'
    
    jurgenhaas's avatar
    jurgenhaas committed
        volumes:
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    {% if drupal.live|default(0) %}
    
    jurgenhaas's avatar
    jurgenhaas committed
          - {{ projectrootredis }}:/data
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
    {% if not drupal.live|default(0) %}
    
    {% if dbbrowser.type == 'adminer' %}
    
        image: '{{ docker_image_prefix }}wodby/adminer:{{ dbbrowser.version|default("4.6") }}'
    
        environment:
          ADMINER_SALT: adminer-salt
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          traefik.enable: 'true'
    
          traefik.http.services.{{ projectname }}_adminer.loadbalancer.server.port: 9000
    
          traefik.http.routers.adminer-{{ projectname }}.rule: Host(`adminer-{{ projectdomain }}`)
    
    {% if drupal.live|default(0) or traefik.usessl %}
          traefik.http.routers.adminer-{{ projectname }}.tls: 'true'
          traefik.http.routers.adminer-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    
    {% elseif dbbrowser.type == 'pma' %}
    
    jurgenhaas's avatar
    jurgenhaas committed
      pma:
    
        image: '{{ docker_image_prefix }}phpmyadmin/phpmyadmin:latest'
    
        networks:
          - traefik-public
          - default
        depends_on:
          - mariadb
    
    jurgenhaas's avatar
    jurgenhaas committed
        environment:
          PMA_HOST: mariadb
          PMA_USER: drupal
          PMA_PASSWORD: drupal
          PHP_UPLOAD_MAX_FILESIZE: 1G
          PHP_MAX_INPUT_VARS: 1G
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
    jurgenhaas's avatar
    jurgenhaas committed
        labels:
    
          traefik.enable: 'true'
    
          traefik.http.routers.pma-{{ projectname }}.rule: Host(`pma-{{ projectdomain }}`)
    
    {% if drupal.live|default(0) or traefik.usessl %}
          traefik.http.routers.pma-{{ projectname }}.tls: 'true'
          traefik.http.routers.pma-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if solr.enable %}
    
    jurgenhaas's avatar
    jurgenhaas committed
      solr:
    
        image: '{{ docker_image_prefix }}wodby/solr:8-{{ solr.version }}'
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
        restart: unless-stopped
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
        environment:
          SOLR_HEAP: 1024m
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
    jurgenhaas's avatar
    jurgenhaas committed
        labels:
    
          traefik.enable: 'true'
    
          traefik.http.services.{{ projectname }}_solr.loadbalancer.server.port: 8983
    
          traefik.http.routers.solr-{{ projectname }}.rule: Host(`solr-{{ projectdomain }}`)
    
    {% if drupal.live|default(0) or traefik.usessl %}
          traefik.http.routers.solr-{{ projectname }}.tls: 'true'
          traefik.http.routers.solr-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
    
      mailpit:
        image: '{{ docker_image_prefix }}axllent/mailpit'
    
        restart: unless-stopped
    {% endif %}
        networks:
          - traefik-public
          - default
        environment:
    
          MP_SMTP_RELAY_CONFIG: /data/mailpitout.yml
          MP_DATA_FILE: /data/mailpit.db
    
        privileged: true
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - {{ projectrootmailpit }}/mailpitout.yml:/data/mailpitout.yml
          - {{ projectrootmailpit }}:/data
    
        labels:
          traefik.enable: 'true'
          traefik.docker.network: traefik-public
    {% if basicauth.enable %}
          traefik.http.middlewares.mailpit-{{ projectname }}-auth.basicauth.users: {{ basicauth.code }}
          traefik.http.routers.mailpit-{{ projectname }}.middlewares: mailpit-{{ projectname }}-auth@docker
    {% endif %}
          traefik.http.services.{{ projectname }}_mailpit.loadbalancer.server.port: 8025
          traefik.http.routers.mailpit-{{ projectname }}.rule: Host(`mailpit-{{ projectdomain }}`)
    {% if drupal.live|default(0) or traefik.usessl %}
          traefik.http.routers.mailpit-{{ projectname }}.tls: 'true'
          traefik.http.routers.mailpit-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if node.enable %}
    
      nodejs:
    
        image: '{{ docker_image_prefix }}wodby/drupal-node:1.0'
    
        environment:
    
          NODE_SERVICE_KEY: '{{ node.key }}'
    
        labels:
    
          traefik.enable: 'true'
    
          traefik.http.services.{{ projectname }}_nodejs.loadbalancer.server.port: 8080
    
          traefik.http.routers.nodejs-{{ projectname }}.rule: Host(`nodejs-{{ projectdomain }}`)
    
    {% if drupal.live|default(0) or traefik.usessl %}
          traefik.http.routers.nodejs-{{ projectname }}.tls: 'true'
          traefik.http.routers.nodejs-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    
        volumes:
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - {{ projectroot }}/{{ node.path }}:/app
    
        command: sh -c 'npm install && npm run start'
    
    
    jurgenhaas's avatar
    jurgenhaas committed
      node:
    
    jurgenhaas's avatar
    jurgenhaas committed
        working_dir: /app
        labels:
    
          traefik.enable: 'true'
    
          traefik.http.services.{{ projectname }}_node.loadbalancer.server.port: 3000
    
          traefik.http.routers.node-{{ projectname }}.rule: Host(`front-{{ projectdomain }}`)
    
    {% if drupal.live|default(0) or traefik.usessl %}
          traefik.http.routers.node-{{ projectname }}.tls: 'true'
          traefik.http.routers.node-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
        expose:
    
    jurgenhaas's avatar
    jurgenhaas committed
        volumes:
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - {{ projectroot }}/{{ node.path }}:/app
    
    jurgenhaas's avatar
    jurgenhaas committed
        command: sh -c 'npm install && npm run start'
    {% endif %}
    
    {% if memcached.enable %}
    
      memcached:
    
        image: '{{ docker_image_prefix }}wodby/memcached:1.6'
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
        restart: unless-stopped
    {% endif %}
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
    {% endif %}
    {% if rsyslog.enable %}
    
      rsyslog:
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
        restart: unless-stopped
    {% endif %}
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
    {% endif %}
    {% if athenapdf.enable %}
    
      athenapdf:
    
        image: '{{ docker_image_prefix }}arachnysdocker/athenapdf-service'
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
        restart: unless-stopped
    {% endif %}
    
        environment:
          WEAVER_AUTH_KEY: '{{ athenapdf.key }}'
    
          WEAVER_MAX_WORKERS: 10
          WEAVER_MAX_CONVERSION_QUEUE: 50
          WEAVER_WORKER_TIMEOUT: 90
          WEAVER_CONVERSION_FALLBACK: false
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
    {% endif %}
    
    {% if blackfire.enable and not drupal.live|default(0) %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    
      blackfire:
    
        image: '{{ docker_image_prefix }}blackfire/blackfire'
    
    jurgenhaas's avatar
    jurgenhaas committed
        environment:
          BLACKFIRE_SERVER_ID: '{{ blackfire.id }}'
          BLACKFIRE_SERVER_TOKEN: '{{ blackfire.token }}'
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
    {% if webgrind.enable and not drupal.live|default(0) %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    
      webgrind:
        # add XDEBUG_PROFILE=1 to your request to profile that
    
        image: '{{ docker_image_prefix }}wodby/webgrind:1'
    
    jurgenhaas's avatar
    jurgenhaas committed
        environment:
    
          WEBGRIND_PROFILER_DIR: '/mnt/files/xdebug'
    
    jurgenhaas's avatar
    jurgenhaas committed
        labels:
    
          traefik.enable: 'true'
    
          traefik.http.services.{{ projectname }}_webgrind.loadbalancer.server.port: 8080
    
          traefik.http.routers.webgrind-{{ projectname }}.rule: Host(`webgrind-{{ projectdomain }}`)
    
    {% if drupal.live|default(0) or traefik.usessl %}
          traefik.http.routers.webgrind-{{ projectname }}.tls: 'true'
          traefik.http.routers.webgrind-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
        volumes:
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - {{ projectroot }}/files/debug:/mnt/files
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
    {% if tests.behat or (selenium.enable and not drupal.live|default(0)) %}
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - /dev/shm:/dev/shm
        privileged: true
        environment:
    
          SELENIUM_HUB_HOST: 'hub'
          SELENIUM_HUB_PORT: '4444'
          GRID: 'true'
    
          CHROME: '{% if tests.behat %}true{% else %}false{% endif %}'
    
          FIREFOX: 'false'
    
    {% endif %}
    {% if selenium.enable and not drupal.live|default(0) %}
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - /dev/shm:/dev/shm
        privileged: true
        environment:
    
          NOVNC: 'true'
          SELENIUM_HUB_HOST: 'hub'
          SELENIUM_HUB_PORT: '4444'
          SELENIUM_NODE_HOST: '{{ docker0.ip }}'
          SCREEN_WIDTH: '1300'
          SCREEN_HEIGHT: '999'
          VIDEO: 'false'
          GRID: 'false'
          CHROME: 'true'
          FIREFOX: 'false'
    
        #ports:
          # VNC: See what's going on by connecting your VNC client to 0.0.0.0:5900
          #- 5900:25900
          # noVNC: See what's going on by hitting http://0.0.0.0:6080 in your browser
          #        Important: http://127.0.0.1:6081 works but http://localhost:6081 doesn't
          #- 6080:26080
    
    {% endif %}
    {% if elasticsearch.enable %}
    
      elasticsearch:
    
        image: '{{ docker_image_prefix }}wodby/elasticsearch:7'
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if drupal.live|default(0) %}
        restart: unless-stopped
    {% endif %}
    
        environment:
          discovery.type: single-node
    
    jurgenhaas's avatar
    jurgenhaas committed
          ES_BOOTSTRAP_MEMORY_LOCK: false
    
          ES_JAVA_OPTS: '-Xms512m -Xmx512m'
        ports:
          - 9200
          - 9300
    
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
    {% if drupal.live|default(0) %}
    
        image: 'registry.lakedrops.com/docker/alerta-proxy:1.0.2'
    
        restart: unless-stopped
        tty: true
        environment:
          - ALERTA_API_KEY={{ alerta.apikey }}
    {% if alerta.environment is defined %}
          - ALERTA_ENVIRONMENT={{ alerta.environment }}
    {% endif %}
    {% if alerta.project_id is defined %}
          - ALERTA_PROJECT_ID={{ alerta.project_id }}
    {% endif %}
    {% if alerta.proxy_port is defined %}
          - PORT={{ alerta.proxy_port }}
    {% endif %}
    {% endif %}
    
    {% if backup.enable|default(0) %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    
      borgmatic:
    
        image: '{{ docker_image_prefix }}b3vis/borgmatic:{{ backup.version }}'
    
        restart: unless-stopped
    
    jurgenhaas's avatar
    jurgenhaas committed
        volumes:
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
    
          - /usr/local/bin/alertalerta.py:/usr/local/bin/alertalerta.py
    
    jurgenhaas's avatar
    jurgenhaas committed
          - {{ projectrootfiles }}:/mnt/source:ro
          - {{ projectrootbackup }}/files:/mnt/borg-repository
          - {{ projectroot }}/backup:/etc/borgmatic.d/
          - {{ projectrootbackup }}/config:/root/.config/borg
          - {{ projectrootbackup }}/ssh:/root/.ssh
          - {{ projectrootbackup }}/cache:/root/.cache/borg
    
    jurgenhaas's avatar
    jurgenhaas committed
        env_file: ../backup/.env
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if cypress.enable|default(0) %}
    
      cypress:
    
        image: 'registry.lakedrops.com/docker/cypress:{{ cypress.version }}'
    
    jurgenhaas's avatar
    jurgenhaas committed
        environment:
          - CYPRESS_baseUrl={{ projectprotocol }}://{{ projectdomain }}{{ projectport }}
    
    {% if mailpit.enable %}
          - CYPRESS_mailpitUrl={{ projectprotocol }}://mailpit-{{ projectdomain }}{{ projectport }}
    {% endif %}
    
    {% if basicauth.enable %}
          - CYPRESS_basicauth_user={{ basicauth.user }}
          - CYPRESS_basicauth_pass={{ basicauth.pass }}
    
    {% endif %}
    
          - PHP_CONTAINER={{ projectname }}-php-1
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% if not drupal.live|default(0) %}
          - DISPLAY=:0
        network_mode: host
    {% endif %}
        working_dir: '/e2e'
        volumes:
    
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
          - /var/run/docker.sock:/var/run/docker.sock
    
    jurgenhaas's avatar
    jurgenhaas committed
          - {{ projectroot }}/tests/:/e2e
    {% if not drupal.live|default(0) %}
          - ~/.Xauthority:/root/.Xauthority:ro
        entrypoint: cypress open --project /e2e
    
    jurgenhaas's avatar
    jurgenhaas committed
    {% endif %}
    {% endif %}
    
    {% if unlighthouse.enable|default(0) %}
    
      unlighthouse:
        image: 'registry.lakedrops.com/docker/unlighthouse:latest'
        restart: unless-stopped
        networks:
          - traefik-public
          - default
        volumes:
          - /etc/timezone:/etc/timezone:ro
          - /etc/localtime:/etc/localtime:ro
          - {{ projectroot }}/tests/unlighthouse/:/data/.unlighthouse
          - {{ projectroot }}/tests/unlighthouse.config.ts:/data/unlighthouse.config.ts
        working_dir: /data
        user: root
        labels:
          traefik.enable: 'true'
          traefik.docker.network: traefik-public
          traefik.http.services.{{ projectname }}_unlighthouse.loadbalancer.server.port: 5678
    
          traefik.http.routers.unlighthouse-{{ projectname }}.rule: Host(`unlighthouse-{{ projectdomain }}`)
    
    {% if drupal.live|default(0) or traefik.usessl %}
          traefik.http.routers.unlighthouse-{{ projectname }}.tls: 'true'
          traefik.http.routers.unlighthouse-{{ projectname }}.tls.certresolver: lakedrops
    {% endif %}
    {% endif %}
    
    {% if invoiceninja.enable|default(0) %}
    
      in-db:
        image: 'mysql:5'
        environment:
          - MYSQL_ROOT_PASSWORD=ninjaAdm1nPassword
          - MYSQL_USER=ninja
          - MYSQL_PASSWORD=ninja
          - MYSQL_DATABASE=ninja
        volumes:
          - '/etc/timezone:/etc/timezone:ro'
          - '/etc/localtime:/etc/localtime:ro'
    
          - '{{ projectrootinvoiceninja }}/db:/var/lib/mysql:rw,delegated'
    
        # After first startup, call "sudo chown -R 1500:1500 app" and start again.
    
        image: 'invoiceninja/invoiceninja:5'
        depends_on:
          - in-db
        environment:
          - APP_ENV=production
          - 'APP_URL=https://invoice-{{ projectdomain }}'
          - 'APP_KEY={{ invoiceninja.api_key }}'
          - APP_DEBUG=false
          - REQUIRE_HTTPS=false
          - PHANTOMJS_PDF_GENERATION=false
          - PDF_GENERATOR=snappdf
          - QUEUE_CONNECTION=database
          - 'TRUSTED_PROXIES=*'
          - IS_DOCKER=true
          - DB_HOST=in-db
          - DB_PORT=3306
          - DB_DATABASE=ninja
          - DB_USERNAME=ninja
          - DB_PASSWORD=ninja
          - IN_USER_EMAIL={{ invoiceninja.admin_name }}
          - IN_PASSWORD={{ invoiceninja.admin_pass }}
          - MAIL_MAILER=smtp
          - MAIL_HOST={{ invoiceninja.mail.host }}
          - MAIL_PORT={{ invoiceninja.mail.port }}
          - MAIL_USERNAME={{ invoiceninja.mail.user }}
          - 'MAIL_PASSWORD={{ invoiceninja.mail.pass }}'
          - MAIL_ENCRYPTION={{ invoiceninja.mail.security }}
          - MAIL_FROM_ADDRESS={{ invoiceninja.mail.user }}
          - "MAIL_FROM_NAME='{{ invoiceninja.mail.fromname }}'"
        volumes:
          - '/etc/timezone:/etc/timezone:ro'
          - '/etc/localtime:/etc/localtime:ro'
    
          - '{{ projectrootinvoiceninja }}/public:/var/www/app/public:rw,delegated'
          - '{{ projectrootinvoiceninja }}/storage:/var/www/app/storage:rw,delegated'
    
      in-web:
        image: nginx
        networks:
          - traefik-public
          - default
        depends_on:
          - in-app
        volumes:
          - '/etc/timezone:/etc/timezone:ro'
          - '/etc/localtime:/etc/localtime:ro'
    
          - '{{ projectroot }}/nginx/in-vhost.conf:/etc/nginx/conf.d/in-vhost.conf:ro'
    
          - '{{ projectrootinvoiceninja }}/public:/var/www/app/public:ro'
    
        labels:
          traefik.enable: 'true'
          traefik.docker.network: traefik-public
    {% if basicauth.enable %}
          traefik.http.middlewares.invoice_ninja-{{ projectname }}-auth.basicauth.users: {{ basicauth.code }}
    {% endif %}
          'traefik.http.services.invoice_ninja{{ projectname }}.loadbalancer.server.port': 80
          'traefik.http.routers.invoice_ninja{{ projectname }}.rule': Host(`invoice-{{ projectdomain }}`)
    {% if drupal.live|default(0) or traefik.usessl %}
          'traefik.http.routers.invoice_ninja{{ projectname }}.tls': 'true'
          'traefik.http.routers.invoice_ninja{{ projectname }}.tls.certresolver': lakedrops
    {% endif %}
    {% endif %}