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 %}