- gitea/gitea:1.27.2 + postgres:18.6 (najnowsze stabilne tagi)
- rejestracja wyłączona od startu (DISABLE_REGISTRATION=true),
bezpieczniej niż wyłączanie ręcznie po pierwszym logowaniu
- baza tylko w sieci gitea-internal, bez edge
- postgres 18+: poprawiony mount na /var/lib/postgresql (zmiana
konwencji względem starszych wersji, image inaczej nie startował)
- dane w /srv/data/gitea/{gitea,postgres}, .env poza repo
- dodano DNS wildcard *.dfkk.cloud -> 54.38.159.156
- zweryfikowane: HTTPS 200, cert Let's Encrypt ważny, rejestracja
faktycznie zablokowana, SSH kontenera nieopublikowany na hosta
- sshd_config.d/99-hardening.conf: PasswordAuthentication no,
PermitRootLogin no, AllowUsers ubuntu
- Naprawiono konflikt z sshd_config.d/50-cloud-init.conf, który
po restarcie nadpisywał hasła z powrotem na "yes" (kolejność
alfabetyczna Include) — poprawiono plik i dodano ssh_pwauth: false
w cloud.cfg.d/, żeby nie wróciło po reboocie
- Zweryfikowane: logowanie kluczem działa, hasło zablokowane
- Krok 9 (tmux): tee -> tee -a (nie nadpisuj configu), dodano
focus-events on, poprawiono nazwę sesji na "bootstrap"
- Krok 10: struktura katalogów odzwierciedla stan faktyczny
(/srv i /srv/infra już istnieją, brakuje apps i data)
- Krok 12: Claude Code oznaczony jako wykonany 20-08-2026,
instalator natywny bez Node.js
- Nowy Krok 14: audyt po bootstrapie (SSH, ufw, fail2ban,
unattended-upgrades, swap, Docker, porty, klucze)
- HANDOFF.md: poprawiona numeracja sekcji 6