docker-compose.yml.twig 25.86 KiB
version: '3.3'
{% if drupal.live|default(0) %}
name: {{ projectname }}
{% endif %}
networks:
traefik-public:
external: true
services:
mariadb:
image: '{{ docker_image_prefix }}{% if dbserver.type == "mariadb" %}wodby/mariadb:{{ dbserver.version }}{% elseif dbserver.type == "mysql" %}mysql/mysql-server:{{ dbserver.version }}{% endif %}'
{% 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:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
{% if drupal.live|default(0) %}
- {{ projectrootdb }}:/var/lib/mysql
{% endif %}
{% if not drupal.live|default(0) %}
mariadbtest:
image: '{{ docker_image_prefix }}{% if dbserver.type == "mariadb" %}wodby/mariadb:{{ dbserver.version }}{% elseif dbserver.type == "mysql" %}mysql/mysql-server:{{ dbserver.version }}{% endif %}'
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: drupal
MYSQL_USER: drupal
MYSQL_PASSWORD: drupal
MYSQL_LOG_CONSOLE: 0
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
{% endif %}
php:
image: '{{ docker_image_prefix }}wodby/drupal-php:{{ php.version }}{% if wkhtmltox.enable %}-dev{% endif %}'
{% if drupal.live|default(0) %}
restart: unless-stopped
{% endif %}
environment:
{% if mailhog.enable or mailpit.enable %}
PHP_SENDMAIL_PATH: /usr/sbin/sendmail -t -i -S {% if mailhog.enable %}mailhog{% else %}mailpit{% endif %}:1025
{% 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) %}
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
DRUSH_ALLOW_XDEBUG: 1
{% endif %}
{% if blackfire.enable and not drupal.live|default(0) %}
PHP_BLACKFIRE: 1
{% endif %}
{% if php.ssh and not drupal.live|default(0) %}
SSH_AUTH_SOCK: /ssh-agent
{% endif %}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- {{ projectroot }}:/var/www/html
- {{ projectroot }}/drush:/etc/drush
{% if drupal.live|default(0) %}
- {{ 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
{% endif %}
{% if php.localip %}
extra_hosts:
- '{{ projectdomain }}:{{ docker0.ip }}'
{% for subdomain in relatedprojectdomains %}
- '{{ subdomain }}:{{ docker0.ip }}'
{% endfor %}
{% endif %}
{% if crontabs.enable|default(0) %}
cron:
image: '{{ docker_image_prefix }}mcuadros/ofelia:latest'
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
{% endif %}
{{ 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 %}'
{% if drupal.live|default(0) %}
restart: unless-stopped
{% endif %}
networks:
- traefik-public
- default
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_STATIC_CONTENT_OPEN_FILE_CACHE: 'off'
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 }}/
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- {{ projectroot }}:/var/www/html
{% if drupal.live|default(0) %}
- {{ projectrootfiles }}:/data/default
{% endif %}
{% if webserver.type == 'nginx' and webserver.preset == 'custom' %}
- {{ projectroot }}/nginx/custom.conf:/etc/gotpl/presets/custom.conf.tmpl
- {{ projectroot }}/nginx/upstream.custom.conf:/etc/gotpl/includes/upstream.custom.conf.tmpl
{% endif %}
labels:
traefik.enable: 'true'
traefik.docker.network: traefik-public
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 %}
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 %}
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}"
{% endfor %}
{% if varnish.enable %}
varnish:
image: '{{ docker_image_prefix }}wodby/varnish:6.0'
{% if drupal.live|default(0) %}
restart: unless-stopped
{% endif %}
networks:
- traefik-public
- default
depends_on:
- {{ webserver.type }}
environment:
VARNISH_SECRET: secret
VARNISH_BACKEND_HOST: {{ webserver.type }}
VARNISH_BACKEND_PORT: 80
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
labels:
traefik.enable: 'true'
traefik.docker.network: traefik-public
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 %}
{% endif %}
redis:
image: '{{ docker_image_prefix }}wodby/redis:{{ redis.version }}'
environment:
REDIS_MAXMEMORY: '{{ redis.max_memory }}'
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
{% if drupal.live|default(0) %}
- {{ projectrootredis }}:/data
restart: unless-stopped
{% endif %}
{% if not drupal.live|default(0) %}
{% if dbbrowser.type == 'adminer' %}
adminer:
image: '{{ docker_image_prefix }}wodby/adminer:{{ dbbrowser.version|default("4.6") }}'
networks:
- traefik-public
- default
environment:
ADMINER_SALT: adminer-salt
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
labels:
traefik.enable: 'true'
traefik.docker.network: traefik-public
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' %}
pma:
image: '{{ docker_image_prefix }}phpmyadmin/phpmyadmin:latest'
networks:
- traefik-public
- default
depends_on:
- mariadb
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
labels:
traefik.enable: 'true'
traefik.docker.network: traefik-public
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 %}
{% endif %}
{% if solr.enable %}
solr:
image: '{{ docker_image_prefix }}wodby/solr:8-{{ solr.version }}'
{% if drupal.live|default(0) %}
restart: unless-stopped
{% endif %}
networks:
- traefik-public
- default
environment:
SOLR_HEAP: 1024m
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
labels:
traefik.enable: 'true'
traefik.docker.network: traefik-public
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 %}
{% endif %}
{% if mailhog.enable and (not drupal.live|default(0) or staging) %}
mailhog:
image: '{{ docker_image_prefix }}mailhog/mailhog'
{% if staging %}
restart: unless-stopped
{% endif %}
networks:
- traefik-public
- default
environment:
MH_OUTGOING_SMTP: /test/mhout.json
privileged: true
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- {{ projectroot }}/tests/mhout.json:/test/mhout.json
labels:
traefik.enable: 'true'
traefik.docker.network: traefik-public
{% if basicauth.enable %}
traefik.http.middlewares.mailhog-{{ projectname }}-auth.basicauth.users: {{ basicauth.code }}
traefik.http.routers.mailhog-{{ projectname }}.middlewares: mailhog-{{ projectname }}-auth@docker
{% endif %}
traefik.http.services.{{ projectname }}_mailhog.loadbalancer.server.port: 8025
traefik.http.routers.mailhog-{{ projectname }}.rule: Host(`mailhog-{{ projectdomain }}`)
{% if drupal.live|default(0) or traefik.usessl %}
traefik.http.routers.mailhog-{{ projectname }}.tls: 'true'
traefik.http.routers.mailhog-{{ projectname }}.tls.certresolver: lakedrops
{% endif %}
{% elseif mailpit.enable and (not drupal.live|default(0) or staging) %}
mailpit:
image: '{{ docker_image_prefix }}axllent/mailpit'
{% if staging %}
restart: unless-stopped
{% endif %}
networks:
- traefik-public
- default
environment:
MP_SMTP_RELAY_CONFIG: /test/mailpitout.yml
privileged: true
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- {{ projectroot }}/tests/mailpitout.yml:/test/mailpitout.yml
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 %}
{% endif %}
{% if node.enable %}
nodejs:
image: '{{ docker_image_prefix }}wodby/drupal-node:1.0'
networks:
- traefik-public
- default
environment:
NODE_SERVICE_KEY: '{{ node.key }}'
labels:
traefik.enable: 'true'
traefik.docker.network: traefik-public
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'
node:
image: '{{ docker_image_prefix }}node:alpine'
networks:
- traefik-public
- default
working_dir: /app
labels:
traefik.enable: 'true'
traefik.docker.network: traefik-public
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 %}
expose:
- '3000'
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- {{ projectroot }}/{{ node.path }}:/app
command: sh -c 'npm install && npm run start'
{% endif %}
{% if memcached.enable %}
memcached:
image: '{{ docker_image_prefix }}wodby/memcached:1.6'
{% 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:
image: '{{ docker_image_prefix }}wodby/rsyslog'
{% 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'
{% if drupal.live|default(0) %}
restart: unless-stopped
{% endif %}
environment:
WEAVER_AUTH_KEY: '{{ athenapdf.key }}'
WEAVER_ATHENA_CMD: 'athenapdf -S'
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) %}
blackfire:
image: '{{ docker_image_prefix }}blackfire/blackfire'
environment:
BLACKFIRE_SERVER_ID: '{{ blackfire.id }}'
BLACKFIRE_SERVER_TOKEN: '{{ blackfire.token }}'
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
{% endif %}
{% if webgrind.enable and not drupal.live|default(0) %}
webgrind:
# add XDEBUG_PROFILE=1 to your request to profile that
image: '{{ docker_image_prefix }}wodby/webgrind:1'
networks:
- traefik-public
- default
environment:
WEBGRIND_PROFILER_DIR: '/mnt/files/xdebug'
labels:
traefik.enable: 'true'
traefik.docker.network: traefik-public
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 %}
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- {{ projectroot }}/files/debug:/mnt/files
{% endif %}
{% if tests.behat or (selenium.enable and not drupal.live|default(0)) %}
hub:
image: '{{ docker_image_prefix }}elgalu/selenium'
volumes:
- /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'
depends_on:
- php
{% endif %}
{% if selenium.enable and not drupal.live|default(0) %}
chrome:
image: '{{ docker_image_prefix }}elgalu/selenium'
depends_on:
- hub
volumes:
- /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'
{% if drupal.live|default(0) %}
restart: unless-stopped
{% endif %}
environment:
discovery.type: single-node
ES_BOOTSTRAP_MEMORY_LOCK: false
ES_JAVA_OPTS: '-Xms512m -Xmx512m'
ports:
- 9200
- 9300
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
{% endif %}
{% if drupal.live|default(0) %}
{% if alerta is defined %}
alerta:
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) %}
borgmatic:
image: '{{ docker_image_prefix }}b3vis/borgmatic:{{ backup.version }}'
restart: unless-stopped
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- /usr/local/bin/alertalerta.py:/usr/local/bin/alertalerta.py
- {{ 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
env_file: ../backup/.env
{% endif %}
{% endif %}
{% if cypress.enable|default(0) %}
cypress:
image: 'registry.lakedrops.com/docker/cypress:{{ cypress.version }}'
environment:
- CYPRESS_baseUrl={{ projectprotocol }}://{{ projectdomain }}{{ projectport }}
{% if mailpit.enable %}
- CYPRESS_mailpitUrl={{ projectprotocol }}://mailpit-{{ projectdomain }}{{ projectport }}
{% endif %}
{% if mailhog.enable %}
- CYPRESS_mailhogUrl={{ projectprotocol }}://mailhog-{{ projectdomain }}{{ projectport }}
{% endif %}
{% if basicauth.enable %}
- CYPRESS_basicauth_user={{ basicauth.user }}
- CYPRESS_basicauth_pass={{ basicauth.pass }}
{% endif %}
- PHP_CONTAINER={{ projectname }}-php-1
{% 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
- {{ projectroot }}/tests/:/e2e
{% if not drupal.live|default(0) %}
- ~/.Xauthority:/root/.Xauthority:ro
entrypoint: cypress open --project /e2e
user: '1000:{{ docker_group_id }}'
{% 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'
in-app:
# 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 %}