- 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
3.6 KiB
Runbook 40 — utrzymanie
Serwer psuje się powoli i po cichu. Te przeglądy zajmują kilka minut i zapobiegają sytuacji, w której o problemie dowiadujesz się od użytkownika.
Przegląd tygodniowy — 5 minut
df -h / # < 75%
docker system df # co rośnie
docker ps -a # nic w restart loop
free -h # swap w użyciu? coś przecieka
uptime # load average
sudo fail2ban-client status sshd
Czerwone flagi:
| Objaw | Co znaczy |
|---|---|
| Dysk > 75% | czas na sprzątanie, nie za tydzień |
Kontener z rosnącym RESTARTS |
crash loop — sprawdź logi |
| Swap mocno zajęty przy 12 GB RAM | wyciek pamięci w którymś kontenerze |
| Skok liczby banów fail2ban | ktoś się interesuje maszyną |
Przegląd miesięczny — 30 minut
Aktualizacje systemu
sudo apt update
apt list --upgradable
Zanim upgrade: snapshot OVH. Potem:
sudo apt upgrade -y
ls /var/run/reboot-required 2>/dev/null && echo "wymagany restart"
Restart robimy świadomie, po snapshocie, nie w środku pracy.
Aktualizacje obrazów
Obrazy są przypięte do wersji, więc pull sam nic nie podniesie — i o to chodzi.
Podnoszenie wersji to świadoma decyzja:
- Sprawdź changelog obrazu pod kątem breaking changes
- Podnieś tag w
compose.yaml - Snapshot
docker compose pull && docker compose up -d- Weryfikacja:
curl -I, logi,docker compose ps - Commit
Jedna usługa naraz. Aktualizacja pięciu rzeczy jednocześnie oznacza, że przy awarii nie wiesz, która zawiniła.
Sprzątanie dysku
docker system df
docker image prune -a # bezpieczne
docker builder prune # zwykle najwięcej odzyskuje
sudo journalctl --disk-usage
sudo journalctl --vacuum-time=30d
Wolumeny — nigdy hurtem:
docker volume ls -f dangling=true
# sprawdź każdy, potem docker volume rm <nazwa>
Bezpieczeństwo
sudo journalctl -u ssh --since "1 month ago" | grep -i "accepted" | tail -30
sudo cat /home/ubuntu/.ssh/authorized_keys # tylko znane klucze?
sudo ufw status verbose # tylko 22/80/443?
docker ps --format "table {{.Names}}\t{{.Ports}}" # nic na 0.0.0.0?
Ostatnia komenda jest ważniejsza, niż wygląda. Opublikowany port kontenera na
0.0.0.0 omija ufw i jest widoczny z internetu — a ufw status tego nie pokaże.
Certyfikaty
echo | openssl s_client -connect git.dfkk.cloud:443 2>/dev/null | \
openssl x509 -noout -dates
Odnowienie następuje automatycznie ~30 dni przed wygaśnięciem. Jeśli zostało mniej niż 14 dni — coś się zacięło, sprawdź logi Traefika i klucze API OVH.
Dokumentacja
SERVER.mdzgodny ze stanem faktycznym?- Lista braków w
SECURITY.md, sekcja 8 — coś do odhaczenia? - Repo
infrazacommitowane i zmirrorowane na GitHub?
Przegląd kwartalny
- Test odtworzenia z backupu. Nie „sprawdzenie, że plik istnieje" — faktyczne przywrócenie danych i weryfikacja, że są kompletne. Backup, którego nie odtworzyłeś, to założenie, nie zabezpieczenie.
- Rotacja tokenów API (OVH, GitHub, SMTP)
- Przegląd kluczy SSH — czy wszystkie urządzenia z listy nadal istnieją i są Twoje
- Przegląd projektów: czy wszystko, co działa, jest jeszcze potrzebne? Nieużywana usługa to zajęty dysk, otwarta powierzchnia ataku i pakiety, których nikt nie aktualizuje.
- Weryfikacja, czy
CLAUDE.mdodpowiada temu, jak faktycznie pracujemy — jeśli zasada jest regularnie omijana, trzeba ją zmienić albo zacząć stosować