From 17b50c1445d84db713f2236ed00be38b70d4456e Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Thu, 29 May 2025 08:37:41 -0400 Subject: [PATCH 01/10] Replacing Zammad with FreeScout. --- docker-compose.yml | 204 ++++++++++----------------------------------- 1 file changed, 45 insertions(+), 159 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index ad4ed52e..ac8f56bb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,65 +21,6 @@ x-app-common: &jitsi_admin_app PHP_INI_MEMORY_LIMIT: "1G" PHP_EXTENSION_LDAP: 1 PHP_EXTENSION_INTL: 1 -x-shared: - zammad-service: &zammad-service - environment: &zammad-environment - MEMCACHE_SERVERS: ${ZAMMAD_MEMCACHE_SERVERS:-zammad-memcached:11211} - POSTGRESQL_DB: ${ZAMMAD_POSTGRES_DB:-zammad_production} - POSTGRESQL_HOST: ${ZAMMAD_POSTGRES_HOST:-zammad-postgresql} - POSTGRESQL_USER: ${ZAMMAD_POSTGRES_USER:-zammad} - POSTGRESQL_PASS: ${ZAMMAD_POSTGRES_PASS:-zammad} - POSTGRESQL_PORT: ${ZAMMAD_POSTGRES_PORT:-5432} - POSTGRESQL_OPTIONS: ${ZAMMAD_POSTGRESQL_OPTIONS:-?pool=50} - POSTGRESQL_DB_CREATE: - REDIS_URL: ${ZAMMAD_REDIS_URL:-redis://zammad-redis:6379} - S3_URL: http://${ZAMMAD_S3_ACCESS_KEY}:${ZAMMAD_S3_SECRET_KEY}@minio:9000/zammad-storage-bucket?region=us-east-fh-pln&force_path_style=true - # Backup settings - BACKUP_DIR: "${BACKUP_DIR:-/var/tmp/zammad}" - BACKUP_TIME: "${BACKUP_TIME:-03:00}" - HOLD_DAYS: "${HOLD_DAYS:-7}" - TZ: "${TZ:-Europe/Berlin}" - # Allow passing in these variables via .env: - AUTOWIZARD_JSON: - AUTOWIZARD_RELATIVE_PATH: - ELASTICSEARCH_ENABLED: false - ELASTICSEARCH_SCHEMA: - ELASTICSEARCH_HOST: - ELASTICSEARCH_PORT: - ELASTICSEARCH_USER: ${ELASTICSEARCH_USER:-elastic} - ELASTICSEARCH_PASS: ${ELASTICSEARCH_PASS:-zammad} - ELASTICSEARCH_NAMESPACE: - ELASTICSEARCH_REINDEX: - NGINX_PORT: - NGINX_EXPOSE_PORT: 15257 - NGINX_CLIENT_MAX_BODY_SIZE: - NGINX_SERVER_NAME: - NGINX_SERVER_SCHEME: - RAILS_TRUSTED_PROXIES: 172.18.0.0/16 - ZAMMAD_HTTP_TYPE: - ZAMMAD_FQDN: - ZAMMAD_WEB_CONCURRENCY: - ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS: - ZAMMAD_PROCESS_SCHEDULED_JOBS_WORKERS: - ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS: - # ZAMMAD_SESSION_JOBS_CONCURRENT is deprecated, please use ZAMMAD_PROCESS_SESSIONS_JOBS_WORKERS instead. - ZAMMAD_SESSION_JOBS_CONCURRENT: - # Variables used by ngingx-proxy container for reverse proxy creations - # for docs refer to https://github.com/nginx-proxy/nginx-proxy - VIRTUAL_HOST: - VIRTUAL_PORT: - # Variables used by acme-companion for retrieval of LetsEncrypt certificate - # for docs refer to https://github.com/nginx-proxy/acme-companion - LETSENCRYPT_HOST: - LETSENCRYPT_EMAIL: - image: ${IMAGE_REPO:-ghcr.io/zammad/zammad}:${VERSION:-6.5.0-15} - restart: ${RESTART:-always} - volumes: - - zammad-storage:/opt/zammad/storage - depends_on: - - zammad-memcached - - zammad-postgresql - - zammad-redis x-maxun: &maxun-env environment: NODE_ENV: production @@ -1204,6 +1145,50 @@ services: source: /rinoa-storage target: /storage type: bind + freescout-app: + container_name: freescout + depends_on: + mariadb: + condition: service_started + required: true + environment: + ADMIN_EMAIL: it-services@${MY_TLD} + ADMIN_FIRST_NAME: Treasured + ADMIN_LAST_NAME: IT + ADMIN_PASS: ${FREESCOUT_ADMIN_PASS} + APP_TRUSTED_PROXIES: 172.18.0.0/16,192.168.1.0/24 + DB_TYPE: mysql + DB_HOST: mariadb + DB_PORT: 3306 + DB_NAME: freescout + DB_USER: freescout + DB_PASS: ${FREESCOUT_DB_PASS} + DB_SSL: FALSE + DISPLAY_ERRORS: TRUE + ENABLE_AUTO_UPDATE: TRUE + SETUP_TYPE: AUTO + SITE_URL: https://support.${MY_TLD} + SKIP_STORAGE_PERMISSIONS: FALSE + TIMEZONE: ${TZ} + image: tiredofit/freescout + labels: + homepage.group: Lifestyle + homepage.name: FreeScout + homepage.icon: sh-freescout.svg + homepage.href: http://support.${MY_TLD} + homepage.description: Lightweight help desk and shared inbox + swag: enable + swag_proto: http + swag_url: support.${MY_TLD} + swag.uptime-kuma.enabled: true + swag.uptime-kuma.monitor.url: https://support.${MY_TLD} + swag.uptime-kuma.monitor.interval: 300 + ports: + - 59095:80 + restart: unless-stopped + volumes: + - ${DOCKER_VOLUME_CONFIG}/freescout/data:/www/html + - ${DOCKER_VOLUME_CONFIG}/freescout/logs/:/www/logs ghost: container_name: ghost_blog depends_on: @@ -5225,95 +5210,6 @@ services: source: /rinoa-storage target: /storage type: bind - zammad-backup: - <<: *zammad-service - container_name: zammad-backup - command: ["zammad-backup"] - volumes: - - zammad-backup:/var/tmp/zammad - - zammad-storage:/opt/zammad/storage:ro - user: 0:0 - zammad-elasticsearch: - container_name: zammad-elasticsearch - image: bitnami/elasticsearch:${ELASTICSEARCH_VERSION:-8.17.4} - restart: ${RESTART:-always} - profiles: - - do-not-start - volumes: - - zammad-elasticsearch-data:/bitnami/elasticsearch/data - environment: - # Enable authorization without HTTPS. For external access with - # SSL termination, use solutions like nginx-proxy-manager. - ELASTICSEARCH_ENABLE_SECURITY: 'true' - ELASTICSEARCH_SKIP_TRANSPORT_TLS: 'true' - ELASTICSEARCH_ENABLE_REST_TLS: 'false' - # ELASTICSEARCH_USER is hardcoded to 'elastic' in the container. - ELASTICSEARCH_PASSWORD: ${ELASTICSEARCH_PASS:-zammad} - zammad-init: - <<: *zammad-service - container_name: zammad-init - command: ["zammad-init"] - depends_on: - - zammad-postgresql - restart: on-failure - user: 0:0 - zammad-memcached: - container_name: zammad-memcached - command: memcached -m 256M - image: memcached:${MEMCACHE_VERSION:-1.6.38-alpine} - restart: ${RESTART:-always} - zammad-nginx: - <<: *zammad-service - container_name: zammad-nginx - command: ["zammad-nginx"] - expose: - - 8080 - ports: - - 15257:8080 - labels: - swag: enable - swag_proto: http - swag_port: 8080 - swag_url: support.${MY_TLD} - swag.uptime-kuma.enabled: true - swag.uptime-kuma.monitor.url: https://support.${MY_TLD} - homepage.group: Personal/Professional Services - homepage.name: Zammad - homepage.href: https://support.${MY_TLD} - homepage.icon: zammad.svg - homepage.description: Open-source helpdesk/customer support system - depends_on: - - zammad-railsserver - zammad-postgresql: - container_name: zammad-postgresql - environment: - POSTGRES_DB: ${ZAMMAD_POSTGRES_DB:-zammad_production} - POSTGRES_USER: ${ZAMMAD_POSTGRES_USER:-zammad} - POSTGRES_PASSWORD: ${ZAMMAD_POSTGRES_PASS:-zammad} - image: postgres:${ZAMMAD_POSTGRES_VERSION:-17.4-alpine} - restart: ${RESTART:-always} - volumes: - - zammad-postgresql-data:/var/lib/postgresql/data - zammad-railsserver: - <<: *zammad-service - container_name: zammad-railsserver - command: ["zammad-railsserver"] - expose: - - 3000 - zammad-redis: - container_name: zammad-redis - image: redis:${REDIS_VERSION:-7.4.2-alpine} - restart: ${RESTART:-always} - volumes: - - zammad-redis-data:/data - zammad-scheduler: - <<: *zammad-service - container_name: zammad-scheduler - command: ["zammad-scheduler"] - zammad-websocket: - <<: *zammad-service - container_name: zammad-websocket - command: ["zammad-websocket"] volumes: authelia-pg-db: name: authelia-pg-db @@ -5446,14 +5342,4 @@ volumes: wallos-db: name: wallos-db wallos-logos: - name: wallos-logos - zammad-backup: - name: zammad-backup - zammad-storage: - name: zammad-storage - zammad-elasticsearch-data: - name: zammad-elasticsearch-data - zammad-postgresql-data: - name: zammad-postgresql-data - zammad-redis-data: - name: zammad-redis-data \ No newline at end of file + name: wallos-logos \ No newline at end of file -- 2.52.0 From c5213b50a1b85f84c67e7bdb95e72ddcdaf259fd Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Thu, 29 May 2025 09:07:38 -0400 Subject: [PATCH 02/10] Renaming FreeScout service. --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index ac8f56bb..e430c8fe 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1145,7 +1145,7 @@ services: source: /rinoa-storage target: /storage type: bind - freescout-app: + freescout: container_name: freescout depends_on: mariadb: -- 2.52.0 From 75f10986910dcbcf1c32487d9ffff4f3895b37f3 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Thu, 29 May 2025 09:52:45 -0400 Subject: [PATCH 03/10] Added volume mappings. --- docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index e430c8fe..ada5b3b1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1187,6 +1187,9 @@ services: - 59095:80 restart: unless-stopped volumes: + - ${DOCKER_VOLUME_CONFIG}/freescout/assets/modules:/assets/modules + - ${DOCKER_VOLUME_CONFIG}/freescout/assets/custom:/assets/custom + - ${DOCKER_VOLUME_CONFIG}/freescout/assets/custom-scripts:/assets/custom-scripts - ${DOCKER_VOLUME_CONFIG}/freescout/data:/www/html - ${DOCKER_VOLUME_CONFIG}/freescout/logs/:/www/logs ghost: -- 2.52.0 From 2fc16ad6107f47ccb699ec9f90e3ecc88a657278 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Thu, 29 May 2025 10:13:55 -0400 Subject: [PATCH 04/10] Removing HortusFox volumes. --- docker-compose.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index ada5b3b1..628a63ba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5240,18 +5240,6 @@ volumes: name: graylog-data graylog-datanode: name: graylog-datanode - hortusfox_app_backup: - name: hortusfox_app_backup - hortusfox_app_images: - name: hortusfox_app_images - hortusfox_app_logs: - name: hortusfox_app_logs - hortusfox_app_migrate: - name: hortusfox_app_migrate - hortusfox_app_themes: - name: hortusfox_app_themes - hortusfox_db_data: - name: hortusfox_db_data immich-model-cache: name: immich-model-cache influxdb2-data: -- 2.52.0 From 35cce79dd7bb97e06c7e1ce310d61d3f19f97990 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Thu, 29 May 2025 10:35:26 -0400 Subject: [PATCH 05/10] Removing Netbird volumes. --- docker-compose.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 628a63ba..687dad6c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5282,12 +5282,6 @@ volumes: name: mongodb_data n8n-data: name: n8n-data - netbird-mgmt: - name: netbird-mgmt - netbird-signal: - name: netbird-signal - netbird-letsencrypt: - name: netbird-letsencrypt nextcloud_aio_mastercontainer: name: nextcloud_aio_mastercontainer ollama: -- 2.52.0 From cd174158f244201ba0f810850bebd5d50a9fa4c7 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Fri, 6 Jun 2025 16:02:58 -0400 Subject: [PATCH 06/10] Adding FreeScout in place of Zammad. --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 687dad6c..8bb9267e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2679,6 +2679,8 @@ services: container_name: librechat-rag-api depends_on: - librechat-vectordb + # env_file: + # - ${DOCKER_VOLUME_CONFIG}/librechat/librechat.env environment: DB_HOST: librechat-vectordb OPENAI_API_KEY: ${LIBRECHAT_OPENAI_API_KEY} @@ -2691,8 +2693,6 @@ services: RAG_PORT: 8000 image: ghcr.io/danny-avila/librechat-rag-api-dev-lite:latest restart: always - # env_file: - # - ${DOCKER_VOLUME_CONFIG}/librechat/librechat.env libretranslate: container_name: libretranslate # command: --ssl --ga-id MY-GA-ID --req-limit 100 --char-limit 500 -- 2.52.0 From a5480f20f4330cd87d470b414fad93262ab875df Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Fri, 6 Jun 2025 18:34:34 -0400 Subject: [PATCH 07/10] Link fix. --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 8bb9267e..9e948445 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1175,7 +1175,7 @@ services: homepage.group: Lifestyle homepage.name: FreeScout homepage.icon: sh-freescout.svg - homepage.href: http://support.${MY_TLD} + homepage.href: https://support.${MY_TLD} homepage.description: Lightweight help desk and shared inbox swag: enable swag_proto: http -- 2.52.0 From 51cdb74265413e696f03c8ccfac8599bf420202c Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Sat, 7 Jun 2025 09:43:27 -0400 Subject: [PATCH 08/10] Adding image tag for FreeScout. --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9e948445..96567ea8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1170,7 +1170,7 @@ services: SITE_URL: https://support.${MY_TLD} SKIP_STORAGE_PERMISSIONS: FALSE TIMEZONE: ${TZ} - image: tiredofit/freescout + image: tiredofit/freescout:latest labels: homepage.group: Lifestyle homepage.name: FreeScout -- 2.52.0 From 0a49f0541025ec091fd6babdc9e90468b46f154c Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Sat, 7 Jun 2025 09:43:27 -0400 Subject: [PATCH 09/10] Adding Jinja template for AdGuard Home. --- ansible/app-configs/AdGuardHome.yaml.j2 | 199 ++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 ansible/app-configs/AdGuardHome.yaml.j2 diff --git a/ansible/app-configs/AdGuardHome.yaml.j2 b/ansible/app-configs/AdGuardHome.yaml.j2 new file mode 100644 index 00000000..a3e8bcc2 --- /dev/null +++ b/ansible/app-configs/AdGuardHome.yaml.j2 @@ -0,0 +1,199 @@ +{% set vault_addr = 'https://vault.trez.wtf' %} +{% set secrets_path = 'rinoa-docker/env' %} + +http: + pprof: + port: 6060 + enabled: false + address: 0.0.0.0:80 + session_ttl: 720h +users: + - name: admin + password: {{ lookup('community.hashi_vault.vault_kv2_get', 'env', engine_mount_point='rinoa-docker', url=vault_addr, token=vault_token_cleaned)['secret']['ADGUARD_BCRYPT'] }} +auth_attempts: 5 +block_auth_min: 15 +http_proxy: "" +language: "" +theme: auto +dns: + bind_hosts: + - 0.0.0.0 + port: 53 + anonymize_client_ip: false + ratelimit: 20 + ratelimit_subnet_len_ipv4: 24 + ratelimit_subnet_len_ipv6: 56 + ratelimit_whitelist: [] + refuse_any: true + upstream_dns: + - 94.140.14.14 + - 94.140.15.15 + - https://dns.adguard-dns.com/dns-query + - tls://dns.adguard-dns.com + - quic://dns.adguard-dns.com + - 1.1.1.1 + - 1.0.0.1 + - 1.1.1.2 + - 1.0.0.2 + - 185.228.168.9 + - 185.228.169.9 + - 76.76.2.3 + - tls://getdnsapi.net + - 185.49.141.37 + - tls://dot.seby.io + upstream_dns_file: "" + bootstrap_dns: + - 9.9.9.10 + - 149.112.112.10 + - 2620:fe::10 + - 2620:fe::fe:10 + fallback_dns: [] + upstream_mode: load_balance + fastest_timeout: 1s + allowed_clients: [] + disallowed_clients: [] + blocked_hosts: + - version.bind + - id.server + - hostname.bind + trusted_proxies: + - 127.0.0.0/8 + - ::1/128 + cache_size: 4194304 + cache_ttl_min: 0 + cache_ttl_max: 0 + cache_optimistic: false + bogus_nxdomain: [] + aaaa_disabled: false + enable_dnssec: false + edns_client_subnet: + custom_ip: "" + enabled: false + use_custom: false + max_goroutines: 300 + handle_ddr: true + ipset: [] + ipset_file: "" + bootstrap_prefer_ipv6: false + upstream_timeout: 10s + private_networks: [] + use_private_ptr_resolvers: false + local_ptr_upstreams: [] + use_dns64: false + dns64_prefixes: [] + serve_http3: false + use_http3_upstreams: false + serve_plain_dns: true + hostsfile_enabled: true + pending_requests: + enabled: true +tls: + enabled: true + server_name: "" + force_https: false + port_https: 443 + port_dns_over_tls: 853 + port_dns_over_quic: 853 + port_dnscrypt: 0 + dnscrypt_config_file: "" + allow_unencrypted_doh: false + certificate_chain: "" + private_key: "" + certificate_path: /opt/adguardhome/certs/live/trez.wtf/priv-fullchain-bundle.pem + private_key_path: /opt/adguardhome/certs/live/trez.wtf/priv-fullchain-bundle.pem + strict_sni_check: false +querylog: + dir_path: "" + ignored: [] + interval: 2160h + size_memory: 1000 + enabled: true + file_enabled: true +statistics: + dir_path: "" + ignored: [] + interval: 24h + enabled: true +filters: + - enabled: true + url: https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt + name: AdGuard DNS filter + id: 1 + - enabled: false + url: https://adguardteam.github.io/HostlistsRegistry/assets/filter_2.txt + name: AdAway Default Blocklist + id: 2 +whitelist_filters: [] +user_rules: [] +dhcp: + enabled: false + interface_name: "" + local_domain_name: lan + dhcpv4: + gateway_ip: 192.168.1.1 + subnet_mask: 255.255.255.0 + range_start: 192.168.1.2 + range_end: 192.168.1.240 + lease_duration: 86400 + icmp_timeout_msec: 1000 + options: [] + dhcpv6: + range_start: "" + lease_duration: 86400 + ra_slaac_only: false + ra_allow_slaac: false +filtering: + blocking_ipv4: "" + blocking_ipv6: "" + blocked_services: + schedule: + time_zone: America/New_York + ids: [] + protection_disabled_until: null + safe_search: + enabled: false + bing: true + duckduckgo: true + ecosia: true + google: true + pixabay: true + yandex: true + youtube: true + blocking_mode: default + parental_block_host: family-block.dns.adguard.com + safebrowsing_block_host: standard-block.dns.adguard.com + rewrites: [] + safe_fs_patterns: + - /opt/adguardhome/work/userfilters/* + safebrowsing_cache_size: 1048576 + safesearch_cache_size: 1048576 + parental_cache_size: 1048576 + cache_time: 30 + filters_update_interval: 24 + blocked_response_ttl: 10 + filtering_enabled: true + parental_enabled: false + safebrowsing_enabled: false + protection_enabled: true +clients: + runtime_sources: + whois: true + arp: true + rdns: true + dhcp: true + hosts: true + persistent: [] +log: + enabled: true + file: "" + max_backups: 0 + max_size: 100 + max_age: 3 + compress: false + local_time: false + verbose: false +os: + group: "" + user: "" + rlimit_nofile: 0 +schema_version: 29 -- 2.52.0 From 0aec31eca254ac62ce997feeaa4e044cc5c430f5 Mon Sep 17 00:00:00 2001 From: "Trez.One" Date: Sun, 8 Jun 2025 10:38:22 +0000 Subject: [PATCH 10/10] chore: Update README --- README.md | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index a930e052..95b6e3da 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ | explo | ghcr.io/lumepart/explo:latest | | fastenhealth | ghcr.io/fastenhealth/fasten-onprem:main | | flaresolverr | ghcr.io/flaresolverr/flaresolverr:latest | +| freescout | tiredofit/freescout:latest | | ghost | ghost:latest | | gitea | gitea/gitea:1.23.1 | | gitea-db | postgres:14 | @@ -87,7 +88,7 @@ | mastodon-pg-db | postgres:17-alpine | | maxun-backend | getmaxun/maxun-backend:latest | | maxun-frontend | getmaxun/maxun-frontend:latest | -| maxun-pg-db | postgres:17-alpine | +| maxun-pg-db | postgres:13-alpine | | meilisearch | getmeili/meilisearch:v1.12.3 | | minio | minio/minio:RELEASE.2025-04-22T22-12-26Z | | mixpost | inovector/mixpost:latest | @@ -148,14 +149,4 @@ | web-check | lissy93/web-check | | whodb | clidey/whodb | | youtubedl | nbr23/youtube-dl-server:latest | -| zammad-backup | ghcr.io/zammad/zammad:6.5.0-15 | -| zammad-elasticsearch | bitnami/elasticsearch:8.17.4 | -| zammad-init | ghcr.io/zammad/zammad:6.5.0-15 | -| zammad-memcached | memcached:1.6.38-alpine | -| zammad-nginx | ghcr.io/zammad/zammad:6.5.0-15 | -| zammad-postgresql | postgres:17.4-alpine | -| zammad-railsserver | ghcr.io/zammad/zammad:6.5.0-15 | -| zammad-redis | redis:7.4.2-alpine | -| zammad-scheduler | ghcr.io/zammad/zammad:6.5.0-15 | -| zammad-websocket | ghcr.io/zammad/zammad:6.5.0-15 | -- 2.52.0