R-762: wger server question measured on the bench (gunicorn 2 workers, 41 % of 384M)
gates / gates (push) Successful in 2m44s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-10-06 21:22:53 +02:00
parent 8372c08e70
commit 12ffae3d53
44 changed files with 1344 additions and 1 deletions
@@ -49,3 +49,4 @@ no reboot.
| R-392 | **closed** — `architecture/12-agent-tooling.md` written (a map, points at the doc-authoring skill); routed from `.claude/rules/docs.md` (instruction-file edit: one table row added) | 25 | (this batch) |
| (DooPlex fence) | **A helper ran the catalog's full gate run on DooPlex**, whose `volume-persistence` gate builds and runs canary containers on the local Docker (`scripts/check-volume-persistence.py` canary self-test). Read at 21:20: no container and no volume left; one local image `felhom-volgate-canary:1` (alpine, built ~21:10) remains — left in place (not mine to prune; it may have existed before). The helper reports the gate's self-test fails on DooPlex for every app, also on `main` — not investigated: running it again would act on DooPlex. Fence repeated to the next helper | 5 | — |
| R-896 | **OPENED** — the volume-persistence gate runs Docker locally (acts on DooPlex); its self-test fails here | 5 | (this batch) |
| R-762 | **measured** on the bench (runserver 52 %, gunicorn 1w 43 %, 2w 41 % of 384M; no kills); the numbers pick gunicorn with 2 workers; template change not built. Bench back to stopped; no Docker on DooPlex | 25 | (this batch) |
@@ -0,0 +1,40 @@
# R-762 second half — wger under gunicorn, measured (2026-10-06 night, bench 9401)
**What was measured.** wger 2.7 (`wger/server:2.7`, the catalog template on `main` `d63ea35`: `DJANGO_DEBUG=False` and the
`wger-files` nginx), the template's limit **384M** (`deploy.resources.limits.memory: 384M`; the file server 32M). Three
runs, each on fresh volumes, on test bench VM 9401 (demo-hp): Django `runserver` (today's template), and gunicorn with
1 and 2 workers. No traefik: ports on the bench's loopback (wger 18000, the file server 18080). Script and compose:
`bench/run.sh`, `bench/compose.yml`; raw outputs `bench/out-*/`.
**How the worker count is set.** The image's entrypoint runs `gunicorn wger.wsgi:application --preload --bind
0.0.0.0:$PORT` when `WGER_USE_GUNICORN=True` — no `-w` and no config file in the image, so gunicorn's own default
applies: `WEB_CONCURRENCY` (unset = 1). **Control from a different channel** — the container's own log
(`bench/out-*/server-lines.txt`): 1 × „Booting worker" for gunicorn1, 2 × for gunicorn2, „Starting development server"
for runserver.
| Mode | Workers | anon peak (MB) | % of 384M | oom_kill | restarts | ready after | login page (10 × seq.) | its CSS via wger-files | 20 GETs, 10 parallel |
|---|---|---|---|---|---|---|---|---|---|
| runserver (today) | — | 201 | 52 % | 0 | 0 | 81 s | 200, avg 32 ms | 200, 1 ms | 200 ×20, avg 394 ms |
| gunicorn | 1 | 165 | 43 % | 0 | 0 | 75 s | 200, avg 31 ms | 200, 1 ms | 200 ×20, avg 241 ms |
| gunicorn | 2 | 157 | 41 % | 0 | 0 | 72 s | 200, avg 43 ms | 200, 1 ms | 200 ×20, avg 124 ms |
- anon peak: the highest `anon` in the container's `memory.stat`, sampled every 0.5 s from start to the end of the load
(MB = MiB). `memory.peak` read **384 MiB in all three runs** — the file cache fills the limit (collectstatic and the
sqlite file); it is not the app's memory and caused no kill (memory note: `memory.peak` counts the page cache).
- With `--preload`, the two workers share the app's pages with the master, so 2 workers did not cost more `anon` than 1
here (157 vs 165 MB; the difference is run-to-run noise, not a saving).
- ready after: from `compose up` to the first 200 on the login page — dominated by bootstrap, collectstatic and migrate
on a fresh volume, not by the server.
**Not measured:** a signed-in page. The scripted sign-in did not take (the form came back 200; the dashboard answered
302 to the login) and the brief said „if cheap". Nothing else was tried.
**Pick the numbers support: gunicorn with 2 workers** (`WGER_USE_GUNICORN=True`, `WEB_CONCURRENCY=2`): 41 % of the
limit, no kill, and half the wait of 1 worker when ten requests arrive together. 1 worker also fits; runserver is the
heaviest and is a development server.
**Teardown.** Bench 9401 was stopped when found; started 21:16, stopped again after the runs (`pct status`: stopped).
The project's containers, volumes and network were removed by `docker compose down -v` on the project `r762` only
(0 left by name); `/root/r762` deleted. The two images were already on the bench and stay. No prune of any kind. No
Docker command ran on DooPlex. Host: nothing created (the copy files in `/tmp` were deleted). Hub: nothing.
The image's default admin password appears in its own bootstrap log line; it is redacted in these files.
@@ -0,0 +1,41 @@
name: r762
services:
wger:
image: wger/server:2.7
container_name: r762-wger
environment:
- TZ=Europe/Budapest
- SECRET_KEY=${SECRET_KEY}
- CSRF_TRUSTED_ORIGINS=http://127.0.0.1:18000
- DJANGO_PERFORM_MIGRATIONS=True
- ALLOW_REGISTRATION=False
- ALLOW_GUEST_USERS=False
- ENABLE_EMAIL=False
- DJANGO_DB_ENGINE=django.db.backends.sqlite3
- DJANGO_DB_DATABASE=/home/wger/db/database.sqlite
- DJANGO_DB_USER=wger
- DJANGO_DB_PASSWORD=wger
- DJANGO_DB_HOST=localhost
- DJANGO_DB_PORT=5432
- SITE_URL=http://127.0.0.1:18000
- DJANGO_DEBUG=False
- WGER_USE_GUNICORN=${USE_GUNICORN}
- WEB_CONCURRENCY=${WORKERS}
volumes:
- r762_data:/home/wger/db
- r762_media:/home/wger/media
- r762_static:/home/wger/static
ports: ["127.0.0.1:18000:8000"]
deploy: {resources: {limits: {memory: 384M}}}
files:
image: nginx:1.30.5-alpine
container_name: r762-files
volumes:
- r762_static:/usr/share/nginx/html/static:ro
- r762_media:/usr/share/nginx/html/media:ro
ports: ["127.0.0.1:18080:80"]
deploy: {resources: {limits: {memory: 32M}}}
volumes:
r762_data:
r762_media:
r762_static:
@@ -0,0 +1 @@
cg=/sys/fs/cgroup/system.slice/docker-0fe5407dd081b37892db0bc386a4b3bf29691fd48aa024e6b467e67802171516.scope
@@ -0,0 +1,16 @@
Container r762-files Stopping
Container r762-wger Stopping
Container r762-files Stopped
Container r762-files Removing
Container r762-files Removed
Container r762-wger Stopped
Container r762-wger Removing
Container r762-wger Removed
Volume r762_r762_static Removing
Volume r762_r762_media Removing
Volume r762_r762_data Removing
Network r762_default Removing
Volume r762_r762_media Removed
Network r762_default Removed
Volume r762_r762_static Removed
Volume r762_r762_data Removed
@@ -0,0 +1,2 @@
oom 0
oom_kill 0
@@ -0,0 +1 @@
restarts=0 oomkilled=false status=running
@@ -0,0 +1,44 @@
login 200 0.029225
css 200 0.000990
login 200 0.030157
css 200 0.000852
login 200 0.028203
css 200 0.000778
login 200 0.028003
css 200 0.000780
login 200 0.042576
css 200 0.000725
login 200 0.027264
css 200 0.000684
login 200 0.027799
css 200 0.000653
login 200 0.028705
css 200 0.000756
login 200 0.036473
css 200 0.000788
login 200 0.035939
css 200 0.000807
conc 200 0.033693
conc 200 0.061308
conc 200 0.089760
conc 200 0.117106
conc 200 0.141659
conc 200 0.165625
conc 200 0.191559
conc 200 0.218629
conc 200 0.243975
conc 200 0.270413
conc 200 0.273171
conc 200 0.273157
conc 200 0.274259
conc 200 0.269569
conc 200 0.272369
conc 200 0.275821
conc 200 0.412664
conc 200 0.412170
conc 200 0.409205
conc 200 0.407689
signin 200 0.028778
dashboard 302 0.002369
dashboard 302 0.002113
dashboard 302 0.004232
@@ -0,0 +1,2 @@
ready_after_s=75 code=200
css=/static/css/workout-manager.7007d84ce531.css
@@ -0,0 +1,4 @@
Using gunicorn on port 8000...
[2026-10-06 21:19:10 +0200] [11] [INFO] Starting gunicorn 26.1.0
[2026-10-06 21:19:10 +0200] [11] [INFO] Listening at: http://0.0.0.0:8000 (11)
[2026-10-06 21:19:10 +0200] [12] [INFO] Booting worker with pid: 12
@@ -0,0 +1,2 @@
anon 173166592
file 177762304
@@ -0,0 +1,16 @@
Network r762_default Creating
Network r762_default Created
Volume "r762_r762_data" Creating
Volume "r762_r762_data" Created
Volume "r762_r762_media" Creating
Volume "r762_r762_media" Created
Volume "r762_r762_static" Creating
Volume "r762_r762_static" Created
Container r762-files Creating
Container r762-wger Creating
Container r762-wger Created
Container r762-files Created
Container r762-wger Starting
Container r762-files Starting
Container r762-files Started
Container r762-wger Started
@@ -0,0 +1,300 @@
*** Using settings from env: settings.main
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:17:58,281 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
*** Database is empty or incomplete, setting it up now
*** Using settings from env: settings.main
Operations to perform:
Apply all migrations: account, actstream, allauth_idp_oidc, auth, authtoken, axes, config, contenttypes, core, easy_thumbnails, exercises, gallery, gym, mailer, manager, measurements, mfa, nutrition, sessions, sites, socialaccount, token_blacklist, trophies, weight
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying account.0001_initial... OK
Applying account.0002_email_max_length... OK
Applying account.0003_alter_emailaddress_create_unique_verified_email... OK
Applying account.0004_alter_emailaddress_drop_unique_email... OK
Applying account.0005_emailaddress_idx_upper_email... OK
Applying account.0006_emailaddress_lower... OK
Applying account.0007_emailaddress_idx_email... OK
Applying account.0008_emailaddress_unique_primary_email_fixup... OK
Applying account.0009_emailaddress_unique_primary_email... OK
Applying actstream.0001_initial... OK
Applying actstream.0002_remove_action_data... OK
Applying actstream.0003_add_follow_flag... OK
Applying allauth_idp_oidc.0001_initial... OK
Applying allauth_idp_oidc.0002_client_default_scopes... OK
Applying allauth_idp_oidc.0003_client_allow_uri_wildcards... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying authtoken.0001_initial... OK
Applying authtoken.0002_auto_20160226_1747... OK
Applying authtoken.0003_tokenproxy... OK
Applying authtoken.0004_alter_tokenproxy_options... OK
Applying axes.0001_initial... OK
Applying axes.0002_auto_20151217_2044... OK
Applying axes.0003_auto_20160322_0929... OK
Applying axes.0004_auto_20181024_1538... OK
Applying axes.0005_remove_accessattempt_trusted... OK
Applying axes.0006_remove_accesslog_trusted... OK
Applying axes.0007_alter_accessattempt_unique_together... OK
Applying axes.0008_accessfailurelog... OK
Applying axes.0009_add_session_hash... OK
Applying axes.0010_accessattemptexpiration... OK
Applying gym.0001_initial... OK
Applying core.0001_initial... OK
Applying config.0001_initial... OK
Applying config.0002_auto_20190618_1617... OK
Applying config.0003_delete_languageconfig... OK
Applying sessions.0001_initial... OK
Applying weight.0001_initial... OK
Applying weight.0002_auto_20150604_2139... OK
Applying weight.0003_auto_20160416_1030... OK
Applying weight.0004_multiple_weight_entries_per_day... OK
Applying weight.0005_add_uuid... OK
Applying nutrition.0001_initial... OK
Applying nutrition.0002_auto_20170101_1538... OK
Applying nutrition.0003_auto_20170118_2308... OK
Applying nutrition.0004_auto_20200819_2310... OK
Applying nutrition.0005_logitem... OK
Applying nutrition.0006_auto_20201201_0653... OK
Applying nutrition.0007_auto_20201214_0013... OK
Applying nutrition.0008_auto_20210102_1446... OK
Applying nutrition.0009_meal_name... OK
Applying nutrition.0010_logitem_meal... OK
Applying nutrition.0011_alter_logitem_datetime... OK
Applying nutrition.0012_alter_ingredient_license_author... OK
Applying gym.0002_auto_20151003_1944... OK
Applying gym.0003_auto_20151003_2008... OK
Applying gym.0004_auto_20151003_2357... OK
Applying gym.0005_auto_20151023_1522... OK
Applying gym.0006_auto_20160214_1013... OK
Applying gym.0007_auto_20170123_0920... OK
Applying gym.0008_auto_20190618_1617... OK
Applying exercises.0001_initial... OK
Applying manager.0001_initial... OK
Applying manager.0002_auto_20150202_2040... OK
Applying manager.0004_auto_20150609_1603... OK
Applying core.0002_auto_20141225_1512... OK
Applying core.0003_auto_20150217_1554... OK
Applying core.0004_auto_20150217_1914... OK
Applying core.0005_auto_20151025_2236... OK
Applying core.0006_auto_20151025_2237... OK
Applying core.0007_repetitionunit... OK
Applying core.0008_weightunit... OK
Applying core.0009_auto_20160303_2340... OK
Applying core.0010_auto_20170403_0144... OK
Applying core.0011_auto_20201201_0653... OK
Applying core.0012_auto_20210210_1228... OK
Applying core.0013_auto_20210726_1729... OK
Applying nutrition.0013_ingredient_image... OK
Applying nutrition.0014_license_information... OK
Applying nutrition.0015_alter_ingredient_creation_date_and_more... OK
Applying nutrition.0016_alter_logitem_options_and_more... OK
Applying nutrition.0017_remove_nutritionplan_language_alter_logitem_meal... OK
Applying nutrition.0018_nutritionplan_goal_carbs_nutritionplan_goal_energy_and_more... OK
Applying nutrition.0019_alter_image_license_author_and_more... OK
Applying nutrition.0020_full_text_search... OK
Applying nutrition.0021_add_fibers_field... OK
Applying nutrition.0022_add_remote_id_increase_author_field_length... OK
Applying nutrition.0023_fiber_spelling... OK
Applying nutrition.0024_remove_ingredient_status... OK
Applying nutrition.0025_add_last_image_check... OK
Applying nutrition.0026_add_start_and_end_fields... OK
Applying nutrition.0027_prefill_end_date... OK
Applying nutrition.0028_ingredient_dietary_properties... OK
Applying nutrition.0029_ingredient_nutriscore... OK
Applying manager.0005_auto_20160303_2008... OK
Applying manager.0006_auto_20160303_2138... OK
Applying manager.0007_auto_20160311_2258... OK
Applying manager.0008_auto_20190618_1617... OK
Applying manager.0009_auto_20201202_1559... OK
Applying manager.0010_auto_20210102_1446... OK
Applying manager.0011_remove_set_exercises... OK
Applying manager.0012_auto_20210430_1449... OK
Applying manager.0013_set_comment... OK
Applying manager.0014_auto_20210717_1858... OK
Applying manager.0015_auto_20211028_1113... OK
Applying exercises.0002_auto_20150307_1841... OK
Applying exercises.0003_auto_20160921_2000... OK
Applying exercises.0004_auto_20170404_0114... OK
Applying exercises.0005_auto_20190618_1617... OK
Applying exercises.0006_auto_20201203_0203... OK
Applying exercises.0007_auto_20201203_1042... OK
Applying exercises.0008_exercisebase... OK
Applying exercises.0009_auto_20201211_0139... OK
Applying exercises.0010_auto_20201211_0205... OK
Applying exercises.0011_auto_20201214_0033... OK
Applying exercises.0012_auto_20210327_1219... OK
Applying exercises.0013_auto_20210503_1232... OK
Applying exercises.0014_exerciseimage_style... OK
Applying exercises.0015_exercise_videos... OK
Applying exercises.0016_exercisealias... OK
Applying exercises.0017_muscle_name_en... OK
Applying core.0013_userprofile_email_verified... OK
Applying core.0014_merge_20210818_1735... OK
Applying exercises.0018_delete_pending_exercises... OK
Applying exercises.0019_exercise_crowdsourcing_changes... OK
Applying manager.0016_move_to_exercise_base... OK
Applying manager.0017_alter_workoutlog_exercise_base... OK
Applying exercises.0020_historicalexerciseimage_historicalexercisevideo... OK
Applying exercises.0021_deletionlog... OK
Applying exercises.0022_alter_exercise_license_author_and_more... OK
Applying exercises.0023_make_uuid_unique... OK
Applying exercises.0024_license_information... OK
Applying exercises.0025_rename_update_date_exercise_last_update_and_more... OK
Applying exercises.0026_deletionlog_replaced_by... OK
Applying exercises.0027_alter_deletionlog_replaced_by_and_more... OK
Applying exercises.0028_add_uuid_alias_and_comments... OK
Applying exercises.0029_full_text_search... OK
Applying exercises.0030_increase_author_field_length... OK
Applying exercises.0032_rename_exercise... OK
Applying core.0015_alter_language_short_name... OK
Applying core.0016_alter_language_short_name... OK
Applying manager.0018_flexible_routines... OK
Applying manager.0019_flexible_routines_migration... OK
Applying manager.0021_flexible_routines_cleanup... OK
Applying core.0017_language_full_name_en... OK
Applying core.0018_rounding... OK
Applying core.0019_delete_daysofweek... OK
Applying core.0020_add_trophies_enabled_to_userprofile... OK
Applying core.0021_add_unit_type_to_repetitionunit... OK
Applying nutrition.0030_add_indices... OK
Applying nutrition.0031_start_weight_unit_merge... OK
Applying nutrition.0032_continue_weight_unit_merge... OK
Applying nutrition.0033_finalize_weight_unit_merge... OK
Applying nutrition.0034_ingredient_trigram_gin_index... OK
Applying nutrition.0035_add_uuids... OK
Applying nutrition.0036_alter_image_license_author_and_more... OK
Applying nutrition.0037_powersync_synced_ingredient_tables... OK
Applying measurements.0001_initial... OK
Applying measurements.0002_auto_20210722_1042... OK
Applying measurements.0003_alter_measurement_unique_together_and_more... OK
Applying measurements.0004_add_uuids... OK
Applying measurements.0005_alter_measurement_date... OK
Applying trophies.0001_initial... OK
Applying trophies.0002_load_initial_trophies... OK
Applying manager.0022_alter_rir_type... OK
Applying manager.0023_change_validators... OK
Applying manager.0024_log_and_session_uuid... OK
Applying manager.0025_change_pk_to_uuid... OK
Applying trophies.0003_migrate_context_data_uuids... OK
Applying manager.0026_change_pk_to_uuid_swap... OK
Applying core.0022_move_email_verified_to_emailaddress... OK
Applying core.0023_create_publication... OK
Applying manager.0027_cleanup_fields... OK
Applying manager.0028_backfill_session_day... OK
Applying gallery.0001_initial... OK
Applying exercises.0033_uniqueness_constraint_translations... OK
Applying exercises.0034_add_exercise_image_dimensions... OK
Applying exercises.0035_add_is_ai_generated... OK
Applying exercises.0036_add_markdown_description_field... OK
Applying exercises.0037_replace_variation_with_uuid_field... OK
Applying exercises.0038_sync_model_changes... OK
Applying exercises.0039_translation_alias_trigram_gin_index... OK
Applying exercises.0040_alter_exercise_license_author_and_more... OK
Applying core.0024_backfill_emailaddress... OK
Applying core.0025_remove_unused_fields_in_userprofile... OK
Applying core.0026_alter_userprofile_birthdate_alter_userprofile_height... OK
Applying core.0027_powersync_publication... OK
Applying core.0028_longlivedsession... OK
Applying core.0029_userprofile_timezone... OK
Applying easy_thumbnails.0001_initial... OK
Applying easy_thumbnails.0002_thumbnaildimensions... OK
Applying mailer.0001_initial... OK
Applying mailer.0002_auto_20190618_1617... OK
Applying mailer.0003_auto_20201201_0653... OK
Applying manager.0029_alter_workoutsession_options_and_more... OK
Applying measurements.0006_health_sync... OK
Applying measurements.0007_migrate_weight... OK
Applying measurements.0008_dynamic_type... OK
Applying mfa.0001_initial... OK
Applying mfa.0002_authenticator_timestamps... OK
Applying mfa.0003_authenticator_type_uniq... OK
Applying sites.0001_initial... OK
Applying sites.0002_alter_domain_unique... OK
Applying socialaccount.0001_initial... OK
Applying socialaccount.0002_token_max_lengths... OK
Applying socialaccount.0003_extra_data_default_dict... OK
Applying socialaccount.0004_app_provider_id_settings... OK
Applying socialaccount.0005_socialtoken_nullable_app... OK
Applying socialaccount.0006_alter_socialaccount_extra_data... OK
Applying token_blacklist.0001_initial... OK
Applying token_blacklist.0002_outstandingtoken_jti_hex... OK
Applying token_blacklist.0003_auto_20171017_2007... OK
Applying token_blacklist.0004_auto_20171017_2013... OK
Applying token_blacklist.0005_remove_outstandingtoken_jti... OK
Applying token_blacklist.0006_auto_20171017_2113... OK
Applying token_blacklist.0007_auto_20171017_2214... OK
Applying token_blacklist.0008_migrate_to_bigautofield... OK
Applying token_blacklist.0010_fix_migrate_to_bigautofield... OK
Applying token_blacklist.0011_linearizes_history... OK
Applying token_blacklist.0012_alter_outstandingtoken_user... OK
Applying token_blacklist.0013_alter_blacklistedtoken_options_and_more... OK
Applying weight.0006_delete_weightentry... OK
*** Using settings from env: settings.main
Installed 1 object(s) from 1 fixture(s)
Installed 33 object(s) from 1 fixture(s)
Installed 7 object(s) from 1 fixture(s)
Installed 3 object(s) from 1 fixture(s)
Installed 5 object(s) from 1 fixture(s)
Installed 8 object(s) from 1 fixture(s)
Installed 6 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
Installed 12 object(s) from 1 fixture(s)
Installed 16 object(s) from 1 fixture(s)
Installed 8 object(s) from 1 fixture(s)
Installed 872 object(s) from 1 fixture(s)
Installed 2429 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
*** Using settings from env: settings.main
*** Password for user admin was reset to '<image-default, redacted>'
Installed 3 object(s) from 1 fixture(s)
Running in production mode, running collectstatic now
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:18:45,187 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
11362 static files copied to '/home/wger/static', 11362 post-processed.
Performing database migrations
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:19:04,477 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
System check identified some issues:
WARNINGS:
?: (axes.W001) You are using the django-axes cache handler for login attempt tracking. Your cache configuration is however invalid and will not work correctly with django-axes. This can leave security holes in your login systems as attempts are not tracked correctly. Reconfigure settings.AXES_CACHE and settings.CACHES per django-axes configuration documentation.
Operations to perform:
Apply all migrations: account, actstream, allauth_idp_oidc, auth, authtoken, axes, config, contenttypes, core, easy_thumbnails, exercises, gallery, gym, mailer, manager, measurements, mfa, nutrition, sessions, sites, socialaccount, token_blacklist, trophies, weight
Running migrations:
No migrations to apply.
Your models in app(s): 'exercises', 'gallery' have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:19:07,339 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
System check identified some issues:
WARNINGS:
?: (axes.W001) You are using the django-axes cache handler for login attempt tracking. Your cache configuration is however invalid and will not work correctly with django-axes. This can leave security holes in your login systems as attempts are not tracked correctly. Reconfigure settings.AXES_CACHE and settings.CACHES per django-axes configuration documentation.
Set site URL to 127.0.0.1:18000
Using gunicorn on port 8000...
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:19:09,558 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
[2026-10-06 21:19:10 +0200] [11] [INFO] Starting gunicorn 26.1.0
[2026-10-06 21:19:10 +0200] [11] [INFO] Listening at: http://0.0.0.0:8000 (11)
[2026-10-06 21:19:10 +0200] [11] [INFO] Using worker: sync
[2026-10-06 21:19:10 +0200] [12] [INFO] Booting worker with pid: 12
[2026-10-06 21:19:10 +0200] [11] [INFO] Control socket listening at /home/wger/.gunicorn/gunicorn.ctl
@@ -0,0 +1 @@
cg=/sys/fs/cgroup/system.slice/docker-43e2bbaf77cce593c3c45bb339313ed1b7e4487b86e42096a2b98bc800c0ea2f.scope
@@ -0,0 +1,16 @@
Container r762-files Stopping
Container r762-wger Stopping
Container r762-files Stopped
Container r762-files Removing
Container r762-files Removed
Container r762-wger Stopped
Container r762-wger Removing
Container r762-wger Removed
Volume r762_r762_static Removing
Volume r762_r762_media Removing
Volume r762_r762_data Removing
Network r762_default Removing
Network r762_default Removed
Volume r762_r762_static Removed
Volume r762_r762_media Removed
Volume r762_r762_data Removed
@@ -0,0 +1,2 @@
oom 0
oom_kill 0
@@ -0,0 +1 @@
restarts=0 oomkilled=false status=running
@@ -0,0 +1,44 @@
login 200 0.027505
css 200 0.001036
login 200 0.167486
css 200 0.000875
login 200 0.035283
css 200 0.000725
login 200 0.030707
css 200 0.000748
login 200 0.029255
css 200 0.000693
login 200 0.027881
css 200 0.000801
login 200 0.029632
css 200 0.000685
login 200 0.027624
css 200 0.000707
login 200 0.028084
css 200 0.000761
login 200 0.029816
css 200 0.000739
conc 200 0.039183
conc 200 0.046380
conc 200 0.072315
conc 200 0.076656
conc 200 0.103310
conc 200 0.097737
conc 200 0.125782
conc 200 0.123173
conc 200 0.147026
conc 200 0.152308
conc 200 0.147579
conc 200 0.151358
conc 200 0.147262
conc 200 0.145966
conc 200 0.145188
conc 200 0.142898
conc 200 0.151948
conc 200 0.150439
conc 200 0.150489
conc 200 0.160370
signin 200 0.036947
dashboard 302 0.002328
dashboard 302 0.002854
dashboard 302 0.001981
@@ -0,0 +1,2 @@
ready_after_s=72 code=200
css=/static/css/workout-manager.7007d84ce531.css
@@ -0,0 +1,5 @@
Using gunicorn on port 8000...
[2026-10-06 21:20:40 +0200] [12] [INFO] Starting gunicorn 26.1.0
[2026-10-06 21:20:40 +0200] [12] [INFO] Listening at: http://0.0.0.0:8000 (12)
[2026-10-06 21:20:40 +0200] [13] [INFO] Booting worker with pid: 13
[2026-10-06 21:20:40 +0200] [14] [INFO] Booting worker with pid: 14
@@ -0,0 +1,2 @@
anon 165064704
file 183894016
@@ -0,0 +1,16 @@
Network r762_default Creating
Network r762_default Created
Volume "r762_r762_static" Creating
Volume "r762_r762_static" Created
Volume "r762_r762_data" Creating
Volume "r762_r762_data" Created
Volume "r762_r762_media" Creating
Volume "r762_r762_media" Created
Container r762-files Creating
Container r762-wger Creating
Container r762-files Created
Container r762-wger Created
Container r762-files Starting
Container r762-wger Starting
Container r762-files Started
Container r762-wger Started
@@ -0,0 +1,301 @@
*** Using settings from env: settings.main
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:19:29,633 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
*** Database is empty or incomplete, setting it up now
*** Using settings from env: settings.main
Operations to perform:
Apply all migrations: account, actstream, allauth_idp_oidc, auth, authtoken, axes, config, contenttypes, core, easy_thumbnails, exercises, gallery, gym, mailer, manager, measurements, mfa, nutrition, sessions, sites, socialaccount, token_blacklist, trophies, weight
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying account.0001_initial... OK
Applying account.0002_email_max_length... OK
Applying account.0003_alter_emailaddress_create_unique_verified_email... OK
Applying account.0004_alter_emailaddress_drop_unique_email... OK
Applying account.0005_emailaddress_idx_upper_email... OK
Applying account.0006_emailaddress_lower... OK
Applying account.0007_emailaddress_idx_email... OK
Applying account.0008_emailaddress_unique_primary_email_fixup... OK
Applying account.0009_emailaddress_unique_primary_email... OK
Applying actstream.0001_initial... OK
Applying actstream.0002_remove_action_data... OK
Applying actstream.0003_add_follow_flag... OK
Applying allauth_idp_oidc.0001_initial... OK
Applying allauth_idp_oidc.0002_client_default_scopes... OK
Applying allauth_idp_oidc.0003_client_allow_uri_wildcards... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying authtoken.0001_initial... OK
Applying authtoken.0002_auto_20160226_1747... OK
Applying authtoken.0003_tokenproxy... OK
Applying authtoken.0004_alter_tokenproxy_options... OK
Applying axes.0001_initial... OK
Applying axes.0002_auto_20151217_2044... OK
Applying axes.0003_auto_20160322_0929... OK
Applying axes.0004_auto_20181024_1538... OK
Applying axes.0005_remove_accessattempt_trusted... OK
Applying axes.0006_remove_accesslog_trusted... OK
Applying axes.0007_alter_accessattempt_unique_together... OK
Applying axes.0008_accessfailurelog... OK
Applying axes.0009_add_session_hash... OK
Applying axes.0010_accessattemptexpiration... OK
Applying gym.0001_initial... OK
Applying core.0001_initial... OK
Applying config.0001_initial... OK
Applying config.0002_auto_20190618_1617... OK
Applying config.0003_delete_languageconfig... OK
Applying sessions.0001_initial... OK
Applying weight.0001_initial... OK
Applying weight.0002_auto_20150604_2139... OK
Applying weight.0003_auto_20160416_1030... OK
Applying weight.0004_multiple_weight_entries_per_day... OK
Applying weight.0005_add_uuid... OK
Applying nutrition.0001_initial... OK
Applying nutrition.0002_auto_20170101_1538... OK
Applying nutrition.0003_auto_20170118_2308... OK
Applying nutrition.0004_auto_20200819_2310... OK
Applying nutrition.0005_logitem... OK
Applying nutrition.0006_auto_20201201_0653... OK
Applying nutrition.0007_auto_20201214_0013... OK
Applying nutrition.0008_auto_20210102_1446... OK
Applying nutrition.0009_meal_name... OK
Applying nutrition.0010_logitem_meal... OK
Applying nutrition.0011_alter_logitem_datetime... OK
Applying nutrition.0012_alter_ingredient_license_author... OK
Applying gym.0002_auto_20151003_1944... OK
Applying gym.0003_auto_20151003_2008... OK
Applying gym.0004_auto_20151003_2357... OK
Applying gym.0005_auto_20151023_1522... OK
Applying gym.0006_auto_20160214_1013... OK
Applying gym.0007_auto_20170123_0920... OK
Applying gym.0008_auto_20190618_1617... OK
Applying exercises.0001_initial... OK
Applying manager.0001_initial... OK
Applying manager.0002_auto_20150202_2040... OK
Applying manager.0004_auto_20150609_1603... OK
Applying core.0002_auto_20141225_1512... OK
Applying core.0003_auto_20150217_1554... OK
Applying core.0004_auto_20150217_1914... OK
Applying core.0005_auto_20151025_2236... OK
Applying core.0006_auto_20151025_2237... OK
Applying core.0007_repetitionunit... OK
Applying core.0008_weightunit... OK
Applying core.0009_auto_20160303_2340... OK
Applying core.0010_auto_20170403_0144... OK
Applying core.0011_auto_20201201_0653... OK
Applying core.0012_auto_20210210_1228... OK
Applying core.0013_auto_20210726_1729... OK
Applying nutrition.0013_ingredient_image... OK
Applying nutrition.0014_license_information... OK
Applying nutrition.0015_alter_ingredient_creation_date_and_more... OK
Applying nutrition.0016_alter_logitem_options_and_more... OK
Applying nutrition.0017_remove_nutritionplan_language_alter_logitem_meal... OK
Applying nutrition.0018_nutritionplan_goal_carbs_nutritionplan_goal_energy_and_more... OK
Applying nutrition.0019_alter_image_license_author_and_more... OK
Applying nutrition.0020_full_text_search... OK
Applying nutrition.0021_add_fibers_field... OK
Applying nutrition.0022_add_remote_id_increase_author_field_length... OK
Applying nutrition.0023_fiber_spelling... OK
Applying nutrition.0024_remove_ingredient_status... OK
Applying nutrition.0025_add_last_image_check... OK
Applying nutrition.0026_add_start_and_end_fields... OK
Applying nutrition.0027_prefill_end_date... OK
Applying nutrition.0028_ingredient_dietary_properties... OK
Applying nutrition.0029_ingredient_nutriscore... OK
Applying manager.0005_auto_20160303_2008... OK
Applying manager.0006_auto_20160303_2138... OK
Applying manager.0007_auto_20160311_2258... OK
Applying manager.0008_auto_20190618_1617... OK
Applying manager.0009_auto_20201202_1559... OK
Applying manager.0010_auto_20210102_1446... OK
Applying manager.0011_remove_set_exercises... OK
Applying manager.0012_auto_20210430_1449... OK
Applying manager.0013_set_comment... OK
Applying manager.0014_auto_20210717_1858... OK
Applying manager.0015_auto_20211028_1113... OK
Applying exercises.0002_auto_20150307_1841... OK
Applying exercises.0003_auto_20160921_2000... OK
Applying exercises.0004_auto_20170404_0114... OK
Applying exercises.0005_auto_20190618_1617... OK
Applying exercises.0006_auto_20201203_0203... OK
Applying exercises.0007_auto_20201203_1042... OK
Applying exercises.0008_exercisebase... OK
Applying exercises.0009_auto_20201211_0139... OK
Applying exercises.0010_auto_20201211_0205... OK
Applying exercises.0011_auto_20201214_0033... OK
Applying exercises.0012_auto_20210327_1219... OK
Applying exercises.0013_auto_20210503_1232... OK
Applying exercises.0014_exerciseimage_style... OK
Applying exercises.0015_exercise_videos... OK
Applying exercises.0016_exercisealias... OK
Applying exercises.0017_muscle_name_en... OK
Applying core.0013_userprofile_email_verified... OK
Applying core.0014_merge_20210818_1735... OK
Applying exercises.0018_delete_pending_exercises... OK
Applying exercises.0019_exercise_crowdsourcing_changes... OK
Applying manager.0016_move_to_exercise_base... OK
Applying manager.0017_alter_workoutlog_exercise_base... OK
Applying exercises.0020_historicalexerciseimage_historicalexercisevideo... OK
Applying exercises.0021_deletionlog... OK
Applying exercises.0022_alter_exercise_license_author_and_more... OK
Applying exercises.0023_make_uuid_unique... OK
Applying exercises.0024_license_information... OK
Applying exercises.0025_rename_update_date_exercise_last_update_and_more... OK
Applying exercises.0026_deletionlog_replaced_by... OK
Applying exercises.0027_alter_deletionlog_replaced_by_and_more... OK
Applying exercises.0028_add_uuid_alias_and_comments... OK
Applying exercises.0029_full_text_search... OK
Applying exercises.0030_increase_author_field_length... OK
Applying exercises.0032_rename_exercise... OK
Applying core.0015_alter_language_short_name... OK
Applying core.0016_alter_language_short_name... OK
Applying manager.0018_flexible_routines... OK
Applying manager.0019_flexible_routines_migration... OK
Applying manager.0021_flexible_routines_cleanup... OK
Applying core.0017_language_full_name_en... OK
Applying core.0018_rounding... OK
Applying core.0019_delete_daysofweek... OK
Applying core.0020_add_trophies_enabled_to_userprofile... OK
Applying core.0021_add_unit_type_to_repetitionunit... OK
Applying nutrition.0030_add_indices... OK
Applying nutrition.0031_start_weight_unit_merge... OK
Applying nutrition.0032_continue_weight_unit_merge... OK
Applying nutrition.0033_finalize_weight_unit_merge... OK
Applying nutrition.0034_ingredient_trigram_gin_index... OK
Applying nutrition.0035_add_uuids... OK
Applying nutrition.0036_alter_image_license_author_and_more... OK
Applying nutrition.0037_powersync_synced_ingredient_tables... OK
Applying measurements.0001_initial... OK
Applying measurements.0002_auto_20210722_1042... OK
Applying measurements.0003_alter_measurement_unique_together_and_more... OK
Applying measurements.0004_add_uuids... OK
Applying measurements.0005_alter_measurement_date... OK
Applying trophies.0001_initial... OK
Applying trophies.0002_load_initial_trophies... OK
Applying manager.0022_alter_rir_type... OK
Applying manager.0023_change_validators... OK
Applying manager.0024_log_and_session_uuid... OK
Applying manager.0025_change_pk_to_uuid... OK
Applying trophies.0003_migrate_context_data_uuids... OK
Applying manager.0026_change_pk_to_uuid_swap... OK
Applying core.0022_move_email_verified_to_emailaddress... OK
Applying core.0023_create_publication... OK
Applying manager.0027_cleanup_fields... OK
Applying manager.0028_backfill_session_day... OK
Applying gallery.0001_initial... OK
Applying exercises.0033_uniqueness_constraint_translations... OK
Applying exercises.0034_add_exercise_image_dimensions... OK
Applying exercises.0035_add_is_ai_generated... OK
Applying exercises.0036_add_markdown_description_field... OK
Applying exercises.0037_replace_variation_with_uuid_field... OK
Applying exercises.0038_sync_model_changes... OK
Applying exercises.0039_translation_alias_trigram_gin_index... OK
Applying exercises.0040_alter_exercise_license_author_and_more... OK
Applying core.0024_backfill_emailaddress... OK
Applying core.0025_remove_unused_fields_in_userprofile... OK
Applying core.0026_alter_userprofile_birthdate_alter_userprofile_height... OK
Applying core.0027_powersync_publication... OK
Applying core.0028_longlivedsession... OK
Applying core.0029_userprofile_timezone... OK
Applying easy_thumbnails.0001_initial... OK
Applying easy_thumbnails.0002_thumbnaildimensions... OK
Applying mailer.0001_initial... OK
Applying mailer.0002_auto_20190618_1617... OK
Applying mailer.0003_auto_20201201_0653... OK
Applying manager.0029_alter_workoutsession_options_and_more... OK
Applying measurements.0006_health_sync... OK
Applying measurements.0007_migrate_weight... OK
Applying measurements.0008_dynamic_type... OK
Applying mfa.0001_initial... OK
Applying mfa.0002_authenticator_timestamps... OK
Applying mfa.0003_authenticator_type_uniq... OK
Applying sites.0001_initial... OK
Applying sites.0002_alter_domain_unique... OK
Applying socialaccount.0001_initial... OK
Applying socialaccount.0002_token_max_lengths... OK
Applying socialaccount.0003_extra_data_default_dict... OK
Applying socialaccount.0004_app_provider_id_settings... OK
Applying socialaccount.0005_socialtoken_nullable_app... OK
Applying socialaccount.0006_alter_socialaccount_extra_data... OK
Applying token_blacklist.0001_initial... OK
Applying token_blacklist.0002_outstandingtoken_jti_hex... OK
Applying token_blacklist.0003_auto_20171017_2007... OK
Applying token_blacklist.0004_auto_20171017_2013... OK
Applying token_blacklist.0005_remove_outstandingtoken_jti... OK
Applying token_blacklist.0006_auto_20171017_2113... OK
Applying token_blacklist.0007_auto_20171017_2214... OK
Applying token_blacklist.0008_migrate_to_bigautofield... OK
Applying token_blacklist.0010_fix_migrate_to_bigautofield... OK
Applying token_blacklist.0011_linearizes_history... OK
Applying token_blacklist.0012_alter_outstandingtoken_user... OK
Applying token_blacklist.0013_alter_blacklistedtoken_options_and_more... OK
Applying weight.0006_delete_weightentry... OK
*** Using settings from env: settings.main
Installed 1 object(s) from 1 fixture(s)
Installed 33 object(s) from 1 fixture(s)
Installed 7 object(s) from 1 fixture(s)
Installed 3 object(s) from 1 fixture(s)
Installed 5 object(s) from 1 fixture(s)
Installed 8 object(s) from 1 fixture(s)
Installed 6 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
Installed 12 object(s) from 1 fixture(s)
Installed 16 object(s) from 1 fixture(s)
Installed 8 object(s) from 1 fixture(s)
Installed 872 object(s) from 1 fixture(s)
Installed 2429 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
*** Using settings from env: settings.main
*** Password for user admin was reset to '<image-default, redacted>'
Installed 3 object(s) from 1 fixture(s)
Running in production mode, running collectstatic now
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:20:16,693 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
11362 static files copied to '/home/wger/static', 11362 post-processed.
Performing database migrations
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:20:34,441 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
System check identified some issues:
WARNINGS:
?: (axes.W001) You are using the django-axes cache handler for login attempt tracking. Your cache configuration is however invalid and will not work correctly with django-axes. This can leave security holes in your login systems as attempts are not tracked correctly. Reconfigure settings.AXES_CACHE and settings.CACHES per django-axes configuration documentation.
Operations to perform:
Apply all migrations: account, actstream, allauth_idp_oidc, auth, authtoken, axes, config, contenttypes, core, easy_thumbnails, exercises, gallery, gym, mailer, manager, measurements, mfa, nutrition, sessions, sites, socialaccount, token_blacklist, trophies, weight
Running migrations:
No migrations to apply.
Your models in app(s): 'exercises', 'gallery' have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:20:37,318 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
System check identified some issues:
WARNINGS:
?: (axes.W001) You are using the django-axes cache handler for login attempt tracking. Your cache configuration is however invalid and will not work correctly with django-axes. This can leave security holes in your login systems as attempts are not tracked correctly. Reconfigure settings.AXES_CACHE and settings.CACHES per django-axes configuration documentation.
Set site URL to 127.0.0.1:18000
Using gunicorn on port 8000...
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:20:39,609 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
[2026-10-06 21:20:40 +0200] [12] [INFO] Starting gunicorn 26.1.0
[2026-10-06 21:20:40 +0200] [12] [INFO] Listening at: http://0.0.0.0:8000 (12)
[2026-10-06 21:20:40 +0200] [12] [INFO] Using worker: sync
[2026-10-06 21:20:40 +0200] [13] [INFO] Booting worker with pid: 13
[2026-10-06 21:20:40 +0200] [14] [INFO] Booting worker with pid: 14
[2026-10-06 21:20:40 +0200] [12] [INFO] Control socket listening at /home/wger/.gunicorn/gunicorn.ctl
@@ -0,0 +1 @@
cg=/sys/fs/cgroup/system.slice/docker-c9e47eae7d10b29d467f256f0e54de5e695ee74c29b90b43564118361e38bba4.scope
@@ -0,0 +1,16 @@
Container r762-files Stopping
Container r762-wger Stopping
Container r762-files Stopped
Container r762-files Removing
Container r762-files Removed
Container r762-wger Stopped
Container r762-wger Removing
Container r762-wger Removed
Volume r762_r762_data Removing
Volume r762_r762_static Removing
Volume r762_r762_media Removing
Network r762_default Removing
Volume r762_r762_data Removed
Network r762_default Removed
Volume r762_r762_static Removed
Volume r762_r762_media Removed
@@ -0,0 +1,2 @@
oom 0
oom_kill 0
@@ -0,0 +1 @@
restarts=0 oomkilled=false status=running
@@ -0,0 +1,44 @@
login 200 0.035321
css 200 0.000971
login 200 0.031548
css 200 0.000792
login 200 0.029122
css 200 0.000825
login 200 0.028041
css 200 0.000757
login 200 0.027987
css 200 0.000694
login 200 0.030125
css 200 0.000763
login 200 0.036617
css 200 0.000838
login 200 0.036226
css 200 0.000969
login 200 0.033944
css 200 0.000696
login 200 0.031335
css 200 0.000720
conc 200 0.410949
conc 200 0.443611
conc 200 0.448561
conc 200 0.454908
conc 200 0.461576
conc 200 0.471760
conc 200 0.463850
conc 200 0.480722
conc 200 0.507565
conc 200 0.510700
conc 200 0.349673
conc 200 0.287485
conc 200 0.324582
conc 200 0.310080
conc 200 0.356899
conc 200 0.332309
conc 200 0.340294
conc 200 0.328755
conc 200 0.295187
conc 200 0.294409
signin 200 0.033918
dashboard 302 0.002958
dashboard 302 0.002211
dashboard 302 0.002689
@@ -0,0 +1,2 @@
ready_after_s=81 code=200
css=/static/css/workout-manager.7007d84ce531.css
@@ -0,0 +1,2 @@
Using django's development server on port 8000...
Starting development server at http://0.0.0.0:8000/
@@ -0,0 +1,2 @@
anon 210644992
file 115146752
@@ -0,0 +1,16 @@
Network r762_default Creating
Network r762_default Created
Volume "r762_r762_static" Creating
Volume "r762_r762_static" Created
Volume "r762_r762_media" Creating
Volume "r762_r762_media" Created
Volume "r762_r762_data" Creating
Volume "r762_r762_data" Created
Container r762-wger Creating
Container r762-files Creating
Container r762-wger Created
Container r762-files Created
Container r762-wger Starting
Container r762-files Starting
Container r762-files Started
Container r762-wger Started
@@ -0,0 +1,352 @@
*** Using settings from env: settings.main
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:16:21,126 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
*** Database is empty or incomplete, setting it up now
*** Using settings from env: settings.main
Operations to perform:
Apply all migrations: account, actstream, allauth_idp_oidc, auth, authtoken, axes, config, contenttypes, core, easy_thumbnails, exercises, gallery, gym, mailer, manager, measurements, mfa, nutrition, sessions, sites, socialaccount, token_blacklist, trophies, weight
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying account.0001_initial... OK
Applying account.0002_email_max_length... OK
Applying account.0003_alter_emailaddress_create_unique_verified_email... OK
Applying account.0004_alter_emailaddress_drop_unique_email... OK
Applying account.0005_emailaddress_idx_upper_email... OK
Applying account.0006_emailaddress_lower... OK
Applying account.0007_emailaddress_idx_email... OK
Applying account.0008_emailaddress_unique_primary_email_fixup... OK
Applying account.0009_emailaddress_unique_primary_email... OK
Applying actstream.0001_initial... OK
Applying actstream.0002_remove_action_data... OK
Applying actstream.0003_add_follow_flag... OK
Applying allauth_idp_oidc.0001_initial... OK
Applying allauth_idp_oidc.0002_client_default_scopes... OK
Applying allauth_idp_oidc.0003_client_allow_uri_wildcards... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying authtoken.0001_initial... OK
Applying authtoken.0002_auto_20160226_1747... OK
Applying authtoken.0003_tokenproxy... OK
Applying authtoken.0004_alter_tokenproxy_options... OK
Applying axes.0001_initial... OK
Applying axes.0002_auto_20151217_2044... OK
Applying axes.0003_auto_20160322_0929... OK
Applying axes.0004_auto_20181024_1538... OK
Applying axes.0005_remove_accessattempt_trusted... OK
Applying axes.0006_remove_accesslog_trusted... OK
Applying axes.0007_alter_accessattempt_unique_together... OK
Applying axes.0008_accessfailurelog... OK
Applying axes.0009_add_session_hash... OK
Applying axes.0010_accessattemptexpiration... OK
Applying gym.0001_initial... OK
Applying core.0001_initial... OK
Applying config.0001_initial... OK
Applying config.0002_auto_20190618_1617... OK
Applying config.0003_delete_languageconfig... OK
Applying sessions.0001_initial... OK
Applying weight.0001_initial... OK
Applying weight.0002_auto_20150604_2139... OK
Applying weight.0003_auto_20160416_1030... OK
Applying weight.0004_multiple_weight_entries_per_day... OK
Applying weight.0005_add_uuid... OK
Applying nutrition.0001_initial... OK
Applying nutrition.0002_auto_20170101_1538... OK
Applying nutrition.0003_auto_20170118_2308... OK
Applying nutrition.0004_auto_20200819_2310... OK
Applying nutrition.0005_logitem... OK
Applying nutrition.0006_auto_20201201_0653... OK
Applying nutrition.0007_auto_20201214_0013... OK
Applying nutrition.0008_auto_20210102_1446... OK
Applying nutrition.0009_meal_name... OK
Applying nutrition.0010_logitem_meal... OK
Applying nutrition.0011_alter_logitem_datetime... OK
Applying nutrition.0012_alter_ingredient_license_author... OK
Applying gym.0002_auto_20151003_1944... OK
Applying gym.0003_auto_20151003_2008... OK
Applying gym.0004_auto_20151003_2357... OK
Applying gym.0005_auto_20151023_1522... OK
Applying gym.0006_auto_20160214_1013... OK
Applying gym.0007_auto_20170123_0920... OK
Applying gym.0008_auto_20190618_1617... OK
Applying exercises.0001_initial... OK
Applying manager.0001_initial... OK
Applying manager.0002_auto_20150202_2040... OK
Applying manager.0004_auto_20150609_1603... OK
Applying core.0002_auto_20141225_1512... OK
Applying core.0003_auto_20150217_1554... OK
Applying core.0004_auto_20150217_1914... OK
Applying core.0005_auto_20151025_2236... OK
Applying core.0006_auto_20151025_2237... OK
Applying core.0007_repetitionunit... OK
Applying core.0008_weightunit... OK
Applying core.0009_auto_20160303_2340... OK
Applying core.0010_auto_20170403_0144... OK
Applying core.0011_auto_20201201_0653... OK
Applying core.0012_auto_20210210_1228... OK
Applying core.0013_auto_20210726_1729... OK
Applying nutrition.0013_ingredient_image... OK
Applying nutrition.0014_license_information... OK
Applying nutrition.0015_alter_ingredient_creation_date_and_more... OK
Applying nutrition.0016_alter_logitem_options_and_more... OK
Applying nutrition.0017_remove_nutritionplan_language_alter_logitem_meal... OK
Applying nutrition.0018_nutritionplan_goal_carbs_nutritionplan_goal_energy_and_more... OK
Applying nutrition.0019_alter_image_license_author_and_more... OK
Applying nutrition.0020_full_text_search... OK
Applying nutrition.0021_add_fibers_field... OK
Applying nutrition.0022_add_remote_id_increase_author_field_length... OK
Applying nutrition.0023_fiber_spelling... OK
Applying nutrition.0024_remove_ingredient_status... OK
Applying nutrition.0025_add_last_image_check... OK
Applying nutrition.0026_add_start_and_end_fields... OK
Applying nutrition.0027_prefill_end_date... OK
Applying nutrition.0028_ingredient_dietary_properties... OK
Applying nutrition.0029_ingredient_nutriscore... OK
Applying manager.0005_auto_20160303_2008... OK
Applying manager.0006_auto_20160303_2138... OK
Applying manager.0007_auto_20160311_2258... OK
Applying manager.0008_auto_20190618_1617... OK
Applying manager.0009_auto_20201202_1559... OK
Applying manager.0010_auto_20210102_1446... OK
Applying manager.0011_remove_set_exercises... OK
Applying manager.0012_auto_20210430_1449... OK
Applying manager.0013_set_comment... OK
Applying manager.0014_auto_20210717_1858... OK
Applying manager.0015_auto_20211028_1113... OK
Applying exercises.0002_auto_20150307_1841... OK
Applying exercises.0003_auto_20160921_2000... OK
Applying exercises.0004_auto_20170404_0114... OK
Applying exercises.0005_auto_20190618_1617... OK
Applying exercises.0006_auto_20201203_0203... OK
Applying exercises.0007_auto_20201203_1042... OK
Applying exercises.0008_exercisebase... OK
Applying exercises.0009_auto_20201211_0139... OK
Applying exercises.0010_auto_20201211_0205... OK
Applying exercises.0011_auto_20201214_0033... OK
Applying exercises.0012_auto_20210327_1219... OK
Applying exercises.0013_auto_20210503_1232... OK
Applying exercises.0014_exerciseimage_style... OK
Applying exercises.0015_exercise_videos... OK
Applying exercises.0016_exercisealias... OK
Applying exercises.0017_muscle_name_en... OK
Applying core.0013_userprofile_email_verified... OK
Applying core.0014_merge_20210818_1735... OK
Applying exercises.0018_delete_pending_exercises... OK
Applying exercises.0019_exercise_crowdsourcing_changes... OK
Applying manager.0016_move_to_exercise_base... OK
Applying manager.0017_alter_workoutlog_exercise_base... OK
Applying exercises.0020_historicalexerciseimage_historicalexercisevideo... OK
Applying exercises.0021_deletionlog... OK
Applying exercises.0022_alter_exercise_license_author_and_more... OK
Applying exercises.0023_make_uuid_unique... OK
Applying exercises.0024_license_information... OK
Applying exercises.0025_rename_update_date_exercise_last_update_and_more... OK
Applying exercises.0026_deletionlog_replaced_by... OK
Applying exercises.0027_alter_deletionlog_replaced_by_and_more... OK
Applying exercises.0028_add_uuid_alias_and_comments... OK
Applying exercises.0029_full_text_search... OK
Applying exercises.0030_increase_author_field_length... OK
Applying exercises.0032_rename_exercise... OK
Applying core.0015_alter_language_short_name... OK
Applying core.0016_alter_language_short_name... OK
Applying manager.0018_flexible_routines... OK
Applying manager.0019_flexible_routines_migration... OK
Applying manager.0021_flexible_routines_cleanup... OK
Applying core.0017_language_full_name_en... OK
Applying core.0018_rounding... OK
Applying core.0019_delete_daysofweek... OK
Applying core.0020_add_trophies_enabled_to_userprofile... OK
Applying core.0021_add_unit_type_to_repetitionunit... OK
Applying nutrition.0030_add_indices... OK
Applying nutrition.0031_start_weight_unit_merge... OK
Applying nutrition.0032_continue_weight_unit_merge... OK
Applying nutrition.0033_finalize_weight_unit_merge... OK
Applying nutrition.0034_ingredient_trigram_gin_index... OK
Applying nutrition.0035_add_uuids... OK
Applying nutrition.0036_alter_image_license_author_and_more... OK
Applying nutrition.0037_powersync_synced_ingredient_tables... OK
Applying measurements.0001_initial... OK
Applying measurements.0002_auto_20210722_1042... OK
Applying measurements.0003_alter_measurement_unique_together_and_more... OK
Applying measurements.0004_add_uuids... OK
Applying measurements.0005_alter_measurement_date... OK
Applying trophies.0001_initial... OK
Applying trophies.0002_load_initial_trophies... OK
Applying manager.0022_alter_rir_type... OK
Applying manager.0023_change_validators... OK
Applying manager.0024_log_and_session_uuid... OK
Applying manager.0025_change_pk_to_uuid... OK
Applying trophies.0003_migrate_context_data_uuids... OK
Applying manager.0026_change_pk_to_uuid_swap... OK
Applying core.0022_move_email_verified_to_emailaddress... OK
Applying core.0023_create_publication... OK
Applying manager.0027_cleanup_fields... OK
Applying manager.0028_backfill_session_day... OK
Applying gallery.0001_initial... OK
Applying exercises.0033_uniqueness_constraint_translations... OK
Applying exercises.0034_add_exercise_image_dimensions... OK
Applying exercises.0035_add_is_ai_generated... OK
Applying exercises.0036_add_markdown_description_field... OK
Applying exercises.0037_replace_variation_with_uuid_field... OK
Applying exercises.0038_sync_model_changes... OK
Applying exercises.0039_translation_alias_trigram_gin_index... OK
Applying exercises.0040_alter_exercise_license_author_and_more... OK
Applying core.0024_backfill_emailaddress... OK
Applying core.0025_remove_unused_fields_in_userprofile... OK
Applying core.0026_alter_userprofile_birthdate_alter_userprofile_height... OK
Applying core.0027_powersync_publication... OK
Applying core.0028_longlivedsession... OK
Applying core.0029_userprofile_timezone... OK
Applying easy_thumbnails.0001_initial... OK
Applying easy_thumbnails.0002_thumbnaildimensions... OK
Applying mailer.0001_initial... OK
Applying mailer.0002_auto_20190618_1617... OK
Applying mailer.0003_auto_20201201_0653... OK
Applying manager.0029_alter_workoutsession_options_and_more... OK
Applying measurements.0006_health_sync... OK
Applying measurements.0007_migrate_weight... OK
Applying measurements.0008_dynamic_type... OK
Applying mfa.0001_initial... OK
Applying mfa.0002_authenticator_timestamps... OK
Applying mfa.0003_authenticator_type_uniq... OK
Applying sites.0001_initial... OK
Applying sites.0002_alter_domain_unique... OK
Applying socialaccount.0001_initial... OK
Applying socialaccount.0002_token_max_lengths... OK
Applying socialaccount.0003_extra_data_default_dict... OK
Applying socialaccount.0004_app_provider_id_settings... OK
Applying socialaccount.0005_socialtoken_nullable_app... OK
Applying socialaccount.0006_alter_socialaccount_extra_data... OK
Applying token_blacklist.0001_initial... OK
Applying token_blacklist.0002_outstandingtoken_jti_hex... OK
Applying token_blacklist.0003_auto_20171017_2007... OK
Applying token_blacklist.0004_auto_20171017_2013... OK
Applying token_blacklist.0005_remove_outstandingtoken_jti... OK
Applying token_blacklist.0006_auto_20171017_2113... OK
Applying token_blacklist.0007_auto_20171017_2214... OK
Applying token_blacklist.0008_migrate_to_bigautofield... OK
Applying token_blacklist.0010_fix_migrate_to_bigautofield... OK
Applying token_blacklist.0011_linearizes_history... OK
Applying token_blacklist.0012_alter_outstandingtoken_user... OK
Applying token_blacklist.0013_alter_blacklistedtoken_options_and_more... OK
Applying weight.0006_delete_weightentry... OK
*** Using settings from env: settings.main
Installed 1 object(s) from 1 fixture(s)
Installed 33 object(s) from 1 fixture(s)
Installed 7 object(s) from 1 fixture(s)
Installed 3 object(s) from 1 fixture(s)
Installed 5 object(s) from 1 fixture(s)
Installed 8 object(s) from 1 fixture(s)
Installed 6 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
Installed 12 object(s) from 1 fixture(s)
Installed 16 object(s) from 1 fixture(s)
Installed 8 object(s) from 1 fixture(s)
Installed 872 object(s) from 1 fixture(s)
Installed 2429 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
Installed 1 object(s) from 1 fixture(s)
*** Using settings from env: settings.main
*** Password for user admin was reset to '<image-default, redacted>'
Installed 3 object(s) from 1 fixture(s)
Running in production mode, running collectstatic now
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:17:08,412 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
11362 static files copied to '/home/wger/static', 11362 post-processed.
Performing database migrations
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:17:30,632 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
System check identified some issues:
WARNINGS:
?: (axes.W001) You are using the django-axes cache handler for login attempt tracking. Your cache configuration is however invalid and will not work correctly with django-axes. This can leave security holes in your login systems as attempts are not tracked correctly. Reconfigure settings.AXES_CACHE and settings.CACHES per django-axes configuration documentation.
Operations to perform:
Apply all migrations: account, actstream, allauth_idp_oidc, auth, authtoken, axes, config, contenttypes, core, easy_thumbnails, exercises, gallery, gym, mailer, manager, measurements, mfa, nutrition, sessions, sites, socialaccount, token_blacklist, trophies, weight
Running migrations:
No migrations to apply.
Your models in app(s): 'exercises', 'gallery' have changes that are not yet reflected in a migration, and so won't be applied.
Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:17:33,736 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
System check identified some issues:
WARNINGS:
?: (axes.W001) You are using the django-axes cache handler for login attempt tracking. Your cache configuration is however invalid and will not work correctly with django-axes. This can leave security holes in your login systems as attempts are not tracked correctly. Reconfigure settings.AXES_CACHE and settings.CACHES per django-axes configuration documentation.
Set site URL to 127.0.0.1:18000
Using django's development server on port 8000...
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:17:36,005 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
/home/wger/src/settings/main.py:117: UserWarning: JWT_PRIVATE_KEY / JWT_PUBLIC_KEY are not set. JWT authentication will not work until you run `./manage.py generate-jwt-keys` and add the output to your environment.
warnings.warn(
level=INFO ts=2026-10-06 21:17:37,185 module=apps path=/home/wger/.local/lib/python3.12/site-packages/axes/apps.py line=53 message=AXES: BEGIN version 8.3.1, blocking by ip_address
level=INFO ts=2026-10-06 21:17:37,196 module=autoreload path=/home/wger/.local/lib/python3.12/site-packages/django/utils/autoreload.py line=681 message=Watching for file changes with StatReloader
Performing system checks...
System check identified some issues:
WARNINGS:
?: (axes.W001) You are using the django-axes cache handler for login attempt tracking. Your cache configuration is however invalid and will not work correctly with django-axes. This can leave security holes in your login systems as attempts are not tracked correctly. Reconfigure settings.AXES_CACHE and settings.CACHES per django-axes configuration documentation.
System check identified 1 issue (0 silenced).
October 06, 2026 - 21:17:38
Django version 6.0.8, using settings 'settings.main'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead.
For more information on production servers see: https://docs.djangoproject.com/en/6.0/howto/deployment/
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:39] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "GET /en/user/login HTTP/1.1" 200 43815
[06/Oct/2026 21:17:40] "POST /en/user/login HTTP/1.1" 200 44014
[06/Oct/2026 21:17:40] "GET /en/dashboard HTTP/1.1" 302 0
[06/Oct/2026 21:17:40] "GET /en/dashboard HTTP/1.1" 302 0
[06/Oct/2026 21:17:40] "GET /en/dashboard HTTP/1.1" 302 0
[06/Oct/2026 21:17:40] "GET /en/dashboard HTTP/1.1" 302 0
@@ -0,0 +1,36 @@
#!/bin/bash
# usage: run.sh <label> <USE_GUNICORN True|False> <WORKERS>
set -u
L=$1; export USE_GUNICORN=$2 WORKERS=$3
export SECRET_KEY=$(head -c 32 /dev/urandom | base64 | tr -d '/+=')
cd /root/r762; O=/root/r762/out-$L; mkdir -p $O
docker compose -f compose.yml up -d >$O/up.txt 2>&1
ID=$(docker inspect -f '{{.Id}}' r762-wger)
CG=$(find /sys/fs/cgroup -maxdepth 4 -type d -name "*$ID*" | head -1); echo "cg=$CG" > $O/cg.txt
( max=0; while docker inspect r762-wger >/dev/null 2>&1; do a=$(awk '$1=="anon"{print $2}' $CG/memory.stat 2>/dev/null); [ -n "$a" ] && [ "$a" -gt "$max" ] && max=$a && echo $max > $O/anon-max; sleep 0.5; done ) &
SAMP=$!
# wait for the server to answer
t0=$(date +%s); for i in $(seq 1 240); do c=$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:18000/en/user/login); [ "$c" = 200 ] && break; sleep 1; done
echo "ready_after_s=$(( $(date +%s)-t0 )) code=$c" > $O/ready.txt
CSS=$(curl -s http://127.0.0.1:18000/en/user/login | grep -o '/static/[^"]*\.css[^"]*' | head -1); echo "css=$CSS" >> $O/ready.txt
# page loads: login page + its CSS, 10 times sequential, then 20 concurrent login GETs
for i in $(seq 1 10); do curl -s -o /dev/null -w 'login %{http_code} %{time_total}\n' http://127.0.0.1:18000/en/user/login; curl -s -o /dev/null -w 'css %{http_code} %{time_total}\n' "http://127.0.0.1:18080${CSS%%\?*}"; done > $O/loads.txt
seq 1 20 | xargs -P 10 -I{} curl -s -o /dev/null -w 'conc %{http_code} %{time_total}\n' http://127.0.0.1:18000/en/user/login >> $O/loads.txt
# signed in: the image default admin (not a secret of any box; not written anywhere)
J=$O/jar; rm -f $J
curl -s -c $J -b $J http://127.0.0.1:18000/en/user/login -o /dev/null
TOK=$(awk '$6=="csrftoken"{print $7}' $J)
curl -s -c $J -b $J -o /dev/null -w 'signin %{http_code} %{time_total}\n' -e http://127.0.0.1:18000/en/user/login -d "csrfmiddlewaretoken=$TOK&username=admin&password=<image-default, redacted>" http://127.0.0.1:18000/en/user/login >> $O/loads.txt
for i in 1 2 3; do curl -s -c $J -b $J -o /dev/null -w 'dashboard %{http_code} %{time_total}\n' http://127.0.0.1:18000/en/dashboard; done >> $O/loads.txt
curl -s -c $J -b $J http://127.0.0.1:18000/en/dashboard | grep -c -i 'logout' > $O/signed-in-logout-links.txt
rm -f $J
sleep 3
grep -E '^(oom|oom_kill) ' $CG/memory.events > $O/events.txt
awk '$1=="anon"||$1=="file"{print}' $CG/memory.stat > $O/stat-end.txt
cat $CG/memory.peak > $O/memory.peak 2>/dev/null
docker inspect -f 'restarts={{.RestartCount}} oomkilled={{.State.OOMKilled}} status={{.State.Status}}' r762-wger > $O/inspect.txt
docker logs r762-wger > $O/wger.log 2>&1
grep -E 'Using gunicorn|Using django|Booting worker|Listening at|Starting gunicorn|Starting development server' $O/wger.log > $O/server-lines.txt
docker compose -f compose.yml down -v >$O/down.txt 2>&1
kill $SAMP 2>/dev/null
echo done
+1 -1
View File
@@ -129,7 +129,7 @@ stopping line that lies.
| **R-562** | Apps & catalog | P3 | **[P3-LOW] Dates and sizes are not formatted for any locale — and the Hungarian pages disagree with themselves.** FOUND 2026-09-17 by the i18n inventory §2.8: the two template date layouts differ (`2006. 01. 02. 15:04` Hungarian vs `2006-01-02 15:04` ISO); 10 layout literals in `internal/web` Go and 25 elsewhere pick formats ad hoc; sizes print a decimal POINT (`%.1f GB`, 4 helpers) where Hungarian uses a comma; `timeAgo`/`nextRunLabel`/`pruneLabel` produce Hungarian words outside the three converted pages. Not changed by v0.247.0 (Hungarian bytes are frozen by the parity rule). **Fix shape:** one date and one size formatter per language in `internal/i18n`, the Hungarian output deliberately changed in ONE reviewed release with the parity fixtures re-captured for that release only and the change named in its CHANGELOG. Needs an operator word on the Hungarian format (comma, date style). | **READY - rank P3-LOW; owner: CC** **2026-10-06 night: not started — the row needs the operator's word on the Hungarian format (decimal comma, date style) before any code.** | — | — | CC |
| **R-612** | Apps & catalog | P3 | **[P1-HIGH] `wishlist` cannot be signed up to on a fresh Felhom install, the deploy reports SUCCESS, and the error the customer sees is a LIE.** MEASURED 2026-09-21 on guest 9202 while seeding for the power-cut drill. The image's first-boot `pnpm prisma db seed` is **`Killed` — OOM at the catalog's `mem_limit: 128M`**. Without it the `Role` and `Group` rows are absent, so **every** signup fails. **The message the user is shown is `User with username or email already exists`** while the container log says the real cause: `FOREIGN KEY constraint violated`. A household would conclude the account already exists and try to recover a password that was never created. **The controller reports the app running and HEALTHY throughout, and the deploy reported successful** — so nothing on the box says anything is wrong. Repaired on the scratch guest only, to unblock seeding: memory raised to 512 M, the image's own seed re-run, memory put back to 128 M. **The catalog was NOT changed** — the fix is a memory-limit question for the catalog and is deliberately left to a session that can measure the real ceiling rather than guess it. **Needs: the actual peak RSS of that seed, then a `mem_limit` that clears it, plus a check that the seed's failure is not silent.** **— FIXED 2026-09-23 night (catalog `a5a729a`): 512M.** Measured on the bench: the seed peaks at 312–345M and was OOM-killed at 128M on every run (kernel `oom_kill` 3); running, the app sits at ~115M (90 % of the old limit alone). On 9202 at 128M the kill came AFTER the Role/Group rows this time, so the sign-up lie did NOT reproduce — the kill is timing-dependent, the fault is memory (the brief's claim held). At 512M the seed completes (`The seed command has been executed`), and wishlist then moved v0.66.0 → v0.67.1 with its test record. **Still open:** a failed first-boot seed is invisible to the box — nothing reads the seed's exit. | **READY — P3, narrowed to making a failed seed visible; owner: CC (catalog)** **Re-ranked 2026-10-03: P1->P3: the memory fix shipped (catalog a5a729a); only the silent-seed detection remains.** **2026-10-06 night: fixed on catalog branch `night-held-2026-10-06`** (`d4150d7`) — the healthcheck needs the role rows and a group or user (node:sqlite, read-only); bench: seedless DB old check rc 0, new rc 1; seeded both rc 0 (`audits/night-burndown-2026-10-06/cat/R-612-red.txt`). Reaches main after the read-back. | — | — | CC |
| **R-676** | Apps & catalog | P3 | **[P3-LOW] Watch: immich's first start restarted 12 times — decision 28's crash-loop stop (6 in 10 min) would stop it.** From the 2026-09-17 chaos night (DB connection dropped during the first-start geocoding import on a 6 GB guest; it did not recover that night). No healthy app in any drill evidence restarts on a first start (1831 samples, 40 live containers), so the threshold stands; this row exists so the first immich install under v0.269.x is watched. `audits/night-2026-09-24/A3/40-first-start-restarts.txt` **2026-09-25 night (read from source, v0.271.0): a DEPLOY's first start is NOT covered by decision 28's suppression** — `Deploying` clears when `compose up -d` returns (`deploy.go` "Clear deploying flag"), and `ObserveUnhealthy` then samples the app; an automatic update's step, verify and undo ARE covered (`Updating`, pinned by `TestD28_NoCrashLoopStopDuringAnAutomaticStep`). So a first start that restarts ≥ 6 times in 10 min is stopped — which R-676 already accepts for a broken first start; a healthy slow first start would be stopped too. **-- 2026-09-30: the first-start restarts are explained.** immich's first-start geodata import OOM-kills its database at 512M on a guest with no swap (R-732, measured: 61–104 kills); the 2026-09-17 chaos-night case (DB connection dropped during the import on a 6 GB guest) fits it. Fixed in the catalog (`56c4888`, 768M). The watch itself (decision 28 on a DEPLOY's first start) is unchanged. | **OPEN — P3; owner: CC (watch)** | — | — | CC |
| **R-762** | Apps & catalog | P3 | **[P2-MEDIUM] wger serves no CSS or JavaScript and no uploaded photo: every static file and every `/media/` file answers 404.** MEASURED 2026-10-01 on 9202 (drill catalog, the live template `82fff32`, wger 2.7), found by checklist rows 1.7 and 2.8: the login page links `/static/css/workout-manager.css`, `/static/bootstrap-compiled.css` — both 404 through traefik; the static root inside the container is empty (4 KB). A progress photo posted to `/api/v2/gallery/` answered 201 and the file is on the media volume, but `GET /media/gallery/…png` answers 404 signed in, without a session, and straight at the app inside the container. **Cause, read in the image:** the entrypoint runs `collectstatic` only when `DJANGO_DEBUG == "False"` and the template sets no `DJANGO_DEBUG`; and wger serves `/media/` only in development (`urls.py:393` „served like this during development only”) — upstream's production setup puts nginx in front for `/static` and `/media`. So the household gets an unstyled app and photos that never show. The same lines stand since the template was written (the 2026-09-29 template too). Not checked: whether any box runs wger (on 2026-09-30 none reported to the hub). **Needs:** `DJANGO_DEBUG=False` (collectstatic) and something that serves `/static` + `/media` (upstream's nginx sidecar, or the gunicorn switch of R-755 plus a static server), proven on the bench and on 9202 with a page that loads its CSS and a photo read back. Owner decides together with R-755 (same server question). `audits/new-app-checklist-2026-10-01/C/C8-signup-guest-media-static.txt`, `C/C4-seed-photo-size.txt` **-- 2026-10-01 (operator):** wger is `lifecycle: hidden` until this and its twin are fixed (catalog `55b8c8a`; read back on 9202: not on the app list, mealie control present). **Merged 2026-10-05 from R-755 (duplicate):** `templates/wger/docker-compose.yml` still sets no `WGER_USE_GUNICORN` — the gunicorn switch is the same server question. **-- 2026-10-06 (afternoon), measured again on 9202 (live template, wger 2.7):** `/static/css/workout-manager.css` 404 straight at the app, `/home/wger/static` 4 KB, settings `DEBUG False`; the image has gunicorn but no whitenoise and runs Django's `runserver` (no `WGER_USE_GUNICORN`, R-755). So `DJANGO_DEBUG=False` alone would collect the files and still serve none: the fix needs a server for `/static` + `/media` (a second container) — medium, not taken. `audits/r890-instructions-2026-10-06/C/wger.txt`. | **READY — rank P2-MEDIUM; owner: CC (catalog)** **Re-ranked 2026-10-03: P2→P3: wger is hidden from installs and no box runs it; needed only before it is offered again.** **2026-10-06: NARROWED — the files are served.** Catalog `cf1ed43`: `DJANGO_DEBUG=False` + a `wger-files` nginx serving `/static` and `/media`, a definition step proven on the bench (harness v5) and on 9202 (photo 404 → 200, CSS 404 → 200). **What remains is R-755's merged half:** wger still runs Django's `runserver`; upstream's gunicorn runs 3 workers, which do not fit wger's 384 MB — a memory decision and a new proof. Known cost of the fix: the collected static files are 283 MB in a named volume, in every backup of wger. Ready to show? Its files and sign-up are fixed and proven; the server question is open — `audits/design-build-2026-10-06/`F/. | — | Decide the gunicorn worker count against the memory limit, prove it on both venues; then the operator decides whether wger is shown. If nothing: wger stays hidden | CC |
| **R-762** | Apps & catalog | P3 | **[P2-MEDIUM] wger serves no CSS or JavaScript and no uploaded photo: every static file and every `/media/` file answers 404.** MEASURED 2026-10-01 on 9202 (drill catalog, the live template `82fff32`, wger 2.7), found by checklist rows 1.7 and 2.8: the login page links `/static/css/workout-manager.css`, `/static/bootstrap-compiled.css` — both 404 through traefik; the static root inside the container is empty (4 KB). A progress photo posted to `/api/v2/gallery/` answered 201 and the file is on the media volume, but `GET /media/gallery/…png` answers 404 signed in, without a session, and straight at the app inside the container. **Cause, read in the image:** the entrypoint runs `collectstatic` only when `DJANGO_DEBUG == "False"` and the template sets no `DJANGO_DEBUG`; and wger serves `/media/` only in development (`urls.py:393` „served like this during development only”) — upstream's production setup puts nginx in front for `/static` and `/media`. So the household gets an unstyled app and photos that never show. The same lines stand since the template was written (the 2026-09-29 template too). Not checked: whether any box runs wger (on 2026-09-30 none reported to the hub). **Needs:** `DJANGO_DEBUG=False` (collectstatic) and something that serves `/static` + `/media` (upstream's nginx sidecar, or the gunicorn switch of R-755 plus a static server), proven on the bench and on 9202 with a page that loads its CSS and a photo read back. Owner decides together with R-755 (same server question). `audits/new-app-checklist-2026-10-01/C/C8-signup-guest-media-static.txt`, `C/C4-seed-photo-size.txt` **-- 2026-10-01 (operator):** wger is `lifecycle: hidden` until this and its twin are fixed (catalog `55b8c8a`; read back on 9202: not on the app list, mealie control present). **Merged 2026-10-05 from R-755 (duplicate):** `templates/wger/docker-compose.yml` still sets no `WGER_USE_GUNICORN` — the gunicorn switch is the same server question. **-- 2026-10-06 (afternoon), measured again on 9202 (live template, wger 2.7):** `/static/css/workout-manager.css` 404 straight at the app, `/home/wger/static` 4 KB, settings `DEBUG False`; the image has gunicorn but no whitenoise and runs Django's `runserver` (no `WGER_USE_GUNICORN`, R-755). So `DJANGO_DEBUG=False` alone would collect the files and still serve none: the fix needs a server for `/static` + `/media` (a second container) — medium, not taken. `audits/r890-instructions-2026-10-06/C/wger.txt`. | **READY — rank P2-MEDIUM; owner: CC (catalog)** **Re-ranked 2026-10-03: P2→P3: wger is hidden from installs and no box runs it; needed only before it is offered again.** **2026-10-06: NARROWED — the files are served.** Catalog `cf1ed43`: `DJANGO_DEBUG=False` + a `wger-files` nginx serving `/static` and `/media`, a definition step proven on the bench (harness v5) and on 9202 (photo 404 → 200, CSS 404 → 200). **What remains is R-755's merged half:** wger still runs Django's `runserver`; upstream's gunicorn runs 3 workers, which do not fit wger's 384 MB — a memory decision and a new proof. Known cost of the fix: the collected static files are 283 MB in a named volume, in every backup of wger. Ready to show? Its files and sign-up are fixed and proven; the server question is open — `audits/design-build-2026-10-06/`F/. **2026-10-06 night: the server question MEASURED on bench 9401** (wger 2.7, template 384M, `wger-files` in front; `audits/night-burndown-2026-10-06/r762/RESULT.md`): runserver anon 201 MB (52 %), gunicorn 1 worker 165 MB (43 %), 2 workers 157 MB (41 % — `--preload` shares pages); oom_kill 0 and restarts 0 in all three; login page and its CSS 200 every time; 20 GETs, 10 at once: avg 394 / 241 / 124 ms. The worker count is gunicorn's `WEB_CONCURRENCY` (the image passes no `-w`). Pick the numbers support: `WGER_USE_GUNICORN=True` + `WEB_CONCURRENCY=2`. Not measured: a signed-in page. Not built: the template change. | — | Decide the gunicorn worker count against the memory limit, prove it on both venues; then the operator decides whether wger is shown. If nothing: wger stays hidden | CC |
| **R-76** | Apps & catalog | P4 | **FileBrowser-created folders break the setgid chain, and a drop-zone's mode is not stable** **MIGRATED FROM `ROADMAP.md` 2026-08-22 (R-369) — originally filed 2026-07-26, size S, roadmap state `idea (surfaced by the R-75 spike, 2026-07-26)`.** Moved verbatim; nothing added or reinterpreted. The roadmap keeps its copy as history, marked moved. | **OPEN — migrated from ROADMAP 2026-08-22, rank unchanged** **2026-10-06 night: not a catalog fix** — the setgid chain is set by the controller's FileBrowser setup; a controller row. | — | Two related findings from `audits/SPIKE-catalog-data-paths-2026-07-26.md` P3/P5, both **pre-existing** and deliberately left alone by that spike. **(a)** FileBrowser Quantum 1.3.3 creates files `0644` and folders `0755` and does **not** propagate the setgid bit — even though the entrypoint wrapper's `umask 002` really is in effect (`/proc/1/status` `Umask: 0002`). Group inheritance itself works (a file uploaded into a 2775 group-100 dir landed group 100, not the process gid 1000), so the convention's *group* half holds and only its *mode* half is lost. The consequence is proven with a control: inside a UI-created `0755` folder a gid-1000 process's file landed group **1000**, while the identical write into the 2775 parent landed group **100**. So **any folder a customer creates through FileBrowser breaks the shared-group chain one level down.** Latent today — every userdata-touching catalog app that declares an identity declares uid/gid **1000**, the same uid FileBrowser runs as, so owner permissions mask it; it bites the day a content app runs as a different non-root uid with gid 1000. The comment at `infra/infra.go:156` is right that the image ignores `-e UMASK` but does not say t | CC |
| **R-577** | Apps & catalog | P4 | **[P3-LOW] A guest SHARE visitor has no way to pick a language, and the household's setting is the wrong default for them.** FOUND 2026-09-18 by localisation slice 2 release C (R-557, controller v0.254.0): every other page a person can reach now carries a language globe — the dashboard (the household's setting), and the sign-in and claim pages (the visitor's own cookie). The two guest share pages (`launcher_shared`, `launcher_share_password`) deliberately do NOT, and `TestGuestSharePagesHaveNoGlobe` pins that so it stays a decision rather than an oversight. **Why it is the operator's and not CC's:** a share visitor is a stranger the household sent a link to, and what language they are shown is a promise the SHARE FEATURE makes, not an implementation detail. The `felhom_lang` cookie already built would fit them exactly (display-only, their own browser, never the household's setting). **Fix shape, if the operator says yes:** add `{{template "lang_globe" .}}` to both shells with the anonymous form, and one render case per page per language. | **READY - rank P3-LOW; owner: operator (the decision), CC (the change)** **Re-ranked 2026-10-03: P3->P4: feature decision for the operator; Hungarian default works today.** | — | — | operator |
| **R-707** | Apps & catalog | P4 | **[P2] 37 apps still start with a login a stranger can take (`09` §3 decision 45).** Audit of all 53 apps: `app-catalog-felhom.eu/FIRST-ADMIN.md` (class, fix route, status, measured or read). Open: **3 hard-coded defaults** — calibre-web (`admin / admin123`, measured working on demo-hp and 9202; its own `cps.py -s` route needs a generated password WITH a special character — our generator is letters+digits, a controller change), mealie (`changeme@example.com / MyPassword`), wger (`admin / adminadmin`); **34 open first-run screens** (the first visitor creates the admin: actualbudget, adventurelog, audiobookshelf, calcom, docmost, emby, ghost, gitea, gramps-web, home-assistant, homebox, immich, jellyfin, komga, n8n, navidrome, opengist, outline, papra, plant-it, radarr, rallly, recipe-importer, romm, seerr, sonarr, sparkyfitness, tandoor, termix, uptime-kuma, vikunja, wanderer, wishlist, zipline). **Stale notes:** romm's `default_creds` `admin / admin` answers 401 on demo-hp (like a wrong password) — the page now warns with a login that does not exist; zipline's looks stale too. **Measured on demo-hp 2026-09-28 (read-only):** bookstack's default still logs in on the INSTALLED app (the fix is for new installs; the page now warns). Each fix: route (a) env or (b) the app's own CLI/API via `after_install:`, proven on 9202 with the default failing and the generated password working; route (c) a page sentence. Several sessions (operator, 2026-09-28). **2026-09-29 (controller v0.280.0, catalog `d0e7e2e`):** every class-3 app fixed — mealie, wger, calibre-web by `after_install` (calibre-web with the new `password:24:special`), proven on 9202 fresh installs (`audits/login-gate-2026-09-29/D/`); the setup gate (decision 46, spike PASSED) built and live on immich, n8n, audiobookshelf (probes measured) and uptime-kuma (button) (`…/C/`); romm's and zipline's stale notes removed. **Left: 30 class-4 apps** — gate each (probe measured on 9202 where one exists — 11 upstream candidates listed in `…/B/B-VERDICT.md` §3; the button otherwise). **2026-09-29 afternoon (controller v0.281.0, catalog `6faf432`):** 28 more class-4 apps gated — 32 of 34 — each proven on 9202 (`audits/gate-rollout-2026-09-29/`B): stranger → gate page / 401, household reached the first-setup screen, the gate opened (9 by a measured probe, the rest by the press), the app answered after. seerr, outline, rallly: gated, their opening needs a media server / e-mail (not proven). **Left:** wanderer (R-714); plant-it is not installable. | **NARROWED** (2026-10-03 triage: the row's verdict was finished, but it names open work no other row carries — seerr, outline and rallly are gated, but the gate OPENING is not proven (needs a media server / e-mail)) — **CLOSED — 2026-09-29 (the rest → R-714)** | — | — | CC |