Repository navigation
feat(backup): backup katalogu konfiguracyjnego (.env z kluczem szyfrowania) w cyklu nocnym - #42
Merged
Merged
Conversation
.env trzyma klucz szyfrowania sekretow integracji (DJANGO_BPP_FIELD_ENCRYPTION_KEY, #41) - bez niego odtworzona baza ma nieczytelne tokeny PBN/hasla integracji. Katalog konfiguracyjny jest teraz archiwizowany tak samo jak baza: - krok 2b backup-cycle.sh: config-backup-<TS>.tar.gz (0600, ten sam timestamp) obok zrzutow, ta sama rotacja (KEEP_LAST) i wysylka rclone copy; blad lub brak mountu to ostrzezenie + adnotacja config=... w Rollbarze, nigdy zmiana kodu wyjscia (sam git pull nie dodaje mountu); - backup-runner: mount ${BPP_CONFIGS_DIR}:/configs:ro (wymaga make up); - scripts/config-backup.sh: jedno zrodlo dla cyklu i `make config-backup` (efemeryczny alpine); `make backup` obejmuje konfiguracje; - `make restore-config FILE=...` (scripts/restore-config.sh): walidacja archiwum, roznice tylko po nazwach zmiennych, potwierdzenie "tak", kopia .env.przed-restore-<TS>; dziala bez repo .env (swiezy host), zeby nie odpalac init-configs generujacego nowy klucz; - testy: tests/test_makefile.sh (config-backup, restore-config, FIRST_RUN, mount), scripts/test-rclone.sh §3b + busybox ash; - docs: backup-i-rclone.md, architektura.md, przenosiny-serwera.md, komendy.md, CLAUDE.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UJ23Rb1c5UtxHTfAke9ENQ
…POSIX) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UJ23Rb1c5UtxHTfAke9ENQ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Po co
Od #41
.envtrzymaDJANGO_BPP_FIELD_ENCRYPTION_KEY— bez niego odtworzona baza ma nieczytelne tokeny PBN / hasła integracji. Do tej pory backup obejmował tylko bazę i media;.envtrzeba było kopiować ręcznie.Co
Katalog konfiguracyjny (
$BPP_CONFIGS_DIR:.env,rclone/rclone.conf,ssl/,letsencrypt/, monitoring; bezlogs/,*.log) jest archiwizowany tak samo jak baza (decyzja właściciela: bez obowiązkowego szyfrowania hasłem):scripts/backup-cycle.sh, krok 2b):config-backup-<TS>.tar.gzobok zrzutów, ten sam timestamp, tryb 0600 (umask 077przed utworzeniem), właściciel = właściciel katalogu backupów; ta sama rotacja (prune_type config-backup,KEEP_LAST) i ta sama wysyłkarclone copydo katalogu miesięcznego. Osobny plik, nie wewnątrz dumpu bazy.make up) →config=BRAK-MOUNTU(make up); błąd tar →config=BLAD(exit=N)— ostrzeżenie w logu + adnotacja w komunikacie do Rollbara, kod wyjścia cyklu bez zmian (samgit pullzmieniascripts/na bind-mouncie, więc fatalny krok wywracałby każdy nocny backup bazy aż domake up).backup-runner: nowy mount${BPP_CONFIGS_DIR}:/configs:ro→ wymagamake up.scripts/config-backup.sh— jedno źródło (POSIX, przetestowane pod busybox ash) dla cyklu imake config-backup(efemerycznyalpine, jakmedia-backup);make backup= baza + media + konfiguracja.make restore-config FILE=... [ONLY_ENV=1] [BPP_CONFIGS_DIR=...](scripts/restore-config.sh): walidacja wpisów (../ścieżki absolutne → odmowa), różnice tylko po nazwach zmiennych + osobne ostrzeżenie przy zmianie klucza, potwierdzenie słowemtak(EOF/brak TTY = nic się nie zmienia), kopia.env.przed-restore-<TS>(0600) i archiwum poprzedniego katalogu, rozpakowanie z zachowaniem uprawnień. Zdefiniowany przedifdef FIRST_RUN— na świeżym hościemake→init-configswygenerowałby nowy klucz; restore sam zapisuje repo-lokalny.env.Testy
tests/test_makefile.sh:test_config_backup_script,test_restore_config,test_restore_config_first_run,test_backup_runner_mounts_configs(mutacyjnie sprawdzone: usunięcie umask/chmod i akceptacja dowolnej odpowiedzi zapalają testy).scripts/test-rclone.sh§3b: e2e cyklu (archiwum z.env, ten sam TS, 0600, rotacja do 7, brak mountu i błąd tar → exit 0 + adnotacja) oraz §6 pod busybox ash (docker:28-cli).Docs
docs/eksploatacja/backup-i-rclone.md(nowa sekcja „Backup konfiguracji (.env)” z odtwarzaniem i procedurą nowego serwera po awarii), link z sekcji klucza wdocs/konfiguracja/architektura.md,przenosiny-serwera.md,komendy.md,CLAUDE.md.Po wdrożeniu (admin)
git pull && make up(nowy mount wbackup-runner).config=<rozmiar>(nieBRAK-MOUNTU).backup_enc:w menedżerze haseł —rclone.confjest w archiwum, które samo leży za tym hasłem na zdalnym.🤖 Generated with Claude Code
https://claude.ai/code/session_01UJ23Rb1c5UtxHTfAke9ENQ