Skip to content

Commit 032e6c0

Browse files
committed
feat(zammad): use x-shared section
An x-shared section was added to the stack.yml file, similar as in the original docker-compose yaml file to reuse environment settings etc. in several Zammad services.
1 parent 4a73d7e commit 032e6c0

File tree

1 file changed

+152
-159
lines changed

1 file changed

+152
-159
lines changed

src/development/stack.yml

Lines changed: 152 additions & 159 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
# Vibetype
44
# https://github.com/maevsi/vibetype/
55
---
6+
7+
#version: "3.7"
8+
69
secrets:
710
grafana_admin_email:
811
# The observation dashboard's admin email.
@@ -100,6 +103,69 @@ secrets:
100103
vibetype_turnstile-key:
101104
# The captcha provider's application key.
102105
file: ./secrets/vibetype/turnstile-key.secret
106+
107+
x-shared:
108+
zammad-service: &zammad-service
109+
# shared environment, image, volumes
110+
environment: &zammad-environment
111+
MEMCACHE_SERVERS: ${MEMCACHE_SERVERS:-zammad-memcached:11211}
112+
POSTGRESQL_DB: zammad
113+
POSTGRESQL_HOST: postgres
114+
POSTGRESQL_USER: zammad
115+
POSTGRESQL_PASS: zammad
116+
POSTGRESQL_PORT: 5432
117+
POSTGRESQL_OPTIONS: ${POSTGRESQL_OPTIONS:-?pool=50}
118+
POSTGRESQL_DB_CREATE: "false"
119+
REDIS_URL: ${REDIS_URL:-redis://zammad-redis:6379}
120+
S3_URL:
121+
# Backup settings
122+
BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}"
123+
BACKUP_TIME: "${BACKUP_TIME:-03:00}"
124+
HOLD_DAYS: "${HOLD_DAYS:-10}"
125+
TZ: "${TZ:-Europe/Berlin}"
126+
# Allow passing in these variables via .env:
127+
AUTOWIZARD_JSON:
128+
AUTOWIZARD_RELATIVE_PATH:
129+
ELASTICSEARCH_ENABLED:
130+
ELASTICSEARCH_SCHEMA:
131+
ELASTICSEARCH_HOST:
132+
ELASTICSEARCH_PORT:
133+
ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-elastic}
134+
ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-zammad}
135+
ELASTICSEARCH_NAMESPACE:
136+
ELASTICSEARCH_REINDEX:
137+
NGINX_PORT: 8080
138+
NGINX_CLIENT_MAX_BODY_SIZE:
139+
NGINX_SERVER_NAME: zammad.${STACK_DOMAIN}
140+
NGINX_SERVER_SCHEME: https
141+
RAILS_TRUSTED_PROXIES:
142+
ZAMMAD_HTTP_TYPE:
143+
ZAMMAD_FQDN:
144+
ZAMMAD_WEB_CONCURRENCY:
145+
ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS:
146+
ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS:
147+
ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS:
148+
ZAMMAD_RAILSSERVER_HOST: zammad-railsserver
149+
ZAMMAD_WEBSOCKET_HOST: zammad-websocket
150+
# ZAMMAD_SESSION_JOBS_CONCURRENT is deprecated, please use ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS instead.
151+
ZAMMAD_SESSION_JOBS_CONCURRENT:
152+
# Variables used by ngingx-proxy container for reverse proxy creations
153+
# for docs refer to https://github.com/nginx-proxy/nginx-proxy
154+
VIRTUAL_HOST:
155+
VIRTUAL_PORT:
156+
# Variables used by acme-companion for retrieval of LetsEncrypt certificate
157+
# for docs refer to https://github.com/nginx-proxy/acme-companion
158+
LETSENCRYPT_HOST:
159+
LETSENCRYPT_EMAIL:
160+
161+
image: ${IMAGE_REPO:-ghcr.io/zammad/zammad}:${VERSION:-6.5.0-89}
162+
volumes:
163+
- zammad-storage:/opt/zammad/storage
164+
depends_on:
165+
- zammad-memcached
166+
- postgresql
167+
- zammad-redis
168+
103169
services:
104170
adminer:
105171
# You can access the database's frontend at [adminer.localhost](https://adminer.localhost/).
@@ -375,161 +441,6 @@ services:
375441
volumes:
376442
- ../../../reccoom/:/srv/app/
377443

