Skip to content

fix(env): default DJANGO_BPP_MEDIA_ROOT=/mediaroot#7

Merged
mpasternak merged 1 commit into
mainfrom
fix/media-root-default
Jun 2, 2026
Merged

fix(env): default DJANGO_BPP_MEDIA_ROOT=/mediaroot#7
mpasternak merged 1 commit into
mainfrom
fix/media-root-default

Conversation

@mpasternak

Copy link
Copy Markdown
Member

Problem

DJANGO_BPP_MEDIA_ROOT był ustawiany nigdzie, więc Django brał swój wbudowany domyślny MEDIA_ROOT (~/bpp-media = /root/bpp-media w kontenerze) — poza wolumenem media montowanym pod /mediaroot we wszystkich kontenerach Django.

Skutki:

  • pliki uploadowane przez użytkowników znikają przy każdym docker compose up/recreate (są w warstwie kontenera, nie w wolumenie),
  • nie trafiają do backupubackup-cycle.sh taruje /mediaroot, nie /root.

Rozwiązanie

DJANGO_BPP_MEDIA_ROOT=/mediaroot ustawiane w trzech skoordynowanych miejscach, żeby wartość trafiła do .env w każdym scenariuszu (zgodnie z kontraktem kompatybilności wstecznej — git pull && make up musi działać bez ręcznych kroków):

Miejsce Pokrywa
init-configs.sh — heredoc nowego .env (obok STATIC_ROOT) nowe instalacje
init-configs.shensure_env_var backfill przy make init-configs
ensure-config-files.sh — append-only self-heal (_ensure_var) istniejące instalacje na zwykłym make up/refresh — bez ręcznej edycji

Dodatkowo:

  • wartość bez cudzysłowów (guard validate-env-quotes odrzuca cudzysłowy),
  • self-heal jest append-only — ręczne nadpisanie ścieżki przez użytkownika jest zachowywane,
  • refaktor: wspólny helper _ensure_var; _ensure_secret to teraz cienki wrapper nad nim — identyczny komunikat logu, wartość sekretu nadal nigdy nie trafia do logu.

Dokumentacja

  • nowa sekcja „Media" w docs/konfiguracja/architektura.md (równolegle do STATIC_ROOT),
  • notka agent-steering w CLAUDE.md.

Weryfikacja

  • bash -n — oba skrypty OK; pre-commit (shellcheck, TruffleHog, detect-private-key) zielony.
  • Self-heal przetestowany na 4 przypadkach: brak zmiennej + brak trailing newline, zmienna już istnieje (bez duplikatu), pusta linia VAR= (zastąpiona), nadpisanie użytkownika (zachowane).
  • _ensure_secret po refaktorze: byte-identyczny log, brak wycieku wartości.
  • mkdocs build --strict nie uruchomiony lokalnie (mkdocs niezainstalowany, PEP 668) — edycja dodała tylko prozę + jeden nagłówek do strony już w nav, bez nowych linków, więc CI (docs.yml) to pokryje.

🤖 Generated with Claude Code

Without DJANGO_BPP_MEDIA_ROOT Django falls back to its built-in default
(~/bpp-media = /root/bpp-media in the container), off the `media` volume
mounted at /mediaroot in every Django container. Uploads then vanish on
container recreate and are excluded from backups (backup-cycle.sh tars
/mediaroot, not /root).

Set the var in three coordinated places so it lands in .env in every
scenario (backwards-compat contract: `git pull && make up` must work with
no manual step):
- init-configs.sh heredoc        -> fresh .env (sibling of STATIC_ROOT)
- init-configs.sh ensure_env_var -> backfill on `make init-configs`
- ensure-config-files.sh         -> append-only self-heal, runs on every
                                    `make up`/`refresh`, fixes old .env
                                    files automatically (no manual step)

Value is unquoted to satisfy the validate-env-quotes guard; self-heal is
append-only so a user override is preserved.

Refactor: shared _ensure_var helper in ensure-config-files.sh;
_ensure_secret is now a thin wrapper over it (byte-identical log output,
secret value still never written to the log).

Docs: parallel "Media" section in docs/konfiguracja/architektura.md and
an agent-steering note in CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@mpasternak mpasternak merged commit 4cb6865 into main Jun 2, 2026
4 of 5 checks passed
@mpasternak mpasternak deleted the fix/media-root-default branch June 2, 2026 12:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant