{% include 'roles/sys-svc-compose/templates/base.yml.j2' %} {% if DEPLOYMENT_MODE == 'compose' %} {% set service_name = ZAMMAD_PRECHECK_SERVICE %} {% set docker_restart_policy = 'no' %} {{ service_name }}: {{ lookup('container_image', application_id, 'zammad') }} {{ lookup('compose_only', 'container_name', ZAMMAD_PRECHECK_CONTAINER) }} {% include 'roles/sys-svc-container/templates/base.yml.j2' %} command: ["{{ ZAMMAD_SEARCH_PRECHECK_TARGET }}", "{{ ZAMMAD_SEARCH_READY_SECONDS }}", "{{ ZAMMAD_SEARCH_POLL_SECONDS }}", "{{ ZAMMAD_SEARCH_ALLOCATION_TIMEOUT_SECONDS }}", "true"] {{ lookup('depends_on', {ZAMMAD_SEARCH_SERVICE: 'service_started'}, indent=4) }} {{ lookup('container_volumes', service_name) | indent(4) }} {{ lookup('container_extra_hosts') | indent(4) }} {{ lookup('container_networks') | indent(4) }} {% endif %} {% set service_name = ZAMMAD_INIT_SERVICE %} {% set docker_restart_policy = 'on-failure' %} {{ service_name }}: {{ lookup('container_image', application_id, 'zammad') }} {{ lookup('compose_only', 'container_name', ZAMMAD_INIT_CONTAINER) }} {% include 'roles/sys-svc-container/templates/base.yml.j2' %} command: ["{{ ZAMMAD_SEARCH_PRECHECK_TARGET }}", "{{ ZAMMAD_SEARCH_READY_SECONDS }}", "{{ ZAMMAD_SEARCH_POLL_SECONDS }}", "{{ ZAMMAD_SEARCH_ALLOCATION_TIMEOUT_SECONDS }}", "/opt/zammad/bin/docker-entrypoint", "zammad-init"] {{ lookup('container_volumes', service_name) | indent(4) }} {{ lookup('container_depends_on', application_id, extra=({ ZAMMAD_PRECHECK_SERVICE: {'condition': 'service_completed_successfully'}, } if DEPLOYMENT_MODE == 'compose' else {})) | indent(4) }} {{ lookup('container_extra_hosts') | indent(4) }} {{ lookup('container_networks') | indent(4) }} {% set service_name = ZAMMAD_RAILS_SERVICE %} {{ service_name }}: {{ lookup('container_image', application_id, 'zammad') }} {{ lookup('container_healthcheck', service_name) | indent(4) }} {{ lookup('compose_only', 'container_name', ZAMMAD_RAILS_CONTAINER) }} {% include 'roles/sys-svc-container/templates/base.yml.j2' %} command: ["zammad-railsserver"] {{ lookup('depends_on', {ZAMMAD_INIT_SERVICE: 'service_completed_successfully'}, indent=4) }} {{ lookup('container_volumes', service_name) | indent(4) }} {{ lookup('container_extra_hosts') | indent(4) }} {{ lookup('container_networks') | indent(4) }} {% set service_name = ZAMMAD_WEBSOCKET_SERVICE %} {{ service_name }}: {{ lookup('container_image', application_id, 'zammad') }} {{ lookup('compose_only', 'container_name', ZAMMAD_WEBSOCKET_CONTAINER) }} {% include 'roles/sys-svc-container/templates/base.yml.j2' %} command: ["zammad-websocket"] {{ lookup('depends_on', {ZAMMAD_RAILS_SERVICE: 'service_started'}, indent=4) }} {{ lookup('container_volumes', service_name) | indent(4) }} {{ lookup('container_extra_hosts') | indent(4) }} {{ lookup('container_networks') | indent(4) }} {% set service_name = ZAMMAD_SCHEDULER_SERVICE %} {{ service_name }}: {{ lookup('container_image', application_id, 'zammad') }} {{ lookup('compose_only', 'container_name', ZAMMAD_SCHEDULER_CONTAINER) }} {% include 'roles/sys-svc-container/templates/base.yml.j2' %} command: ["zammad-scheduler"] {{ lookup('depends_on', {ZAMMAD_RAILS_SERVICE: 'service_started'}, indent=4) }} {{ lookup('container_volumes', service_name) | indent(4) }} {{ lookup('container_extra_hosts') | indent(4) }} {{ lookup('container_networks') | indent(4) }} {% set service_name = ZAMMAD_SEARCH_SERVICE %} {{ service_name }}: {{ lookup('container_image', application_id, 'search') }} {{ lookup('compose_only', 'container_name', ZAMMAD_SEARCH_CONTAINER) }} {% include 'roles/sys-svc-container/templates/base.yml.j2' %} environment: - discovery.type=single-node - xpack.security.enabled=false - ES_JAVA_OPTS=-Xms{{ ZAMMAD_SEARCH_HEAP_MB }}m -Xmx{{ ZAMMAD_SEARCH_HEAP_MB }}m - path.data={{ ZAMMAD_SEARCH_DATA_DIR }} - cluster.routing.allocation.disk.watermark.low={{ ZAMMAD_SEARCH_WATERMARK.low }} - cluster.routing.allocation.disk.watermark.high={{ ZAMMAD_SEARCH_WATERMARK.high }} - cluster.routing.allocation.disk.watermark.flood_stage={{ ZAMMAD_SEARCH_WATERMARK.flood_stage }} - cluster.routing.allocation.disk.watermark.low.max_headroom={{ ZAMMAD_SEARCH_WATERMARK.max_headroom.low }} - cluster.routing.allocation.disk.watermark.high.max_headroom={{ ZAMMAD_SEARCH_WATERMARK.max_headroom.high }} - cluster.routing.allocation.disk.watermark.flood_stage.max_headroom={{ ZAMMAD_SEARCH_WATERMARK.max_headroom.flood_stage }} {{ lookup('container_volumes', service_name) | indent(4) }} {{ lookup('container_extra_hosts') | indent(4) }} {{ lookup('container_networks') | indent(4) }} {% if not (lookup('engine', 'memcached', application_id, 'shared') | bool) %} {% set service_name = ZAMMAD_MEMCACHED_SERVICE %} {{ service_name }}: {{ lookup('container_image', 'svc-db-memcached', 'memcached') }} {{ lookup('compose_only', 'container_name', ZAMMAD_MEMCACHED_CONTAINER) }} {% include 'roles/sys-svc-container/templates/base.yml.j2' %} command: ["memcached", "-m", "{{ lookup('service_memory_mb', application_id, service_name, 0.125) }}"] {{ lookup('container_extra_hosts') | indent(4) }} {{ lookup('container_networks') | indent(4) }} {% endif %} {% set service_name = ZAMMAD_NGINX_SERVICE %} {{ service_name }}: {{ lookup('container_image', application_id, 'zammad') }} {{ lookup('compose_only', 'container_name', ZAMMAD_NGINX_CONTAINER) }} {% include 'roles/sys-svc-container/templates/base.yml.j2' %} command: - sh - -c - | cp /docker-entrypoint.sh /tmp/entrypoint-patched.sh sed -i 's|grep "nameserver" < /etc/resolv.conf|grep -E "^nameserver" /etc/resolv.conf|' /tmp/entrypoint-patched.sh exec /tmp/entrypoint-patched.sh zammad-nginx {{ lookup('depends_on', {ZAMMAD_RAILS_SERVICE: 'service_started', ZAMMAD_WEBSOCKET_SERVICE: 'service_started'}, indent=4) }} {{ lookup('container_ports', ['zammad', 'http', DOCKER_BIND_HOST]) | indent(4) }} {{ lookup('container_volumes', service_name) | indent(4) }} {{ lookup('container_extra_hosts') | indent(4) }} {{ lookup('container_networks') | indent(4) }} {% if ZAMMAD_MCP_ENABLED | bool %} {% set service_name = ZAMMAD_MCP_SERVICE_KEY %} {{ service_name }}: {% include 'roles/sys-svc-container/templates/base.yml.j2' %} {{ lookup('container_image', application_id, 'zammadmcp') }} build: context: {{ ZAMMAD_MCP_INSTANCE_DIR }} dockerfile: Dockerfile args: MCP_ADAPTER_BASE_IMAGE: {{ lookup('config', application_id, 'services.zammadmcp.image') }} MCP_ADAPTER_BASE_VERSION: "{{ lookup('config', application_id, 'services.zammadmcp.version') }}" {{ lookup('compose_only', 'container_name', ZAMMAD_MCP_CONTAINER) }} read_only: true cap_drop: - ALL security_opt: - no-new-privileges:true environment: ADAPTER_CONTRACT: {{ ZAMMAD_MCP_CONTRACT | to_json | to_json | replace('$', '$$') }} ADAPTER_BEARER: {{ ZAMMAD_MCP_BEARER | to_json }} ADAPTER_PORT: "{{ ZAMMAD_MCP_PORT }}" ADAPTER_UPSTREAM_KEY: {{ ZAMMAD_MCP_UPSTREAM_KEY | to_json }} ADAPTER_UPSTREAM_AUTH_HEADER: {{ ZAMMAD_MCP_UPSTREAM_AUTH_HEADER | to_json }} ADAPTER_UPSTREAM_AUTH_FORMAT: {{ ZAMMAD_MCP_UPSTREAM_AUTH_FORMAT | to_json }} expose: - "{{ ZAMMAD_MCP_PORT }}" {{ lookup('container_networks', own_network_only=True, provider_self_alias=False) | indent(4) }} {% endif %} {{ lookup('compose_volumes') }} {{ lookup('compose_networks') }}