Refactored docker-compose roles

This commit is contained in:
Kevin Veen-Birkenbach 2025-07-07 03:24:54 +02:00
parent 2ea7a606b6
commit 38ed1e94e8
No known key found for this signature in database
GPG Key ID: 44D8F11FD62F878E
102 changed files with 681 additions and 507 deletions

View File

@ -111,11 +111,6 @@ Now that you have defined the application settings, domain, and application ID,
dockerfile: {{ path_cymais_my_service_output.stdout }}/Dockerfile dockerfile: {{ path_cymais_my_service_output.stdout }}/Dockerfile
ports: ports:
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:5000" - "127.0.0.1:{{ ports.localhost.http[application_id] }}:5000"
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:5000"]
interval: 1m
timeout: 10s
retries: 3
volumes: volumes:
- {{ path_cymais_my_service_output.stdout }}:/app - {{ path_cymais_my_service_output.stdout }}:/app
- {{ path_cymais_output.stdout }}:/source - {{ path_cymais_output.stdout }}:/source

View File

@ -1,10 +1,7 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications[application_id].images[application_id] }}" image: "{{ applications[application_id].images[application_id] }}"
build: build:
@ -16,7 +13,7 @@ services:
environment: environment:
- AKAUNTING_SETUP - AKAUNTING_SETUP
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:

View File

@ -12,4 +12,8 @@ credentials:
domains: domains:
canonical: canonical:
- "accounting.{{ primary_domain }}" - "accounting.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -1,8 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
web: web:
image: "{{ applications[application_id].images.web }}" image: "{{ applications[application_id].images.web }}"
@ -11,7 +7,7 @@ services:
volumes: volumes:
- .:/usr/share/nginx/html - .:/usr/share/nginx/html
- .:/var/www - .:/var/www
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
maildev: maildev:
worker: worker:
env_file: env_file:
@ -20,7 +16,7 @@ services:
worker: worker:
image: "{{ applications[application_id].images.worker }}" image: "{{ applications[application_id].images.worker }}"
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
maildev: maildev:
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
volumes: volumes:

View File

@ -7,7 +7,12 @@ features:
css: true css: true
portfolio_iframe: false portfolio_iframe: false
central_database: true central_database: true
docker:
services:
redis:
enabled: true
database:
enabled: true
domains: domains:
canonical: canonical:
- "tickets.{{ primary_domain }}" - "tickets.{{ primary_domain }}"

View File

@ -1,11 +1,7 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications[application_id].images.baserow }}" image: "{{ applications[application_id].images.baserow }}"
container_name: baserow-application container_name: baserow-application
volumes: volumes:
@ -13,7 +9,7 @@ services:
ports: ports:
- "{{ports.localhost.http[application_id]}}:80" - "{{ports.localhost.http[application_id]}}:80"
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:

View File

@ -1,7 +1,13 @@
images: images:
baserow: "baserow/baserow:latest" baserow: "baserow/baserow:latest"
features: features:
matomo: true matomo: true
css: true css: true
portfolio_iframe: true portfolio_iframe: true
central_database: true central_database: true
docker:
services:
redis:
enabled: true
database:
enabled: true

View File

@ -1,17 +1,17 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
pds: pds:
{% set container_port = 3000 %}
{% set container_healthcheck = 'xrpc/_health' %}
image: "{{ applications[application_id].images.pds }}" image: "{{ applications[application_id].images.pds }}"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- pds_data:/opt/pds - pds_data:/opt/pds
- {{pdsadmin_file_path}}:/usr/local/bin/pdsadmin:ro - {{pdsadmin_file_path}}:/usr/local/bin/pdsadmin:ro
ports: ports:
- "127.0.0.1:{{ports.localhost.http.bluesky_api}}:3000" - "127.0.0.1:{{ports.localhost.http.bluesky_api}}:{{ container_port }}"
healthcheck:
test: ["CMD", "wget", "--spider", "http://127.0.0.1:3000/xrpc/_health"] {% include 'roles/docker-container/templates/healthcheck/wget.yml.j2' %}
interval: 1m
timeout: 10s
retries: 3
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
# Deactivated for the moment @see https://github.com/bluesky-social/social-app # Deactivated for the moment @see https://github.com/bluesky-social/social-app

View File

@ -11,4 +11,8 @@ features:
domains: domains:
canonical: canonical:
web: "bskyweb.{{ primary_domain }}" web: "bskyweb.{{ primary_domain }}"
api: "bluesky.{{ primary_domain }}" api: "bluesky.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -0,0 +1 @@
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}

View File

@ -1,6 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
collabora: collabora:
image: collabora/code image: collabora/code
@ -8,8 +6,8 @@ services:
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:80"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,3 +1,9 @@
domains: domains:
canonical: canonical:
- "collabora.{{ primary_domain }}" - "collabora.{{ primary_domain }}"
docker:
services:
redis:
enabled: true
database:
enabled: false # May this is wrong. Just set during refactoring

View File

