From 128d47ef232bbd3bbfc76b6994fa64e57be2eb35 Mon Sep 17 00:00:00 2001 From: Jan Michalek <6410423+VeselaHouba@users.noreply.github.com> Date: Wed, 27 Oct 2021 15:51:04 +0200 Subject: [PATCH] added Zammad (#535) * added Zammad (#491) * fixup! added Zammad # Formatting fixes --- public/v4/apps/zammad.yml | 222 +++++++++++++++++++++++++++++++++++++ public/v4/logos/zammad.png | Bin 0 -> 14754 bytes 2 files changed, 222 insertions(+) create mode 100644 public/v4/apps/zammad.yml create mode 100644 public/v4/logos/zammad.png diff --git a/public/v4/apps/zammad.yml b/public/v4/apps/zammad.yml new file mode 100644 index 0000000..d1e5665 --- /dev/null +++ b/public/v4/apps/zammad.yml @@ -0,0 +1,222 @@ +captainVersion: 4 +caproverOneClickApp: + instructions: + start: >- + Zammad is a web-based, open source user support/ticketing solution. + end: > + Zammad is deployed and available. + IMPORTANT: It will take up to 5 minutes for Zammad to be ready. Before that, you might see a 502 error page. + displayName: Zammad + isOfficial: true + description: Zammad is a web-based, open source user support/ticketing solution. + documentation: Taken from https://hub.docker.com/r/zammad/zammad-docker-compose. + variables: + - id: $$cap_zammad_VERSION + label: Zammad Version + defaultValue: '5.0.1-5' + description: Check out their docker page for the valid tags https://hub.docker.com/r/zammad/zammad-docker-compose/tags + validRegex: /^([^\s^\/])+$/ + + - id: $$cap_zammad_ELASTICSEARCH_ENABLED + label: ELASTICSEARCH_ENABLED + defaultValue: 'true' + description: Setting this variable to false will allow you to run your Zammad without Elasticsearch. Please note that we strongly advise against doing so. + validRegex: /^(true|false)$/ + + - id: $$cap_zammad_POSTGRESQL_USER + label: POSTGRESQL_USER + defaultValue: postgresuser + validRegex: /^([a-zA-Z0-9\-\.\_])+$/ + + - id: $$cap_zammad_POSTGRESQL_PASS + label: POSTGRESQL_PASS + defaultValue: $$cap_gen_random_hex(10) + description: 'The password of Zammads database user.' + validRegex: /.{1,}/ + + - id: $$cap_zammad_POSTGRESQL_DB + label: POSTGRESQL_DB + defaultValue: zammad_production + validRegex: /^([a-zA-Z0-9\-\.\_])+$/ + + - id: $$cap_zammad_POSTGRESQL_CREATEDB + label: POSTGRESQL_DB_CREATE + defaultValue: 'true' + description: By default we will create the required database. + validRegex: /^(true|false)$/ + + - id: $$cap_zammad_RAILS_TRUSTED_PROXIES + label: RAILS_TRUSTED_PROXIES + description: By default Zammad trusts localhost proxies only. ⚠ Only change this option if you know what you’re doing! ⚠ + defaultValue: "['127.0.0.1', '::1']" + +services: + $$cap_appname-backup: + restart: always + depends_on: + - $$cap_appname-railsserver + environment: + BACKUP_SLEEP: 86400 + HOLD_DAYS: 10 + POSTGRESQL_HOST: srv-captain--$$cap_appname-postgresql + POSTGRESQL_PORT: 5432 + POSTGRESQL_USER: $$cap_zammad_POSTGRESQL_USER + POSTGRESQL_PASSWORD: $$cap_zammad_POSTGRESQL_PASS + POSTGRESQL_DB: $$cap_zammad_POSTGRESQL_DB + ZAMMAD_RAILSSERVER_HOST: srv-captain--$$cap_appname-railsserver + ZAMMAD_RAILSSERVER_PORT: 3000 + volumes: + - $$cap_appname-backup:/var/tmp/zammad + - $$cap_appname-data:/opt/zammad + caproverExtra: + notExposeAsWebApp: true + dockerfileLines: + - FROM zammad/zammad-docker-compose:zammad-postgresql-$$cap_zammad_VERSION + - ENTRYPOINT [] + - CMD /usr/local/bin/backup.sh zammad-backup + + $$cap_appname-elasticsearch: + restart: always + image: zammad/zammad-docker-compose:zammad-elasticsearch-$$cap_zammad_VERSION + environment: + discovery.type: single-node + volumes: + - $$cap_appname-elasticsearch-data:/usr/share/elasticsearch/data + caproverExtra: + notExposeAsWebApp: true + + $$cap_appname-init: + restart: on-failure + depends_on: + - $$cap_appname-postgresql + environment: + AUTOWIZARD_JSON: '' + ELASTICSEARCH_ENABLED: $$cap_zammad_ELASTICSEARCH_ENABLED + ELASTICSEARCH_HOST: srv-captain--$$cap_appname-elasticsearch + ELASTICSEARCH_PORT: 9200 + ELASTICSEARCH_SCHEMA: http + ELASTICSEARCH_NAMESPACE: zammad + ELASTICSEARCH_REINDEX: true + ELASTICSEARCH_SSL_VERIFY: true + MEMCACHED_HOST: srv-captain--$$cap_appname-memcached + MEMCACHED_PORT: 11211 + NGINX_PORT: 8080 + NGINX_SERVER_NAME: _ + NGINX_SERVER_SCHEME: \$scheme + POSTGRESQL_HOST: srv-captain--$$cap_appname-postgresql + POSTGRESQL_PORT: 5432 + POSTGRESQL_USER: $$cap_zammad_POSTGRESQL_USER + POSTGRESQL_PASS: $$cap_zammad_POSTGRESQL_PASS + POSTGRESQL_DB: $$cap_zammad_POSTGRESQL_DB + POSTGRESQL_DB_CREATE: $$cap_zammad_POSTGRESQL_CREATEDB + RAILS_TRUSTED_PROXIES: $$cap_zammad_RAILS_TRUSTED_PROXIES + RSYNC_ADDITIONAL_PARAMS: --no-perms --no-owner + ZAMMAD_RAILSSERVER_HOST: srv-captain--$$cap_appname-railsserver + ZAMMAD_RAILSSERVER_PORT: 3000 + ZAMMAD_WEBSOCKET_HOST: srv-captain--$$cap_appname-websocket + ZAMMAD_WEBSOCKET_PORT: 6042 + volumes: + - $$cap_appname-data:/opt/zammad + caproverExtra: + notExposeAsWebApp: true + dockerfileLines: + - FROM zammad/zammad-docker-compose:zammad-$$cap_zammad_VERSION + - ENTRYPOINT [] + - CMD /docker-entrypoint.sh zammad-init && tail -f /dev/null + + $$cap_appname-memcached: + restart: always + caproverExtra: + notExposeAsWebApp: true + dockerfileLines: + - FROM memcached:1.6.10-alpine + - CMD memcached -m 256M + + $$cap_appname-nginx: + ports: + - '8080:8080' + depends_on: + - $$cap_appname-railsserver + environment: + ZAMMAD_RAILSSERVER_HOST: srv-captain--$$cap_appname-railsserver + ZAMMAD_RAILSSERVER_PORT: 3000 + ZAMMAD_WEBSOCKET_HOST: srv-captain--$$cap_appname-websocket + ZAMMAD_WEBSOCKET_PORT: 6042 + restart: always + volumes: + - $$cap_appname-data:/opt/zammad + caproverExtra: + notExposeAsWebApp: false + containerHttpPort: 8080 + dockerfileLines: + - FROM zammad/zammad-docker-compose:zammad-$$cap_zammad_VERSION + - ENTRYPOINT [] + - CMD /docker-entrypoint.sh zammad-nginx + + $$cap_appname-postgresql: + environment: + POSTGRES_PORT: 5432 + POSTGRES_USER: $$cap_zammad_POSTGRESQL_USER + POSTGRES_PASSWORD: $$cap_zammad_POSTGRESQL_PASS + image: zammad/zammad-docker-compose:zammad-postgresql-$$cap_zammad_VERSION + restart: always + volumes: + - $$cap_appname-postgresql-data:/var/lib/postgresql/data + caproverExtra: + notExposeAsWebApp: true + + $$cap_appname-railsserver: + depends_on: + - $$cap_appname-memcached + - $$cap_appname-postgresql + environment: + ZAMMAD_RAILSSERVER_PORT: 3000 + restart: always + volumes: + - $$cap_appname-data:/opt/zammad + caproverExtra: + notExposeAsWebApp: true + dockerfileLines: + - FROM zammad/zammad-docker-compose:zammad-$$cap_zammad_VERSION + - ENTRYPOINT [] + - CMD /docker-entrypoint.sh zammad-railsserver + + $$cap_appname-scheduler: + depends_on: + - $$cap_appname-memcached + - $$cap_appname-railsserver + restart: always + volumes: + - $$cap_appname-data:/opt/zammad + caproverExtra: + notExposeAsWebApp: true + dockerfileLines: + - FROM zammad/zammad-docker-compose:zammad-$$cap_zammad_VERSION + - ENTRYPOINT [] + - CMD /docker-entrypoint.sh zammad-scheduler + + $$cap_appname-websocket: + depends_on: + - $$cap_appname-memcached + - $$cap_appname-railsserver + environment: + ZAMMAD_WEBSOCKET_PORT: 6042 + restart: always + volumes: + - $$cap_appname-data:/opt/zammad + caproverExtra: + notExposeAsWebApp: false + dockerfileLines: + - FROM zammad/zammad-docker-compose:zammad-$$cap_zammad_VERSION + - ENTRYPOINT [] + - CMD /docker-entrypoint.sh zammad-websocket + +volumes: + $$cap_appname-elasticsearch-data: + driver: local + $$cap_appname-postgresql-data: + driver: local + $$cap_appname-backup: + driver: local + $$cap_appname-data: + driver: local diff --git a/public/v4/logos/zammad.png b/public/v4/logos/zammad.png new file mode 100644 index 0000000000000000000000000000000000000000..5941a6b99ded82ad6f162377b7bb990c8b9ff2e1 GIT binary patch literal 14754 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 literal 0 HcmV?d00001