From b428da77e2c617c6f7ecb64843fe3ff2435e507d Mon Sep 17 00:00:00 2001 From: Martin Gruner Date: Thu, 5 Jun 2025 12:45:07 +0200 Subject: [PATCH 1/4] Add scenario to apply docker resource limits --- .github/tests/apply-resource-limits.sh | 6 ++ .github/tests/setup/apply-resource-limits.sh | 5 ++ .github/workflows/ci.yaml | 1 + scenarios/apply-resource-limits.yml | 62 ++++++++++++++++++++ 4 files changed, 74 insertions(+) create mode 100755 .github/tests/apply-resource-limits.sh create mode 100755 .github/tests/setup/apply-resource-limits.sh create mode 100644 scenarios/apply-resource-limits.yml diff --git a/.github/tests/apply-resource-limits.sh b/.github/tests/apply-resource-limits.sh new file mode 100755 index 00000000..476f3979 --- /dev/null +++ b/.github/tests/apply-resource-limits.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +# shellcheck source=/dev/null +. "$(dirname "$0")/include/functions.sh" + +check_stack_start \ No newline at end of file diff --git a/.github/tests/setup/apply-resource-limits.sh b/.github/tests/setup/apply-resource-limits.sh new file mode 100755 index 00000000..7901b0ad --- /dev/null +++ b/.github/tests/setup/apply-resource-limits.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +set -o errexit + +docker compose -f docker-compose.yml -f scenarios/apply-resource-limits.yml up --pull always --quiet-pull --detach \ No newline at end of file diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 0368fe52..02394753 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -53,6 +53,7 @@ jobs: - add-hostport-to-elasticsearch - add-nginx-proxy-manager - add-ollama + - apply-resource-limits - disable-backup-service - disable-elasticsearch-service steps: diff --git a/scenarios/apply-resource-limits.yml b/scenarios/apply-resource-limits.yml new file mode 100644 index 00000000..06945d5c --- /dev/null +++ b/scenarios/apply-resource-limits.yml @@ -0,0 +1,62 @@ +--- +version: "3.8" + +# +# Apply resource limits to the Zammad services. +# + +services: + zammad-init: + deploy: + resources: + limits: + cpus: "${ZAMMAD_INIT_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_INIT_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-nginx: + deploy: + resources: + limits: + cpus: "${ZAMMAD_NGINX_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_NGINX_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-railsserver: + deploy: + resources: + limits: + cpus: "${ZAMMAD_RAILSSERVER_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_RAILSSERVER_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-scheduler: + deploy: + resources: + limits: + cpus: "${ZAMMAD_SCHEDULER_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_SCHEDULER_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-websocket: + deploy: + resources: + limits: + cpus: "${ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-elasticsearch: + deploy: + resources: + limits: + cpus: "${ZAMMAD_ELASTICSEARCH_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_ELASTICSEARCH_RESOURCES_LIMITS_MEMORY:-1G}" + zammad-memcached: + deploy: + resources: + limits: + cpus: "${ZAMMAD_MEMCACHED_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_MEMCACHED_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-redis: + deploy: + resources: + limits: + cpus: "${ZAMMAD_REDIS_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_REDIS_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-postgresql: + deploy: + resources: + limits: + cpus: "${ZAMMAD_POSTGRESQL_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_POSTGRESQL_RESOURCES_LIMITS_MEMORY:-500M}" From 55f3ec15a825bbf46841455dff57aabdb1e17781 Mon Sep 17 00:00:00 2001 From: Martin Gruner Date: Tue, 24 Jun 2025 10:26:13 +0200 Subject: [PATCH 2/4] Add zammad-backup and sort alphabetically --- scenarios/apply-resource-limits.yml | 54 ++++++++++++++++------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/scenarios/apply-resource-limits.yml b/scenarios/apply-resource-limits.yml index 06945d5c..2e12738a 100644 --- a/scenarios/apply-resource-limits.yml +++ b/scenarios/apply-resource-limits.yml @@ -6,57 +6,63 @@ version: "3.8" # services: - zammad-init: + zammad-backup: deploy: resources: limits: - cpus: "${ZAMMAD_INIT_RESOURCES_LIMITS_CPUS:-1.0}" - memory: "${ZAMMAD_INIT_RESOURCES_LIMITS_MEMORY:-500M}" - zammad-nginx: + cpus: "${ZAMMAD_BACKUP_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_BACKUP_RESOURCES_LIMITS_MEMORY:-500m}" + zammad-elasticsearch: deploy: resources: limits: - cpus: "${ZAMMAD_NGINX_RESOURCES_LIMITS_CPUS:-1.0}" - memory: "${ZAMMAD_NGINX_RESOURCES_LIMITS_MEMORY:-500M}" - zammad-railsserver: + cpus: "${ZAMMAD_ELASTICSEARCH_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_ELASTICSEARCH_RESOURCES_LIMITS_MEMORY:-1G}" + zammad-init: deploy: resources: limits: - cpus: "${ZAMMAD_RAILSSERVER_RESOURCES_LIMITS_CPUS:-1.0}" - memory: "${ZAMMAD_RAILSSERVER_RESOURCES_LIMITS_MEMORY:-500M}" - zammad-scheduler: + cpus: "${ZAMMAD_INIT_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_INIT_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-memcached: deploy: resources: limits: - cpus: "${ZAMMAD_SCHEDULER_RESOURCES_LIMITS_CPUS:-1.0}" - memory: "${ZAMMAD_SCHEDULER_RESOURCES_LIMITS_MEMORY:-500M}" - zammad-websocket: + cpus: "${ZAMMAD_MEMCACHED_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_MEMCACHED_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-nginx: deploy: resources: limits: - cpus: "${ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_CPUS:-1.0}" - memory: "${ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_MEMORY:-500M}" - zammad-elasticsearch: + cpus: "${ZAMMAD_NGINX_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_NGINX_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-postgresql: deploy: resources: limits: - cpus: "${ZAMMAD_ELASTICSEARCH_RESOURCES_LIMITS_CPUS:-1.0}" - memory: "${ZAMMAD_ELASTICSEARCH_RESOURCES_LIMITS_MEMORY:-1G}" - zammad-memcached: + cpus: "${ZAMMAD_POSTGRESQL_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_POSTGRESQL_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-railsserver: deploy: resources: limits: - cpus: "${ZAMMAD_MEMCACHED_RESOURCES_LIMITS_CPUS:-1.0}" - memory: "${ZAMMAD_MEMCACHED_RESOURCES_LIMITS_MEMORY:-500M}" + cpus: "${ZAMMAD_RAILSSERVER_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_RAILSSERVER_RESOURCES_LIMITS_MEMORY:-500M}" zammad-redis: deploy: resources: limits: cpus: "${ZAMMAD_REDIS_RESOURCES_LIMITS_CPUS:-1.0}" memory: "${ZAMMAD_REDIS_RESOURCES_LIMITS_MEMORY:-500M}" - zammad-postgresql: + zammad-scheduler: deploy: resources: limits: - cpus: "${ZAMMAD_POSTGRESQL_RESOURCES_LIMITS_CPUS:-1.0}" - memory: "${ZAMMAD_POSTGRESQL_RESOURCES_LIMITS_MEMORY:-500M}" + cpus: "${ZAMMAD_SCHEDULER_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_SCHEDULER_RESOURCES_LIMITS_MEMORY:-500M}" + zammad-websocket: + deploy: + resources: + limits: + cpus: "${ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_CPUS:-1.0}" + memory: "${ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_MEMORY:-500M}" From 92f59e6a19738ee8336b2755be5150e1b414365f Mon Sep 17 00:00:00 2001 From: Martin Gruner Date: Tue, 24 Jun 2025 10:34:32 +0200 Subject: [PATCH 3/4] Add section to .env.dist --- .env.dist | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/.env.dist b/.env.dist index bb470c38..849ce5b1 100644 --- a/.env.dist +++ b/.env.dist @@ -87,3 +87,31 @@ ############################################# # OLLAMA_PULL_MODEL=llama3.2 + +############################################# +# scenarios/apply-resource-limits.yml +############################################# + +# By loading the scenario, these default limits +# are applied. Uncomment and change if needed. + +# ZAMMAD_BACKUP_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_BACKUP_RESOURCES_LIMITS_MEMORY=500m +# ZAMMAD_ELASTICSEARCH_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_ELASTICSEARCH_RESOURCES_LIMITS_MEMORY=1G +# ZAMMAD_INIT_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_INIT_RESOURCES_LIMITS_MEMORY=500M +# ZAMMAD_MEMCACHED_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_MEMCACHED_RESOURCES_LIMITS_MEMORY=500M +# ZAMMAD_NGINX_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_NGINX_RESOURCES_LIMITS_MEMORY=500M +# ZAMMAD_POSTGRESQL_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_POSTGRESQL_RESOURCES_LIMITS_MEMORY=500M +# ZAMMAD_RAILSSERVER_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_RAILSSERVER_RESOURCES_LIMITS_MEMORY=500M +# ZAMMAD_REDIS_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_REDIS_RESOURCES_LIMITS_MEMORY=500M +# ZAMMAD_SCHEDULER_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_SCHEDULER_RESOURCES_LIMITS_MEMORY=500M +# ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_CPUS=1.0 +# ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_MEMORY=500M \ No newline at end of file From 08587642be2adbf003768854667cae34edcc8b1e Mon Sep 17 00:00:00 2001 From: Martin Gruner Date: Tue, 24 Jun 2025 10:38:07 +0200 Subject: [PATCH 4/4] Add missing blank EOF line --- .env.dist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.dist b/.env.dist index 849ce5b1..bd1bf727 100644 --- a/.env.dist +++ b/.env.dist @@ -114,4 +114,4 @@ # ZAMMAD_SCHEDULER_RESOURCES_LIMITS_CPUS=1.0 # ZAMMAD_SCHEDULER_RESOURCES_LIMITS_MEMORY=500M # ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_CPUS=1.0 -# ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_MEMORY=500M \ No newline at end of file +# ZAMMAD_WEBSOCKET_RESOURCES_LIMITS_MEMORY=500M