@ -0,0 +1,15 @@
{# Base template for all docker-compose.yml.j2 #}
services:
{# Load Database #}
{% if applications[application_id].docker.database.enabled | default(false) | bool %}
{% include 'roles/docker-central-database/templates/services/main.yml.j2' %}
{% endif %}
{# Load Redis #}
{% if applications[application_id].docker.redis.enabled | default(false) | bool %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% endif %}
{# Load OAuth2 Proxy #}
{% if not applications | is_feature_enabled('oauth2',application_id) %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
{% endif %}
{{ "\n" }}

View File

@ -0,0 +1,17 @@
{# This template needs to be included in docker-compose.yml containers, which depend on a database, redis and optional additional volumes #}
{% if applications | is_feature_enabled('central_database', application_id)
and not (applications[application_id].docker.redis.enabled
| default(false)
| bool) %}
depends_on: []
{% else %}
depends_on:
{% if not applications | is_feature_enabled('central_database', application_id) %}
database:
condition: service_healthy
{% endif %}
{% if applications[application_id].docker.redis.enabled | default(false) | bool %}
redis:
condition: service_healthy
{% endif %}
{% endif %}

View File

@ -0,0 +1,9 @@
healthcheck:
test:
- "CMD"
- "curl"
- "-f"
- "http://127.0.0.1{{ (":" ~ container_port) if container_port is defined else '' }}/{{ container_healthcheck | default('') }}"
interval: 1m
timeout: 10s
retries: 3

View File

@ -0,0 +1,6 @@
healthcheck:
test:
- "CMD"
- "bash"
- "-c"
- "exec 3<>/dev/tcp/localhost/{{ container_port }} && echo -e 'GET /{{ container_healthcheck | default('') }} HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && cat <&3 | grep -q 'HTTP/1.1'"

View File

@ -0,0 +1,10 @@
healthcheck:
test:
- "CMD"
- "wget"
- "--spider"
- "--proxy=off"
- "http://127.0.0.1{{ (":" ~ container_port) if container_port is defined else '' }}/{{ container_healthcheck | default('') }}"
interval: 1m
timeout: 10s
retries: 3

View File

@ -1,24 +1,18 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: "gitea/gitea:{{applications.gitea.version}}" image: "gitea/gitea:{{applications.gitea.version}}"
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:3000" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
- "{{ports.public.ssh[application_id]}}:22" - "{{ports.public.ssh[application_id]}}:22"
volumes: volumes:
- data:/data - data:/data
- /etc/timezone:/etc/timezone:ro - /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
healthcheck: {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 1m
timeout: 10s
retries: 3
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:

View File

@ -1,2 +1,3 @@
application_id: "coturn" application_id: "coturn"
container_port: 3000
#database_type: "mariadb" #database_type: "mariadb"

View File

@ -1,8 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
redis: redis:

View File

@ -21,3 +21,9 @@ csp:
domains: domains:
canonical: canonical:
- "forum.{{ primary_domain }}" - "forum.{{ primary_domain }}"
docker:
services:
database:
enabled: true
redis:
enabled: true

View File

@ -1,4 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
elasticsearch: elasticsearch:
build: build:
context: elasticsearch/ context: elasticsearch/
@ -61,5 +61,7 @@ services:
depends_on: depends_on:
- elasticsearch - elasticsearch
volumes: {% include 'templates/docker/compose/volumes.yml.j2' %}
elasticsearch: elasticsearch:
{% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,15 +1,11 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
web: web:
image: "{{ applications[application_id].images.espocrm }}" image: "{{ applications[application_id].images.espocrm }}"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
healthcheck: {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
test: ["CMD", "curl", "-f", "http://localhost/"]
ports: ports:
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:80" - "127.0.0.1:{{ ports.localhost.http[application_id] }}:80"
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
volumes: volumes:
- data:/var/www/html - data:/var/www/html
@ -35,7 +31,7 @@ services:
- ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBSCRIBER_DSN=tcp://*:7777 - ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBSCRIBER_DSN=tcp://*:7777
- ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBMISSION_DSN=tcp://websocket:7777 - ESPOCRM_CONFIG_WEB_SOCKET_ZERO_M_Q_SUBMISSION_DSN=tcp://websocket:7777
entrypoint: docker-websocket.sh entrypoint: docker-websocket.sh
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
volumes: volumes:
- data:/var/www/html - data:/var/www/html

View File

@ -26,4 +26,8 @@ domains:
aliases: aliases:
- "crm.{{ primary_domain }}" - "crm.{{ primary_domain }}"
email: email:
from_name: "Customer Relationship Management ({{ primary_domain }})" from_name: "Customer Relationship Management ({{ primary_domain }})"
docker:
services:
database:
enabled: true

View File

@ -1,10 +1,7 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
image: "{{ applications[application_id].images.friendica }}" image: "{{ applications[application_id].images.friendica }}"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- html:{{ friendica_application_base }} - html:{{ friendica_application_base }}
- data:/var/www/data # I assume that this one is unnessecarry - data:/var/www/data # I assume that this one is unnessecarry
@ -12,10 +9,9 @@ services:
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:80"
{% include 'roles/docker-compose/templates/services/msmtp_curl_test.yml.j2' %} {% include 'roles/docker-container/templates/healthcheck/msmtp_curl.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:

View File

@ -25,4 +25,8 @@ oauth2_proxy:
port: "80" port: "80"
addons: addons:
keycloakpassword: keycloakpassword:
ldapauth: ldapauth:
docker:
services:
database:
enabled: true

View File

@ -1,8 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
celeryworker: celeryworker:
# Celery workers handle background tasks (such file imports or federation # Celery workers handle background tasks (such file imports or federation
# messaging). The more processes a worker gets, the more tasks # messaging). The more processes a worker gets, the more tasks
@ -12,7 +8,7 @@ services:
# of CPUs. You can adjust this, by explicitly setting the --concurrency # of CPUs. You can adjust this, by explicitly setting the --concurrency
# flag: # flag:
# celery -A funkwhale_api.taskapp worker -l INFO --concurrency=4 # celery -A funkwhale_api.taskapp worker -l INFO --concurrency=4
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications | get_docker_image(application_id,'api') }}" image: "{{ applications | get_docker_image(application_id,'api') }}"
command: celery -A funkwhale_api.taskapp worker -l INFO --concurrency={{celeryd_concurrency}} command: celery -A funkwhale_api.taskapp worker -l INFO --concurrency={{celeryd_concurrency}}
environment: environment:
@ -20,18 +16,18 @@ services:
volumes: volumes:
- "data:{{funkwhale_media_root}}" - "data:{{funkwhale_media_root}}"
- "music:{{funkwhale_music_directory_path}}:ro" - "music:{{funkwhale_music_directory_path}}:ro"
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
celerybeat: celerybeat:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications | get_docker_image(application_id,'api') }}" image: "{{ applications | get_docker_image(application_id,'api') }}"
command: celery -A funkwhale_api.taskapp beat --pidfile= -l INFO command: celery -A funkwhale_api.taskapp beat --pidfile= -l INFO
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
api: api:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications | get_docker_image(application_id,'api') }}" image: "{{ applications | get_docker_image(application_id,'api') }}"
volumes: volumes:
- "music:{{funkwhale_music_directory_path}}:ro" - "music:{{funkwhale_music_directory_path}}:ro"
@ -39,11 +35,11 @@ services:
- "funkwhale_static_root:{{funkwhale_static_root}}" - "funkwhale_static_root:{{funkwhale_static_root}}"
ports: ports:
- "{{ funkwhale_docker_api_port }}" - "{{ funkwhale_docker_api_port }}"
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
front: front:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications | get_docker_image(application_id,'front') }}" image: "{{ applications | get_docker_image(application_id,'front') }}"
depends_on: depends_on:
- api - api
@ -56,7 +52,7 @@ services:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:80"
typesense: typesense:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications[application_id].docker.images.typesense }}" image: "{{ applications[application_id].docker.images.typesense }}"
volumes: volumes:
- ./typesense/data:/data - ./typesense/data:/data

View File

@ -7,6 +7,11 @@ docker:
api: "funkwhale/api" api: "funkwhale/api"
front: "funkwhale/front" front: "funkwhale/front"
typesense: "typesense/typesense" typesense: "typesense/typesense"
services:
redis:
enabled: true
database:
enabled: true
features: features:
matomo: true matomo: true
css: false css: false

View File

@ -1,20 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
application:
container_name: {{ application_id }}
image: ghcr.io/ldapaccountmanager/lam:{{applications[application_id].version}}
ports:
- 127.0.0.1:{{ports.localhost.http[application_id]}}:80
{% include 'roles/docker-compose/templates/services/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %}
{# include 'templates/docker/compose/volumes.yml.j2' #}
{% include 'templates/docker/compose/networks.yml.j2' %}
services:
fusiondirectory: fusiondirectory:
image: tiredofit/fusiondirectory:latest image: tiredofit/fusiondirectory:latest
container_name: fusiondirectory container_name: fusiondirectory
@ -39,5 +23,7 @@ services:
- fusiondirectory_data:/assets/fusiondirectory - fusiondirectory_data:/assets/fusiondirectory
restart: always restart: always
volumes: {% include 'templates/docker/compose/volumes.yml.j2' %}
fusiondirectory_data: fusiondirectory_data:
{% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,26 +1,18 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
application: application:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications[application_id].images.gitea }}" image: "{{ applications[application_id].images.gitea }}"
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:3000" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
- "{{ports.public.ssh[application_id]}}:22" - "{{ports.public.ssh[application_id]}}:22"
volumes: volumes:
- data:/data - data:/data
- /etc/timezone:/etc/timezone:ro - /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
healthcheck: {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
test: ["CMD", "curl", "-f", "http://127.0.0.1:3000"]
interval: 1m
timeout: 10s
retries: 3
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:

View File

@ -36,4 +36,8 @@ csp:
- "data:" - "data:"
domains: domains:
aliases: aliases:
- "git.{{ primary_domain }}" - "git.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -1,4 +1,5 @@
application_id: "gitea" application_id: "gitea"
container_port: 3000
database_type: "mariadb" database_type: "mariadb"
gitea_ldap_auth_args: gitea_ldap_auth_args:
- '--name "LDAP ({{ primary_domain }})"' - '--name "LDAP ({{ primary_domain }})"'

View File

@ -1,13 +1,9 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
web: web:
image: "{{ applications[application_id].images.gitlab }}" image: "{{ applications[application_id].images.gitlab }}"
hostname: '{{domains | get_domain(application_id)}}' hostname: '{{domains | get_domain(application_id)}}'
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:80"
- "{{ports.public.ssh[application_id]}}:22" - "{{ports.public.ssh[application_id]}}:22"
@ -16,13 +12,13 @@ services:
- 'logs:/var/log/gitlab' - 'logs:/var/log/gitlab'
- 'data:/var/opt/gitlab' - 'data:/var/opt/gitlab'
shm_size: '256m' shm_size: '256m'
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/compose/networks.yml.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
redis: redis:
config: config:
logs: logs:
data: data:
{% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -4,4 +4,10 @@ features:
matomo: true matomo: true
css: true css: true
portfolio_iframe: true portfolio_iframe: true
central_database: true central_database: true
docker:
services:
redis:
enabled: true
database:
enabled: true

View File

@ -1,16 +1,13 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
image: "{{ applications[application_id].images.joomla }}" image: "{{ applications[application_id].images.joomla }}"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- data:/var/www/html - data:/var/www/html
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:80"
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:

View File

@ -4,6 +4,11 @@ features:
matomo: true matomo: true
css: true css: true
portfolio_iframe: true portfolio_iframe: true
central_database: true
domains: domains:
canonical: canonical:
- "cms.{{ primary_domain }}" - "cms.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -1,22 +1,18 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
image: "{{ applications[application_id].images.keycloak }}" image: "{{ applications[application_id].images.keycloak }}"
container_name: {{container_name}} container_name: {{container_name}}
command: start {% if applications[application_id].import_realm | bool %}--import-realm{% endif %} command: start {% if applications[application_id].import_realm | bool %}--import-realm{% endif %}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
ports: ports:
- "{{ keycloak_server_host }}:8080" - "{{ keycloak_server_host }}:8080"
volumes: volumes:
- "{{import_directory_host}}:{{import_directory_docker}}" - "{{import_directory_host}}:{{import_directory_docker}}"
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
healthcheck: {% set container_port = 9000 %}
test: ["CMD", "sh", "-c", "exec 3<>/dev/tcp/localhost/9000 && echo -e 'GET /health/live HTTP/1.1\\r\\nHost: {{domains | get_domain('keycloak')}}\\r\\nConnection: close\\r\\n\\r\\n' >&3 && cat <&3"] {% set container_healthcheck = 'health/live' %}
interval: 30s {% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
timeout: 10s
retries: 3
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -25,3 +25,7 @@ scopes:
nextcloud: nextcloud nextcloud: nextcloud
rbac_groups: "/rbac" rbac_groups: "/rbac"
docker:
services:
database:
enabled: true

View File

@ -1,15 +1,11 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
application: application:
container_name: {{ application_id }} container_name: {{ application_id }}
image: "{{ applications[application_id].images.lam }}" image: "{{ applications[application_id].images.lam }}"
ports: ports:
- 127.0.0.1:{{ports.localhost.http[application_id]}}:80 - 127.0.0.1:{{ports.localhost.http[application_id]}}:80
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{# include 'templates/docker/compose/volumes.yml.j2' #} {% include 'templates/docker/compose/networks.yml.j2' %}
{% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,11 +1,9 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
application: application:
image: "{{ applications[application_id].images.openldap }}" image: "{{ applications[application_id].images.openldap }}"
container_name: {{ applications[application_id].hostname }} container_name: {{ applications[application_id].hostname }}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% if applications[application_id].network.public | bool or applications[application_id].network.local | bool %} {% if applications[application_id].network.public | bool or applications[application_id].network.local | bool %}
ports: ports:
- 127.0.0.1:{{ports.localhost.ldap.ldap}}:{{ldap_docker_port}} # Expose just on localhost so that nginx stream proxy can use it - 127.0.0.1:{{ports.localhost.ldap.ldap}}:{{ldap_docker_port}} # Expose just on localhost so that nginx stream proxy can use it
@ -27,4 +25,4 @@ services:
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -3,7 +3,7 @@
# of localhost will only listen to connections from the current machine. To # of localhost will only listen to connections from the current machine. To
# listen on all interfaces use '0.0.0.0'. To listen on the default web address # listen on all interfaces use '0.0.0.0'. To listen on the default web address
# port, use port 80 (this will require running with elevated permissions). # port, use port 80 (this will require running with elevated permissions).
address = "0.0.0.0:9000" address = "0.0.0.0:{{ container_port }}"
# Database. # Database.
[db] [db]

View File

@ -1,18 +1,15 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% set container_healthcheck = 'health' %}
{% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications[application_id].images.listmonk }}" image: "{{ applications[application_id].images.listmonk }}"
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:9000" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
volumes: volumes:
- {{docker_compose.directories.config}}config.toml:/listmonk/config.toml - {{docker_compose.directories.config}}config.toml:/listmonk/config.toml
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
healthcheck: {% include 'roles/docker-container/templates/healthcheck/wget.yml.j2' %}
test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:9000/health || exit 1']
{% include 'templates/docker/compose/volumes-just-database.yml.j2' %} {% include 'templates/docker/compose/volumes-just-database.yml.j2' %}

View File

@ -10,4 +10,8 @@ features:
oidc: true oidc: true
domains: domains:
canonical: canonical:
- "newsletter.{{ primary_domain }}" - "newsletter.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -1,5 +1,6 @@
application_id: "listmonk" application_id: "listmonk"
database_type: "postgres" database_type: "postgres"
container_port: "9000"
listmonk_settings: listmonk_settings:
- key: "app.root_url" - key: "app.root_url"

View File

@ -1,19 +1,15 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
# Core services # Core services
resolver: resolver:
image: {{docker_source}}/unbound:{{applications.mailu.version}} image: {{docker_source}}/unbound:{{applications.mailu.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
ipv4_address: {{networks.local.mailu.dns}} ipv4_address: {{networks.local.mailu.dns}}
front: front:
image: {{docker_source}}/nginx:{{applications.mailu.version}} image: {{docker_source}}/nginx:{{applications.mailu.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:80"
- "{{networks.internet.ip4}}:25:25" - "{{networks.internet.ip4}}:25:25"
@ -27,7 +23,7 @@ services:
volumes: volumes:
- "{{docker_compose.directories.volumes}}overrides/nginx:/overrides:ro" - "{{docker_compose.directories.volumes}}overrides/nginx:/overrides:ro"
- "{{cert_mount_directory}}:/certs:ro" - "{{cert_mount_directory}}:/certs:ro"
{% include 'templates/docker/container/depends-on-also-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
resolver: resolver:
condition: service_started condition: service_started
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
@ -38,11 +34,11 @@ services:
admin: admin:
image: {{docker_source}}/admin:{{applications.mailu.version}} image: {{docker_source}}/admin:{{applications.mailu.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- "admin_data:/data" - "admin_data:/data"
- "dkim:/dkim" - "dkim:/dkim"
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
resolver: resolver:
condition: service_started condition: service_started
front: front:
@ -53,7 +49,7 @@ services:
imap: imap:
image: {{docker_source}}/dovecot:{{applications.mailu.version}} image: {{docker_source}}/dovecot:{{applications.mailu.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- "dovecot_mail:/mail" - "dovecot_mail:/mail"
- "{{docker_compose.directories.volumes}}overrides:/overrides:ro" - "{{docker_compose.directories.volumes}}overrides:/overrides:ro"
@ -66,7 +62,7 @@ services:
smtp: smtp:
image: {{docker_source}}/postfix:{{applications.mailu.version}} image: {{docker_source}}/postfix:{{applications.mailu.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- "{{docker_compose.directories.volumes}}overrides:/overrides:ro" - "{{docker_compose.directories.volumes}}overrides:/overrides:ro"
- "smtp_queue:/queue" - "smtp_queue:/queue"
@ -90,7 +86,7 @@ services:
antispam: antispam:
image: {{docker_source}}/rspamd:{{applications.mailu.version}} image: {{docker_source}}/rspamd:{{applications.mailu.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- "filter:/var/lib/rspamd" - "filter:/var/lib/rspamd"
- "dkim:/dkim" - "dkim:/dkim"
@ -109,7 +105,7 @@ services:
# Optional services # Optional services
antivirus: antivirus:
image: clamav/clamav-debian:latest image: clamav/clamav-debian:latest
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- "filter:/data" - "filter:/data"
depends_on: depends_on:
@ -120,7 +116,7 @@ services:
webdav: webdav:
image: {{docker_source}}/radicale:{{applications.mailu.version}} image: {{docker_source}}/radicale:{{applications.mailu.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- "webdav_data:/data" - "webdav_data:/data"
depends_on: depends_on:
@ -134,7 +130,7 @@ services:
image: {{docker_source}}/fetchmail:{{applications.mailu.version}} image: {{docker_source}}/fetchmail:{{applications.mailu.version}}
volumes: volumes:
- "admin_data:/data" - "admin_data:/data"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
depends_on: depends_on:
- admin - admin
- smtp - smtp
@ -146,7 +142,7 @@ services:
webmail: webmail:
image: {{docker_source}}/webmail:{{applications.mailu.version}} image: {{docker_source}}/webmail:{{applications.mailu.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- "webmail_data:/data" - "webmail_data:/data"
- "{{docker_compose.directories.volumes}}overrides:/overrides:ro" - "{{docker_compose.directories.volumes}}overrides:/overrides:ro"

View File

@ -26,4 +26,9 @@ rbac:
roles: roles:
mail-bot: mail-bot:
description: "Has an token to send and recieve emails" description: "Has an token to send and recieve emails"
docker:
services:
redis:
enabled: true
database:
enabled: true

View File

@ -1,38 +1,36 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
web: web:
{% set container_port = 3000 %}
{% set container_healthcheck = 'health' %}
image: "{{ applications[application_id].images[application_id] }}" image: "{{ applications[application_id].images[application_id] }}"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p {{ container_port }}"
healthcheck: {% include 'roles/docker-container/templates/healthcheck/wget.yml.j2' %}
test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1']
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:3000" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
volumes: volumes:
- data:/mastodon/public/system - data:/mastodon/public/system
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
streaming: streaming:
{% set container_port = 4000 %}
{% set container_healthcheck = 'api/v1/streaming/health' %}
image: "{{ applications[application_id].images.streaming }}" image: "{{ applications[application_id].images.streaming }}"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
command: node ./streaming command: node ./streaming
healthcheck: {% include 'roles/docker-container/templates/healthcheck/wget.yml.j2' %}
test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']
ports: ports:
- "127.0.0.1:{{ports.localhost.websocket[application_id]}}:4000" - "127.0.0.1:{{ports.localhost.websocket[application_id]}}:{{ container_port }}"
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
sidekiq: sidekiq:
image: "{{ applications[application_id].images.mastodon }}" image: "{{ applications[application_id].images.mastodon }}"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
command: bundle exec sidekiq command: bundle exec sidekiq
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
volumes: volumes:
- data:/mastodon/public/system - data:/mastodon/public/system
healthcheck: healthcheck:

View File

@ -16,4 +16,10 @@ domains:
csp: csp:
whitelist: whitelist:
frame-src: frame-src:
- "*" - "*"
docker:
services:
redis:
enabled: true
database:
enabled: true

View File

@ -1,22 +1,15 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% set container_port = 80 %}
{% include 'roles/docker-container/templates/base.yml.j2' %}
image: "{{ applications[application_id].images[application_id] }}" image: "{{ applications[application_id].images[application_id] }}"
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
volumes: volumes:
- data:/var/www/html - data:/var/www/html
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
healthcheck: {% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/localhost/80 && echo -e 'GET / HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && cat <&3 | grep -q 'HTTP/1.1'"]
interval: 30s
timeout: 10s
retries: 3
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:

View File

@ -24,4 +24,9 @@ csp:
domains: domains:
aliases: aliases:
- "analytics.{{ primary_domain }}" - "analytics.{{ primary_domain }}"
excluded_ips: "{{ networks.internet.values() | list }}" excluded_ips: "{{ networks.internet.values() | list }}"
docker:
services:
database:
enabled: true

View File

@ -1,8 +1,6 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
synapse: synapse:
{% set container_port = 8008 %}
image: "{{ applications[application_id].images.synapse }}" image: "{{ applications[application_id].images.synapse }}"
container_name: matrix-synapse container_name: matrix-synapse
restart: {{docker_restart_policy}} restart: {{docker_restart_policy}}
@ -19,35 +17,27 @@ services:
- SYNAPSE_SERVER_NAME={{domains.matrix.synapse}} - SYNAPSE_SERVER_NAME={{domains.matrix.synapse}}
- SYNAPSE_REPORT_STATS=no - SYNAPSE_REPORT_STATS=no
ports: ports:
- "127.0.0.1:{{ports.localhost.http.synapse}}:8008" - "127.0.0.1:{{ports.localhost.http.synapse}}:{{ container_port }}"
healthcheck: {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
test: ["CMD", "curl", "-f", "http://localhost:8008/"]
interval: 1m
timeout: 10s
retries: 3
{% if bridges | length > 0 %} {% if bridges | length > 0 %}
{% include 'templates/docker/container/depends-on-also-database.yml.j2' %}
{% for item in bridges %} {% for item in bridges %}
mautrix-{{item.bridge_name}}: mautrix-{{item.bridge_name}}:
condition: service_healthy condition: service_healthy
{% endfor %} {% endfor %}
{% else %} {% else %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %}
{% endif %} {% endif %}
{% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
element: element:
{% set container_port = 80 %}
image: "{{ applications[application_id].images.element }}" image: "{{ applications[application_id].images.element }}"
container_name: matrix-element container_name: matrix-element
restart: {{docker_restart_policy}} restart: {{docker_restart_policy}}
volumes: volumes:
- ./element-config.json:/app/config.json - ./element-config.json:/app/config.json
ports: ports:
- "127.0.0.1:{{ports.localhost.http.element}}:80" - "127.0.0.1:{{ports.localhost.http.element}}:{{ container_port }}"
healthcheck: {% include 'roles/docker-container/templates/healthcheck/wget.yml.j2' %}
test: ["CMD", "wget", "--spider", "-q", "http://localhost:80/"]
interval: 1m
timeout: 10s
retries: 3
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% for item in bridges %} {% for item in bridges %}

View File

@ -1,3 +1,7 @@
docker:
services:
database:
enabled: true
images: images:
synapse: "matrixdotorg/synapse:latest" synapse: "matrixdotorg/synapse:latest"
element: "vectorim/element-web:latest" element: "vectorim/element-web:latest"

View File

@ -1,18 +1,16 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
application:
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %} # Seems like image tag got lost. @todo Check and implement if necessary
application: log_driver: journald
# Seems like image tag got lost. @todo Check and implement if necessary restart: "{{docker_restart_policy}}"
log_driver: journald depends_on:
restart: "{{docker_restart_policy}}" - database
depends_on: volumes:
- database - "mediawiki-data:/var/www/html/"
volumes: ports:
- "mediawiki-data:/var/www/html/" - "127.0.0.1:{{ports.localhost.http[application_id]}}:80"
ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80"
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:

View File

@ -1,21 +1,14 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
image: "{{ applications[application_id].images[application_id] }}" image: "{{ applications[application_id].images[application_id] }}"
volumes: volumes:
- uploads:/var/lib/mobilizon/uploads - uploads:/var/lib/mobilizon/uploads
- {{ mobilizon_host_conf_exs_file }}:/etc/mobilizon/config.exs:ro - {{ mobilizon_host_conf_exs_file }}:/etc/mobilizon/config.exs:ro
ports: ports:
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ mobilizon_exposed_docker_port }}" - "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
healthcheck: {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
test: ["CMD", "curl", "-f", "http://127.0.0.1:{{ mobilizon_exposed_docker_port }}"] {% include 'roles/docker-container/templates/base.yml.j2' %}
interval: 30s {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
timeout: 10s
retries: 3
{% include 'roles/docker-compose/templates/services/base.yml.j2' %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}

View File

@ -15,7 +15,7 @@ MOBILIZON_INSTANCE_HOST={{ domains | get_domain(application_id) }}
# MOBILIZON_INSTANCE_LISTEN_IP # MOBILIZON_INSTANCE_LISTEN_IP
# The port to listen on (defaults to 4000). Point your reverse proxy on this port. # The port to listen on (defaults to 4000). Point your reverse proxy on this port.
MOBILIZON_INSTANCE_PORT={{ mobilizon_exposed_docker_port }} MOBILIZON_INSTANCE_PORT={{ container_port }}
# Whether registrations are opened or closed. Can be changed in the admin settings UI as well. # Whether registrations are opened or closed. Can be changed in the admin settings UI as well.
# Make sure to moderate actively your instance if registrations are opened. # Make sure to moderate actively your instance if registrations are opened.

View File

@ -15,4 +15,8 @@ domains:
canonical: canonical:
- "event.{{ primary_domain }}" - "event.{{ primary_domain }}"
aliases: aliases:
- "events.{{ primary_domain }}" - "events.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -4,5 +4,5 @@ database_type: "postgres"
database_gis_enabled: true database_gis_enabled: true
mobilizon_oidc_callback_url: "{{ domains | get_url(application_id, web_protocol) }}/auth/openid_connect/callback" mobilizon_oidc_callback_url: "{{ domains | get_url(application_id, web_protocol) }}/auth/openid_connect/callback"
mobilizon_exposed_docker_port: 4000 container_port: 4000
mobilizon_host_conf_exs_file: "{{docker_compose.directories.config}}config.exs" mobilizon_host_conf_exs_file: "{{docker_compose.directories.config}}config.exs"

View File

@ -1,24 +1,20 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
moodle: moodle:
{% set container_port = 8008 %}
container_name: {{ container_name }} container_name: {{ container_name }}
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
image: moodle_custom image: moodle_custom
ports: ports:
- 127.0.0.1:{{ports.localhost.http[application_id]}}:8080 - 127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- 'code:{{ bitnami_code_link }}' - 'code:{{ bitnami_code_link }}'
- 'data:{{ bitnami_data_dir }}' - 'data:{{ bitnami_data_dir }}'
healthcheck: {% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/localhost/8080 && echo -e 'GET / HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && cat <&3 | grep -q 'HTTP/1.1'"] {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
interval: 30s
timeout: 10s
retries: 3
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}

View File

@ -24,4 +24,8 @@ csp:
- "https://cdn.jsdelivr.net" - "https://cdn.jsdelivr.net"
domains: domains:
canonical: canonical:
- "academy.{{ primary_domain }}" - "academy.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -1,7 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
logging: logging:
driver: journald driver: journald
@ -11,7 +8,7 @@ services:
restart: {{docker_restart_policy}} restart: {{docker_restart_policy}}
volumes: volumes:
- data:/var/www/html - data:/var/www/html
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
server: server:

View File

@ -3,5 +3,10 @@ version: "latest"
features: features:
matomo: true matomo: true
css: true css: true
portfolio_iframe: false portfolio_iframe: true
central_database: true central_database: true
docker:
services:
database:
enabled: true

View File

@ -1,8 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
image: "nextcloud:{{applications.nextcloud.version}}-fpm-alpine" image: "nextcloud:{{applications.nextcloud.version}}-fpm-alpine"
@ -15,8 +11,8 @@ services:
interval: 1m interval: 1m
timeout: 10s timeout: 10s
retries: 3 retries: 3
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
ipv4_address: 192.168.102.69 ipv4_address: 192.168.102.69
@ -49,16 +45,13 @@ services:
driver: journald driver: journald
restart: {{docker_restart_policy}} restart: {{docker_restart_policy}}
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
volumes: volumes:
- "{{docker_compose.directories.volumes}}nginx.conf:/etc/nginx/nginx.conf:ro" - "{{docker_compose.directories.volumes}}nginx.conf:/etc/nginx/nginx.conf:ro"
volumes_from: volumes_from:
- application - application
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80/"] {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
interval: 1m
timeout: 10s
retries: 3
networks: networks:
default: default:
ipv4_address: 192.168.102.67 ipv4_address: 192.168.102.67
@ -77,7 +70,7 @@ services:
interval: 1m interval: 1m
timeout: 10s timeout: 10s
retries: 3 retries: 3
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
ipv4_address: 192.168.102.70 ipv4_address: 192.168.102.70

View File

@ -11,7 +11,12 @@ csp:
domains: domains:
canonical: canonical:
- "cloud.{{ primary_domain }}" - "cloud.{{ primary_domain }}"
docker:
services:
redis:
enabled: true
database:
enabled: true
oidc: oidc:
enabled: "{{ applications.nextcloud.features.oidc | default(true) }}" # Activate OIDC for Nextcloud enabled: "{{ applications.nextcloud.features.oidc | default(true) }}" # Activate OIDC for Nextcloud
# floavor decides which OICD plugin should be used. # floavor decides which OICD plugin should be used.

View File

@ -1,6 +1,7 @@
--- ---
# General # General
application_id: "nextcloud" # Application identifier application_id: "nextcloud" # Application identifier
container_port: 80
# Database # Database
database_password: "{{applications.nextcloud.credentials.database_password}}" # Database password database_password: "{{applications.nextcloud.credentials.database_password}}" # Database password

View File

@ -7,18 +7,15 @@ x-op-app: &app
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
cache: cache:
image: memcached image: memcached
container_name: openproject-memcached container_name: openproject-memcached
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
proxy: proxy:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: {{custom_openproject_image}} image: {{custom_openproject_image}}
container_name: openproject-proxy container_name: openproject-proxy
command: "./docker/prod/proxy" command: "./docker/prod/proxy"
@ -34,32 +31,29 @@ services:
web: web:
<<: *app <<: *app
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
command: "./docker/prod/web" command: "./docker/prod/web"
container_name: openproject-web container_name: openproject-web
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-also-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
cache: cache:
condition: service_started condition: service_started
seeder: seeder:
condition: service_started condition: service_started
healthcheck: {% set container_port = 8080 %}
test: ["CMD", "curl", "-f", "http://localhost:8080/health_checks/default"] {% set container_healthcheck = 'health_checks/default' %}
interval: 10s {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
timeout: 3s
retries: 3
start_period: 30s
volumes: volumes:
- "data:/var/openproject/assets" - "data:/var/openproject/assets"
- "{{dummy_volume}}:/var/openproject/pgdata" # This mount is unnecessary and just done to prevent anonymous volumes - "{{dummy_volume}}:/var/openproject/pgdata" # This mount is unnecessary and just done to prevent anonymous volumes
worker: worker:
<<: *app <<: *app
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
command: "./docker/prod/worker" command: "./docker/prod/worker"
container_name: openproject-worker container_name: openproject-worker
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-also-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
cache: cache:
condition: service_started condition: service_started
seeder: seeder:
@ -71,11 +65,11 @@ services:
cron: cron:
<<: *app <<: *app
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
command: "./docker/prod/cron" command: "./docker/prod/cron"
container_name: openproject-cron container_name: openproject-cron
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/container/depends-on-also-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
cache: cache:
condition: service_started condition: service_started
seeder: seeder:
@ -98,7 +92,7 @@ services:
- "data:/var/openproject/assets" - "data:/var/openproject/assets"
- "{{dummy_volume}}:/var/openproject/pgdata" # This mount is unnecessary and just done to prevent anonymous volumes - "{{dummy_volume}}:/var/openproject/pgdata" # This mount is unnecessary and just done to prevent anonymous volumes
{% include 'templates/docker/compose/networks.yml.j2' %}
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
data: data:
{% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -26,4 +26,9 @@ csp:
unsafe-inline: true unsafe-inline: true
domains: domains:
canonical: canonical:
- "project.{{ primary_domain }}" - "project.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -2,7 +2,7 @@ application_id: "openproject"
docker_repository_address: "https://github.com/opf/openproject-deploy" docker_repository_address: "https://github.com/opf/openproject-deploy"
database_type: "postgres" database_type: "postgres"
docker_repository: true docker_repository: true
openproject_plugins_folder: "{{docker_compose.directories.volumes}}plugins/" openproject_plugins_folder: "{{docker_compose.directories.volumes}}plugins/"
custom_openproject_image: "custom_openproject" custom_openproject_image: "custom_openproject"

View File

@ -1,29 +1,22 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
{% set container_port = 9000 %}
image: chocobozzz/peertube:production-{{ applications[application_id].version }} image: chocobozzz/peertube:production-{{ applications[application_id].version }}
container_name: {{ container_name }} container_name: {{ container_name }}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
ports: ports:
- "1935:1935" # @todo Add to ports - "1935:1935" # @todo Add to ports
- "127.0.0.1:{{ports.localhost.http[application_id]}}:9000" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
volumes: volumes:
- assets:/app/client/dist - assets:/app/client/dist
- data:/data - data:/data
- config:/config - config:/config
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
healthcheck: healthcheck:
# This just tests if the service is running on port 9000. It doesn't check if there is an 200 or e.g. an 404 response # This just tests if the service is running on port 9000. It doesn't check if there is an 200 or e.g. an 404 response
test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/localhost/9000 && echo -e 'GET / HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && cat <&3 | grep -q 'HTTP/1.1'"] {% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
interval: 30s
timeout: 10s
retries: 3
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
assets: assets:
data: data:

View File

@ -24,4 +24,10 @@ domains:
canonical: canonical:
- "video.{{ primary_domain }}" - "video.{{ primary_domain }}"
aliases: aliases:
- "videos.{{ primary_domain }}" - "videos.{{ primary_domain }}"
docker:
services:
redis:
enabled: true
database:
enabled: true

View File

@ -1,20 +1,15 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
application: application:
{% set container_port = 80 %}
image: dpage/pgadmin4:{{applications[application_id].version}} image: dpage/pgadmin4:{{applications[application_id].version}}
container_name: pgadmin container_name: pgadmin
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:80"
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
healthcheck: {% include 'roles/docker-container/templates/healthcheck/wget.yml.j2' %}
test: ["CMD", "wget", "--spider", "-q", "http://localhost:80/"]
interval: 30s
timeout: 10s
retries: 3
volumes: volumes:
- "data:/var/lib/pgadmin" - "data:/var/lib/pgadmin"
{% if applications[application_id].server_mode | bool %} {% if applications[application_id].server_mode | bool %}

View File

@ -18,4 +18,8 @@ csp:
unsafe-inline: true unsafe-inline: true
whitelist: whitelist:
font-src: font-src:
- "data:" - "data:"
docker:
services:
database:
enabled: true

View File

@ -1,13 +1,11 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
application: application:
container_name: {{ application_id }} container_name: {{ application_id }}
image: leenooks/phpldapadmin:{{applications[application_id].version}} image: leenooks/phpldapadmin:{{applications[application_id].version}}
ports: ports:
- 127.0.0.1:{{ports.localhost.http[application_id]}}:8080 - 127.0.0.1:{{ports.localhost.http[application_id]}}:8080
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}

View File

@ -1,19 +1,14 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
application: application:
{% set container_port = 80 %}
image: phpmyadmin/phpmyadmin:{{applications.phpmyadmin.version}} image: phpmyadmin/phpmyadmin:{{applications.phpmyadmin.version}}
container_name: phpmyadmin container_name: phpmyadmin
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
healthcheck: {% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/localhost/80 && echo -e 'GET / HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && cat <&3 | grep -q 'HTTP/1.1'"]
interval: 30s
timeout: 10s
retries: 3
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -20,3 +20,7 @@ domains:
aliases: aliases:
- "mysql.{{ primary_domain }}" - "mysql.{{ primary_domain }}"
- "mariadb.{{ primary_domain }}" - "mariadb.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -1,22 +1,18 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
application: application:
image: "{{ applications[application_id].images.pixelfed }}" image: "{{ applications[application_id].images.pixelfed }}"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- "data:/var/www/storage" - "data:/var/www/storage"
- "./env:/var/www/.env" - "./env:/var/www/.env"
ports: ports:
- "{{ports.localhost.http[application_id]}}:80" - "{{ports.localhost.http[application_id]}}:80"
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
worker: worker:
image: "{{ applications[application_id].images.pixelfed }}" image: "{{ applications[application_id].images.pixelfed }}"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- "data:/var/www/storage" - "data:/var/www/storage"
- "./env:/var/www/.env" - "./env:/var/www/.env"
@ -26,7 +22,7 @@ services:
interval: 60s interval: 60s
timeout: 5s timeout: 5s
retries: 1 retries: 1
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
application: application:
condition: service_started condition: service_started
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}

View File

@ -22,4 +22,10 @@ domains:
canonical: canonical:
- "picture.{{ primary_domain }}" - "picture.{{ primary_domain }}"
aliases: aliases:
- "pictures.{{ primary_domain }}" - "pictures.{{ primary_domain }}"
docker:
services:
redis:
enabled: true
database:
enabled: true

View File

@ -1,19 +1,17 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
portfolio: portfolio:
{% set container_port = 5000 %}
build: build:
context: {{docker_repository_path}} context: {{docker_repository_path}}
dockerfile: Dockerfile dockerfile: Dockerfile
image: application-portfolio image: application-portfolio
container_name: portfolio container_name: portfolio
ports: ports:
- 127.0.0.1:{{ports.localhost.http[application_id]}}:5000 - 127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}
volumes: volumes:
- {{docker_repository_path}}app:/app - {{docker_repository_path}}app:/app
restart: unless-stopped restart: unless-stopped
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
healthcheck: {% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/localhost/5000 && echo -e 'GET / HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && cat <&3 | grep -q 'HTTP/1.1'"]
interval: 30s
timeout: 10s
retries: 3
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,4 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
cymais-presentation: cymais-presentation:
build: build:
context: {{ path_cymais_presentation_output.stdout }} context: {{ path_cymais_presentation_output.stdout }}
@ -8,7 +8,7 @@ services:
volumes: volumes:
- {{ path_cymais_presentation_output.stdout }}:/app - {{ path_cymais_presentation_output.stdout }}:/app
- {{ path_cymais_output.stdout }}:/source - {{ path_cymais_output.stdout }}:/source
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,8 +1,10 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
application: application:
container_name: roulette_application container_name: roulette_application
build: build:
context: . context: .
ports: ports:
- 127.0.0.1:{{ports.localhost.http[application_id]}}:8080 - 127.0.0.1:{{ports.localhost.http[application_id]}}:8080
restart: {{docker_restart_policy}} restart: {{docker_restart_policy}}
{% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,4 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
application: application:
build: build:
context: . context: .
@ -7,7 +7,7 @@ services:
container_name: simpleicons-server container_name: simpleicons-server
ports: ports:
- "{{ports.localhost.http[application_id]}}:3000" - "{{ports.localhost.http[application_id]}}:3000"
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,28 +1,18 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'templates/docker/services/redis.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
application: application:
{% set container_port = 80 %}
image: grokability/snipe-it:{{applications[application_id].version}} image: grokability/snipe-it:{{applications[application_id].version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
volumes: volumes:
- data:/var/lib/snipeit - data:/var/lib/snipeit
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
{% include 'templates/docker/container/depends-on-database-redis.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
healthcheck: {% include 'roles/docker-container/templates/healthcheck/tcp.yml.j2' %}
test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/localhost/80 && echo -e 'GET / HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && cat <&3 | grep -q 'HTTP/1.1'"]
interval: 30s
timeout: 10s
retries: 3
{% include 'templates/docker/compose/volumes.yml.j2' %} {% include 'templates/docker/compose/volumes.yml.j2' %}
redis: redis:
data: data:
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -26,4 +26,10 @@ oauth2_proxy:
port: "80" port: "80"
acl: acl:
blacklist: blacklist:
- "/login" - "/login"
docker:
services:
redis:
enabled: true
database:
enabled: true

View File

@ -1,16 +1,13 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
application: application:
{% set container_port = 8008 %}
build: build:
context: {{ path_cymais_sphinx_output.stdout }} context: {{ path_cymais_sphinx_output.stdout }}
dockerfile: {{ path_cymais_sphinx_output.stdout }}/Dockerfile dockerfile: {{ path_cymais_sphinx_output.stdout }}/Dockerfile
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:8000" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
healthcheck: {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
test: ["CMD", "curl", "-f", "http://127.0.0.1:8000"] {% include 'roles/docker-container/templates/base.yml.j2' %}
interval: 1m
timeout: 10s
retries: 3
{% include 'roles/docker-compose/templates/services/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,7 +1,4 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
depends_on: depends_on:
- db - db
@ -9,7 +6,7 @@ services:
ports: ports:
- "18080:8080" - "18080:8080"
restart: always restart: always
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
environment: environment:
SPRING_PROFILES_ACTIVE: docker,postgresql,saml2 SPRING_PROFILES_ACTIVE: docker,postgresql,saml2
OPENJPA_REMOTE_COMMIT: sjvm OPENJPA_REMOTE_COMMIT: sjvm
@ -37,4 +34,5 @@ services:
environment: environment:
SPRING_PROFILES_ACTIVE: docker,saml2 SPRING_PROFILES_ACTIVE: docker,saml2
SERVICE_DISCOVERY_ADDRESS: {{ domains | get_url(application_id, web_protocol) }}/{{syncope_paths[enduser]}}/ SERVICE_DISCOVERY_ADDRESS: {{ domains | get_url(application_id, web_protocol) }}/{{syncope_paths[enduser]}}/
{% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -3,7 +3,7 @@ services:
image: taigaio/taiga-back:latest image: taigaio/taiga-back:latest
environment: environment:
CELERY_ENABLED: "False" CELERY_ENABLED: "False"
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
entrypoint: "python manage.py" entrypoint: "python manage.py"
volumes: volumes:

View File

@ -1,7 +1,7 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
taiga-back: taiga-back:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: {{taiga_image_backend}}:{{applications.taiga.version}} image: {{taiga_image_backend}}:{{applications.taiga.version}}
volumes: volumes:
# These volumens will be used by taiga-back and taiga-async. # These volumens will be used by taiga-back and taiga-async.
@ -17,7 +17,7 @@ services:
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
taiga: taiga:
{% include 'templates/docker/container/depends-on-also-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
taiga-events-rabbitmq: taiga-events-rabbitmq:
condition: service_started condition: service_started
taiga-async-rabbitmq: taiga-async-rabbitmq:
@ -33,7 +33,7 @@ services:
taiga-async: taiga-async:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: {{taiga_image_backend}}:{{applications.taiga.version}} image: {{taiga_image_backend}}:{{applications.taiga.version}}
entrypoint: ["/taiga-back/docker/async_entrypoint.sh"] entrypoint: ["/taiga-back/docker/async_entrypoint.sh"]
volumes: volumes:
@ -52,7 +52,7 @@ services:
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
taiga: taiga:
{% include 'templates/docker/container/depends-on-also-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
taiga-events-rabbitmq: taiga-events-rabbitmq:
condition: service_started condition: service_started
taiga-async-rabbitmq: taiga-async-rabbitmq:
@ -71,13 +71,13 @@ services:
hostname: "taiga-async-rabbitmq" hostname: "taiga-async-rabbitmq"
volumes: volumes:
- async-rabbitmq-data:/var/lib/rabbitmq - async-rabbitmq-data:/var/lib/rabbitmq
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
taiga: taiga:
taiga-front: taiga-front:
image: {{taiga_image_frontend}}:{{applications.taiga.version}} image: {{taiga_image_frontend}}:{{applications.taiga.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
taiga: taiga:
# volumes: # volumes:
@ -85,7 +85,7 @@ services:
taiga-events: taiga-events:
image: taigaio/taiga-events:latest image: taigaio/taiga-events:latest
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
taiga: taiga:
depends_on: depends_on:
@ -97,14 +97,14 @@ services:
hostname: "events-rabbitmq" hostname: "events-rabbitmq"
volumes: volumes:
- events-rabbitmq-data:/var/lib/rabbitmq - events-rabbitmq-data:/var/lib/rabbitmq
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
taiga: taiga:
taiga-protected: taiga-protected:
image: taigaio/taiga-protected:latest image: taigaio/taiga-protected:latest
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
taiga: taiga:
@ -117,7 +117,7 @@ services:
- {{docker_repository_path}}taiga-gateway/taiga.conf:/etc/nginx/conf.d/default.conf - {{docker_repository_path}}taiga-gateway/taiga.conf:/etc/nginx/conf.d/default.conf
- static-data:/taiga/static - static-data:/taiga/static
- media-data:/taiga/media - media-data:/taiga/media
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
taiga: taiga:
@ -133,4 +133,4 @@ services:
events-rabbitmq-data: events-rabbitmq-data:
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}
taiga: taiga:

View File

@ -12,7 +12,10 @@ features:
portfolio_iframe: false portfolio_iframe: false
oidc: false oidc: false
central_database: true central_database: true
docker:
services:
database:
enabled: true
csp: csp:
flags: flags:
script-src-elem: script-src-elem:
@ -21,7 +24,7 @@ csp:
style-src: style-src:
unsafe-inline: true unsafe-inline: true
script-src: script-src:
unsafe-eval: true unsafe-eval: true
domains: domains:
canonical: canonical:
- "kanban.{{ primary_domain }}" - "kanban.{{ primary_domain }}"

View File

@ -1,9 +1,6 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
application: application:
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
image: {{wordpress_custom_image}} image: {{wordpress_custom_image}}
container_name: wordpress-application container_name: wordpress-application
build: build:
@ -13,9 +10,8 @@ services:
volumes: volumes:
- data:{{ wordpress_docker_html_path }} - data:{{ wordpress_docker_html_path }}
{% include 'roles/docker-compose/templates/services/msmtp_curl_test.yml.j2' %} {% include 'roles/docker-container/templates/healthcheck/msmtp_curl.yml.j2' %}
{% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -39,6 +39,10 @@ csp:
domains: domains:
canonical: canonical:
- "blog.{{ primary_domain }}" - "blog.{{ primary_domain }}"
docker:
services:
database:
enabled: true
rbac: rbac:
roles: roles:
subscriber: subscriber:

View File

@ -1,22 +1,17 @@
services: {% include 'roles/docker-compose/templates/base.yml.j2' %}
{% include 'roles/docker-central-database/templates/services/' + database_type + '.yml.j2' %}
{% include 'roles/docker-oauth2-proxy/templates/container.yml.j2' %}
application: application:
{% set container_port = 80 %}
{% set container_healthcheck = 'http://127.0.0.1/admin/' %}
image: yourls:{{applications.yourls.version}} image: yourls:{{applications.yourls.version}}
{% include 'roles/docker-compose/templates/services/base.yml.j2' %} {% include 'roles/docker-container/templates/base.yml.j2' %}
ports: ports:
- "127.0.0.1:{{ports.localhost.http[application_id]}}:80" - "127.0.0.1:{{ports.localhost.http[application_id]}}:{{ container_port }}"
healthcheck: {% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
test: ["CMD", "curl", "-f", "http://127.0.0.1/admin/"]
interval: 1m
timeout: 10s
retries: 3
{% include 'templates/docker/container/depends-on-just-database.yml.j2' %} {% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
{% include 'templates/docker/compose/volumes-just-database.yml.j2' %} {% include 'templates/docker/compose/volumes-just-database.yml.j2' %}
{% include 'templates/docker/compose/networks.yml.j2' %} {% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -17,4 +17,8 @@ domains:
canonical: canonical:
- "s.{{ primary_domain }}" - "s.{{ primary_domain }}"
aliases: aliases:
- "short.{{ primary_domain }}" - "short.{{ primary_domain }}"
docker:
services:
database:
enabled: true

View File

@ -1,7 +0,0 @@
{# This template needs to be included in docker-compose.yml containers which depend on a database and additional containers #}
depends_on:
{% if not applications | is_feature_enabled('central_database',application_id) %}
database:
condition: service_healthy
{% endif %}
{{ "\n" }}

View File

@ -1,9 +0,0 @@
{# This template needs to be included in docker-compose.yml containers, which depend on a database, redis and optional additional volumes #}
depends_on:
{% if not applications | is_feature_enabled('central_database',application_id) %}
database:
condition: service_healthy
{% endif %}
redis:
condition: service_healthy
{{ "\n" }}

View File

@ -1,7 +0,0 @@
{# This template needs to be included in docker-compose.yml containers, which just depend on a database #}
{% if not applications | is_feature_enabled('central_database',application_id) %}
depends_on:
database:
condition: service_healthy
{% endif %}
{{ "\n" }}

View File

@ -1,19 +1,21 @@
services: services:
portfolio:
build: {% include 'roles/docker-central-database/templates/services/main.yml.j2' %}
context: {{docker_repository_path}}
dockerfile: Dockerfile application:
image: application-portfolio image: "{{ applications[application_id].images[application_id] }}"
container_name: portfolio
ports:
- 127.0.0.1:{{ports.localhost.http[application_id]}}:5000
volumes: volumes:
- {{docker_repository_path}}app:/app - uploads:/var/lib/mobilizon/uploads
restart: unless-stopped - {{ mobilizon_host_conf_exs_file }}:/etc/mobilizon/config.exs:ro
ports:
- "127.0.0.1:{{ ports.localhost.http[application_id] }}:{{ container_port }}"
{% include 'roles/docker-container/templates/healthcheck/curl.yml.j2' %}
{% include 'roles/docker-container/templates/base.yml.j2' %}
{% include 'roles/docker-container/templates/depends_on_dmbs.j2' %}
{% include 'templates/docker/container/networks.yml.j2' %} {% include 'templates/docker/container/networks.yml.j2' %}
healthcheck:
test: ["CMD", "bash", "-c", "exec 3<>/dev/tcp/localhost/5000 && echo -e 'GET / HTTP/1.1\\r\\nHost: localhost\\r\\nConnection: close\\r\\n\\r\\n' >&3 && cat <&3 | grep -q 'HTTP/1.1'"] {% include 'templates/docker/compose/volumes.yml.j2' %}
interval: 30s uploads:
timeout: 10s
retries: 3 {% include 'templates/docker/compose/networks.yml.j2' %}
{% include 'templates/docker/compose/networks.yml.j2' %}

View File

@ -1,7 +1,10 @@
credentials: credentials:
docker: docker:
images: {} images: {} # @todo Move under services
versions: {} versions: {} # @todo Move under services
services:
redis:
enabled: false # Enable Redis
features: features:
matomo: true # Enable Matomo Tracking matomo: true # Enable Matomo Tracking
css: true # Enable Global CSS Styling css: true # Enable Global CSS Styling
@ -16,4 +19,8 @@ csp:
domains: domains:
canonical: [] # Urls under which the domain should be directly accessible canonical: [] # Urls under which the domain should be directly accessible
alias: [] # Alias redirections to the first element of the canonical domains alias: [] # Alias redirections to the first element of the canonical domains
rbac:
roles:
mail-bot:
description: "Has an token to send and recieve emails"

View File

@ -11,7 +11,7 @@ class TestApplicationIdConsistency(unittest.TestCase):
failed_roles = [] failed_roles = []
for role_path in ROLES_DIR.iterdir(): for role_path in ROLES_DIR.iterdir():
if role_path.name in ["docker-compose", "docker-central-database", "docker-repository-setup"]: if role_path.name in ["docker-container","docker-compose", "docker-central-database", "docker-repository-setup"]:
continue continue
if role_path.is_dir() and role_path.name.startswith("docker-"): if role_path.is_dir() and role_path.name.startswith("docker-"):

View File

@ -0,0 +1,43 @@
import unittest
from pathlib import Path
import yaml
class TestConfigurationDatabaseDependency(unittest.TestCase):
# Define project root and glob pattern for configuration files
PROJECT_ROOT = Path(__file__).resolve().parents[2]
CONFIG_PATTERN = 'roles/*/vars/configuration.yml'
def test_central_database_implies_database_service_enabled(self):
"""
For each roles/*/vars/configuration.yml:
If features.central_database is true,
then docker.services.database.enabled must be true.
"""
config_paths = sorted(self.PROJECT_ROOT.glob(self.CONFIG_PATTERN))
self.assertTrue(config_paths, f"No configuration files found for pattern {self.CONFIG_PATTERN}")
for config_path in config_paths:
with self.subTest(configuration=config_path):
content = yaml.safe_load(config_path.read_text(encoding='utf-8')) or {}
# Read central_database flag
features = content.get('features', {})
central_db = features.get('central_database', False)
# Read database enabled flag
docker = content.get('docker', {})
services = docker.get('services', {})
database = services.get('database', {})
db_enabled = database.get('enabled', False)
if central_db:
self.assertTrue(
db_enabled,
f"{config_path}: features.central_database is true but docker.services.database.enabled is not true"
)
else:
# No requirement when central_database is false or absent
self.assertTrue(True)
if __name__ == '__main__':
unittest.main()

Some files were not shown because too many files have changed in this diff Show More