378-
zammad-elasticsearch:
379-
image: bitnami/elasticsearch:${ELASTICSEARCH_VERSION:-8.18.0}
380-
restart: always
381-
volumes:
382-
- zammad_elasticsearch_data:/usr/share/elasticsearch/data
383-
environment:
384-
- discovery.type=single-node
385-
386-
zammad-init:
387-
image: zammad/zammad-docker-compose:latest
388-
restart: on-failure
389-
depends_on:
390-
- postgres
391-
- zammad-elasticsearch
392-
volumes:
393-
- zammad_storage:/opt/zammad/storage
394-
environment:
395-
- POSTGRESQL_DB_CREATE=false
396-
- POSTGRESQL_HOST=postgres
397-
- POSTGRESQL_USER_FILE=/run/secrets/POSTGRESQL_USER
398-
- POSTGRESQL_PASS_FILE=/run/secrets/POSTGRESQL_PASS
399-
- POSTGRESQL_DB=zammad
400-
- ELASTICSEARCH_HOST=zammad-elasticsearch
401-
- ELASTICSEARCH_PORT=9200
402-
- ZAMMAD_RAILSSERVER_HOST=zammad-railsserver
403-
- ZAMMAD_WEBSOCKET_HOST=zammad-websocket
404-
- NGINX_SERVER_NAME=zammad.${STACK_DOMAIN}
405-
- REDIS_URL=redis://zammad-redis:6379
406-
secrets:
407-
- source: postgres_role_service_zammad_username
408-
target: POSTGRESQL_USER
409-
- source: postgres_role_service_zammad_password
410-
target: POSTGRESQL_PASS
411-
command: ["zammad-init"]
412-
413-
zammad-railsserver:
414-
image: zammad/zammad-docker-compose:latest
415-
restart: always
416-
depends_on:
417-
- zammad-init
418-
environment:
419-
- POSTGRESQL_HOST=postgres
420-
- POSTGRESQL_USER_FILE=/run/secrets/POSTGRESQL_USER
421-
- POSTGRESQL_PASS_FILE=/run/secrets/POSTGRESQL_PASS
422-
- POSTGRESQL_DB=zammad
423-
- ELASTICSEARCH_HOST=zammad-elasticsearch
424-
- ELASTICSEARCH_PORT=9200
425-
- ZAMMAD_RAILSSERVER_HOST=zammad-railsserver
426-
- ZAMMAD_WEBSOCKET_HOST=zammad-websocket
427-
- REDIS_URL=redis://zammad-redis:6379
428-
secrets:
429-
- source: postgres_role_service_zammad_username
430-
target: POSTGRESQL_USER
431-
- source: postgres_role_service_zammad_password
432-
target: POSTGRESQL_PASS
433-
volumes:
434-
- zammad_storage:/opt/zammad/storage
435-
deploy:
436-
labels:
437-
- traefik.enable=true
438-
- traefik.http.routers.zammad-railsserver.entryPoints=web
439-
- traefik.http.routers.zammad-railsserver.middlewares=redirectscheme
440-
- traefik.http.routers.zammad-railsserver.rule=Host(`zammad.${STACK_DOMAIN}`) && PathPrefix(`/api`)
441-
- traefik.http.routers.zammad-railsserver_secure.entryPoints=web-secure
442-
- traefik.http.routers.zammad-railsserver_secure.rule=Host(`zammad.${STACK_DOMAIN}`) && PathPrefix(`/api`)
443-
- traefik.http.routers.zammad-railsserver_secure.tls.options=mintls13@file
444-
- traefik.http.services.zammad-railsserver.loadbalancer.server.port=3000
445-
command: ["zammad-railsserver"]
446-
447-
zammad-scheduler:
448-
image: zammad/zammad-docker-compose:latest
449-
restart: always
450-
depends_on:
451-
- zammad-init
452-
environment:
453-
- POSTGRESQL_HOST=postgres
454-
- POSTGRESQL_USER_FILE=/run/secrets/POSTGRESQL_USER
455-
- POSTGRESQL_PASS_FILE=/run/secrets/POSTGRESQL_PASS
456-
- POSTGRESQL_DB=zammad
457-
- ELASTICSEARCH_HOST=zammad-elasticsearch
458-
- ELASTICSEARCH_PORT=9200
459-
- ZAMMAD_RAILSSERVER_HOST=zammad-railsserver
460-
- ZAMMAD_WEBSOCKET_HOST=zammad-websocket
461-
- REDIS_URL=redis://zammad-redis:6379
462-
463-
secrets:
464-
- source: postgres_role_service_zammad_username
465-
target: POSTGRESQL_USER
466-
- source: postgres_role_service_zammad_password
467-
target: POSTGRESQL_PASS
468-
command: ["zammad-scheduler"]
469-
470-
zammad-redis:
471-
image: redis:7-alpine
472-
restart: always
473-
474-
zammad-websocket:
475-
image: zammad/zammad-docker-compose:latest
476-
restart: always
477-
depends_on:
478-
- zammad-init
479-
environment:
480-
- POSTGRESQL_HOST=postgres
481-
- POSTGRESQL_USER_FILE=/run/secrets/POSTGRESQL_USER
482-
- POSTGRESQL_PASS_FILE=/run/secrets/POSTGRESQL_PASS
483-
- POSTGRESQL_DB=zammad
484-
- ELASTICSEARCH_HOST=zammad-elasticsearch
485-
- ELASTICSEARCH_PORT=9200
486-
- ZAMMAD_RAILSSERVER_HOST=zammad-railsserver
487-
- ZAMMAD_WEBSOCKET_HOST=zammad-websocket
488-
- REDIS_URL=redis://zammad-redis:6379
489-
secrets:
490-
- source: postgres_role_service_zammad_username
491-
target: POSTGRESQL_USER
492-
- source: postgres_role_service_zammad_password
493-
target: POSTGRESQL_PASS
494-
command: ["zammad-websocket"]
495-
deploy:
496-
labels:
497-
- traefik.enable=true
498-
- traefik.http.routers.zammad-websocket.entryPoints=web
499-
- traefik.http.routers.zammad-websocket.middlewares=redirectscheme
500-
- traefik.http.routers.zammad-websocket.rule=Host(`zammad.${STACK_DOMAIN}`) && PathPrefix(`/ws`)
501-
- traefik.http.routers.zammad-websocket_secure.entryPoints=web-secure
502-
- traefik.http.routers.zammad-websocket_secure.rule=Host(`zammad.${STACK_DOMAIN}`) && PathPrefix(`/ws`)
503-
- traefik.http.routers.zammad-websocket_secure.tls.options=mintls13@file
504-
- traefik.http.services.zammad-websocket.loadbalancer.server.port=6042
505-
506-
zammad-nginx:
507-
image: zammad/zammad-docker-compose:latest
508-
restart: always
509-
depends_on:
510-
- zammad-init
511-
- zammad-railsserver
512-
- zammad-websocket
513-
environment:
514-
- NGINX_SERVER_NAME=zammad.${STACK_DOMAIN}
515-
- REDIS_URL=redis://zammad-redis:6379
516-
volumes:
517-
- zammad_storage:/opt/zammad/storage
518-
519-
deploy:
520-
labels:
521-
- traefik.enable=true
522-
- traefik.http.routers.zammad.rule=Host(`zammad.${STACK_DOMAIN}`)
523-
- traefik.http.routers.zammad.entryPoints=web
524-
- traefik.http.routers.zammad.middlewares=redirectscheme
525-
- traefik.http.routers.zammad_secure.rule=Host(`zammad.${STACK_DOMAIN}`)
526-
- traefik.http.routers.zammad_secure.entryPoints=web-secure
527-
- traefik.http.routers.zammad_secure.tls=true
528-
- traefik.http.routers.zammad_secure.tls.options=mintls13@file
529-
- traefik.http.services.zammad.loadbalancer.server.port=80
530-
command: ["zammad-nginx"]
531-
command: ["sh", "-c", "sleep 60 && zammad-nginx"]
532-
533444
redpanda:
534445
# You can access the event streaming platform's ui as described under `redpanda-console`.
535446
command:
@@ -709,8 +620,80 @@ services:
709620
- ${PNPM_STORE_DIR}:/srv/.pnpm-store/ #DARGSTACK-REMOVE
710621
- ./certificates/:/srv/certificates/ #DARGSTACK-REMOVE
711622
- ../../../vibetype/:/srv/app/ #DARGSTACK-REMOVE
712-
- ./configurations/postgraphile/jwtRS256.key.pub:/run/environment-variables/NUXT_PUBLIC_VIO_AUTH_JWT_PUBLIC_KEY:ro
713-
version: "3.7"
623+
- ./configurations/postgraphile/jwtRS256.key.pub:/run/environment-variables/NUXT_PUB1LIC_VIO_AUTH_JWT_PUBLIC_KEY:ro
624+
625+
zammad-backup:
626+
# Zammad backup.
627+
<<: *zammad-service
628+
command: ["zammad-backup"]
629+
volumes:
630+
- zammad-backup:/var/tmp/zammad
631+
- zammad-storage:/opt/zammad/storage:ro
632+
user: 0:0
633+
634+
zammad-elasticsearch:
635+
# Zammad Elastisearch.
636+
image: bitnami/elasticsearch:${ELASTICSEARCH_VERSION:-8.18.0}
637+
volumes:
638+
- zammad-elasticsearch-data:/bitnami/elasticsearch/data
639+
environment:
640+
# Enable authorization without HTTPS. For external access with
641+
# SSL termination, use solutions like nginx-proxy-manager.
642+
ELASTICSEARCH_ENABLE_SECURITY: 'true'
643+
ELASTICSEARCH_SKIP_TRANSPORT_TLS: 'true'
644+
ELASTICSEARCH_ENABLE_REST_TLS: 'false'
645+
# ELASTICSEARCH_USER is hardcoded to 'elastic' in the container.
646+
ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASS:-zammad}
647+
648+
zammad-init:
649+
# Zammad initialization.
650+
<<: *zammad-service
651+
command: ["zammad-init"]
652+
depends_on:
653+
- postgresql
654+
user: 0:0
655+
656+
zammad-memcached:
657+
# Zammad memcached.
658+
command: memcached -m 256M
659+
image: memcached:${MEMCACHE_VERSION:-1.6.38-alpine}
660+
661+
zammad-nginx:
662+
# You can access the Zammad frontend at [zammad.localhost](https://zammad.localhost/).
663+
<<: *zammad-service
664+
deploy:
665+
labels:
666+
- traefik.enable=true
667+
- traefik.http.routers.zammad.entryPoints=web
668+
- traefik.http.routers.zammad.middlewares=redirectscheme #DARGSTACK-REMOVE
669+
- traefik.http.routers.zammad.rule=Host(`zammad.${STACK_DOMAIN}`)
670+
- traefik.http.routers.zammad_secure.entryPoints=web-secure
671+
- traefik.http.routers.zammad_secure.rule=Host(`zammad.${STACK_DOMAIN}`)
672+
- traefik.http.routers.zammad_secure.tls.options=mintls13@file #DARGSTACK-REMOVE
673+
- traefik.http.services.zammad.loadbalancer.server.port=8080
674+
command: ["zammad-nginx"]
675+
676+
zammad-railsserver:
677+
# Zammad railsserver.
678+
<<: *zammad-service
679+
command: ["zammad-railsserver"]
680+
681+
zammad-redis:
682+
# Zammad redis.
683+
image: redis:${REDIS_VERSION:-7.4.3-alpine}
684+
volumes:
685+
- zammad-redis-data:/data
686+
687+
zammad-scheduler:
688+
# Zammad scheduler.
689+
<<: *zammad-service
690+
command: ["zammad-scheduler"]
691+
692+
zammad-websocket:
693+
# Zammad websocket.
694+
<<: *zammad-service
695+
command: ["zammad-websocket"]
696+
714697
volumes:
715698
debezium_kafka_configuration:
716699
# The change data capture's configuration.
@@ -739,5 +722,15 @@ volumes:
739722
redpanda_data:
740723
# The message queue's data.
741724
{}
742-
zammad_elasticsearch_data: {}
743-
zammad_storage: {}
725+
zammad-elasticsearch-data:
726+
# Zammad's elastisearch data
727+
{}
728+
zammad-redis-data:
729+
# Zammad's redis data
730+
{}
731+
zammad-backup:
732+
# Zammad's backup data
733+
{}
734+
zammad-storage:
735+
# Zammad's storage data
736+
{}

0 commit comments

Comments
 (0)