fix(infra): cap Objecten/Objecttypen uWSGI to 1 worker — unstarve verify-stack e2e (closes #144)
CI / build (pull_request) Successful in 1m26s
CI / lint (pull_request) Successful in 1m38s
CI / unit (pull_request) Successful in 2m18s
CI / frontend (pull_request) Successful in 4m50s
CI / mutation (pull_request) Successful in 7m14s
CI / verify-stack (pull_request) Successful in 10m49s

The Maykin images run uWSGI with 4 processes × 4 threads by default. Two
web services × 4 idle Django workers (~200 MB each) sat idle during the
Playwright e2e step and starved the single shared CI runner, so Keycloak
and the portals stopped responding (login never loaded) and Chromium
crashed — main verify-stack went red from run 2177 (post-#142) onward
while the PR runs passed on a less loaded runner.

These APIs only serve single-request smoke checks and are idle during
e2e, so 1 worker is plenty. Verified locally: both services healthy with
UWSGI_PROCESSES=1 and make verify-objecten / verify-objecttypen still green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
not
2026-07-27 13:38:47 +02:00
co-authored by Claude Opus 4.8
parent 0a97fa4bf7
commit 802f0e2c65
2 changed files with 14 additions and 0 deletions
+6
View File
@@ -583,6 +583,9 @@ services:
objecttypen-init: objecttypen-init:
image: docker.io/maykinmedia/objecttypes-api:${OBJECTTYPES_TAG:-3.4.2} image: docker.io/maykinmedia/objecttypes-api:${OBJECTTYPES_TAG:-3.4.2}
environment: &objecttypen-env-local environment: &objecttypen-env-local
# 1 uWSGI worker, not the image default of 4×4 (#144) — idle workers starve the CI runner.
UWSGI_PROCESSES: "1"
UWSGI_THREADS: "2"
DJANGO_SETTINGS_MODULE: objecttypes.conf.docker DJANGO_SETTINGS_MODULE: objecttypes.conf.docker
SECRET_KEY: ${OBJECTTYPES_SECRET_KEY:-dev-only-not-for-production} SECRET_KEY: ${OBJECTTYPES_SECRET_KEY:-dev-only-not-for-production}
DB_HOST: objecttypen-db DB_HOST: objecttypen-db
@@ -644,6 +647,9 @@ services:
objecten-init: objecten-init:
image: docker.io/maykinmedia/objects-api:${OBJECTS_TAG:-3.4.0} image: docker.io/maykinmedia/objects-api:${OBJECTS_TAG:-3.4.0}
environment: &objecten-env-local environment: &objecten-env-local
# 1 uWSGI worker, not the image default of 4×4 (#144) — idle workers starve the CI runner.
UWSGI_PROCESSES: "1"
UWSGI_THREADS: "2"
DJANGO_SETTINGS_MODULE: objects.conf.docker DJANGO_SETTINGS_MODULE: objects.conf.docker
SECRET_KEY: ${OBJECTS_SECRET_KEY:-dev-only-not-for-production} SECRET_KEY: ${OBJECTS_SECRET_KEY:-dev-only-not-for-production}
DB_HOST: objecten-db DB_HOST: objecten-db
+8
View File
@@ -596,6 +596,11 @@ services:
objecttypen-init: objecttypen-init:
image: docker.io/maykinmedia/objecttypes-api:${OBJECTTYPES_TAG:-3.4.2} image: docker.io/maykinmedia/objecttypes-api:${OBJECTTYPES_TAG:-3.4.2}
environment: &objecttypen-env environment: &objecttypen-env
# 1 uWSGI worker, not the image default of 4×4: this API only serves single-request smoke
# checks and sits idle during the e2e step — 4 idle Django workers each pin ~200 MB and starve
# the shared CI runner (#144). Init ignores this (it runs setup_configuration, not uwsgi).
UWSGI_PROCESSES: "1"
UWSGI_THREADS: "2"
DJANGO_SETTINGS_MODULE: objecttypes.conf.docker DJANGO_SETTINGS_MODULE: objecttypes.conf.docker
SECRET_KEY: ${OBJECTTYPES_SECRET_KEY:-dev-only-not-for-production} SECRET_KEY: ${OBJECTTYPES_SECRET_KEY:-dev-only-not-for-production}
DB_HOST: objecttypen-db DB_HOST: objecttypen-db
@@ -662,6 +667,9 @@ services:
objecten-init: objecten-init:
image: docker.io/maykinmedia/objects-api:${OBJECTS_TAG:-3.4.0} image: docker.io/maykinmedia/objects-api:${OBJECTS_TAG:-3.4.0}
environment: &objecten-env environment: &objecten-env
# 1 uWSGI worker, not the image default of 4×4 — see the objecttypen note above (#144).
UWSGI_PROCESSES: "1"
UWSGI_THREADS: "2"
DJANGO_SETTINGS_MODULE: objects.conf.docker DJANGO_SETTINGS_MODULE: objects.conf.docker
SECRET_KEY: ${OBJECTS_SECRET_KEY:-dev-only-not-for-production} SECRET_KEY: ${OBJECTS_SECRET_KEY:-dev-only-not-for-production}
DB_HOST: objecten-db DB_HOST: objecten-db