- 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
110 lines
5.7 KiB
Markdown
110 lines
5.7 KiB
Markdown
# HANDOFF.md — przekazanie kontekstu
|
|
|
|
Dokument jednorazowy. Powstał w rozmowie na claude.ai przed pierwszym uruchomieniem
|
|
serwera i przenosi ustalenia do sesji Claude Code na maszynie.
|
|
|
|
**Czytasz go raz, na starcie pierwszej sesji.** Trwałe zasady są w `CLAUDE.md`,
|
|
stan serwera w `docs/SERVER.md`, procedury w `docs/runbooks/`.
|
|
Po zakończeniu bootstrapu ten plik można usunąć.
|
|
|
|
---
|
|
|
|
## 1. Z kim pracujesz
|
|
|
|
**Kacper**, `k.kruszka@hotmail.com`. Pracuje z macOS, Windows i iOS.
|
|
|
|
Kluczowe: **to projekt edukacyjny z produkcyjnymi konsekwencjami.** Kacper uczy się
|
|
pracy z Claude i administracji serwerem — więc tłumaczysz co robisz i dlaczego,
|
|
nie tylko wykonujesz. Ale docelowo mogą tu stanąć rzeczy komercyjne, więc traktujesz
|
|
maszynę jak produkcję od pierwszego dnia.
|
|
|
|
Prosił wprost, żeby **proaktywnie podpowiadać** o narzędziach, skillach i funkcjach,
|
|
które mogą pomóc — nie czekać, aż sam zapyta.
|
|
|
|
---
|
|
|
|
## 2. Maszyna
|
|
|
|
| | |
|
|
|---|---|
|
|
| OVH VPS-2 2026 | 6 vCore, 12 GB RAM, 100 GB SSD |
|
|
| Host | `vps-c936b594.vps.ovh.net`, IPv4 `54.38.159.156` |
|
|
| System | Ubuntu 24.04 LTS, świeży |
|
|
| Panel OVH | region **CA** — ma znaczenie przy generowaniu tokenów API |
|
|
| Snapshot | włączony, 1 slot, ręczny, nadpisywany |
|
|
| Domena techniczna | `dfkk.cloud` (OVH, DNS w OVH) |
|
|
| Pozostałe domeny | dwie, nazwy jeszcze nieustalone, zostają wolne pod projekty |
|
|
|
|
---
|
|
|
|
## 3. Stan na teraz
|
|
|
|
- Kacper loguje się jako **`ubuntu`** (konto domyślne obrazu OVH, z `sudo`) — roota po SSH nie ma
|
|
- Bootstrap **nie został rozpoczęty**
|
|
- Pliki repo `infra` wgrane przez `scp` do `/srv/infra`
|
|
- Na serwerze jest klucz SSH wgrany przez OVH — **do weryfikacji przy kroku 0**
|
|
- **Logowanie hasłem jest nadal włączone.** Windows łączył się hasłem, więc nie ma tam
|
|
jeszcze klucza. Krok 2 bootstrapu musi to domknąć **przed** krokiem 3.
|
|
- Nie ma jeszcze: użytkownika `ubuntu`, Dockera, Traefika, Gitei, firewalla, niczego
|
|
|
|
**Następny krok: `docs/runbooks/00-bootstrap.md`, krok 0.**
|
|
|
|
---
|
|
|
|
## 4. Decyzje podjęte i uzasadnienie
|
|
|
|
Podjęte świadomie, po omówieniu alternatyw. **Nie otwieraj ich ponownie bez powodu** —
|
|
jeśli widzisz problem z którąś, powiedz to wprost, ale nie zaczynaj od zera.
|
|
|
|
| Decyzja | Dlaczego |
|
|
|---|---|
|
|
| Docker + Traefik, ręcznie | Zamiast panelu Coolify/Dokploy — pełna kontrola i więcej nauki. Świadomy wybór trudniejszej drogi. |
|
|
| Gitea self-hosted na tej maszynie | Wybór Kacpra. **Z warunkiem:** mirror repo `infra` na prywatne repo GitHuba, bo inaczej awaria zabiera kod i konfigurację naraz. |
|
|
| Certyfikaty przez DNS-01 (API OVH) | Wildcard `*.dfkk.cloud` — nowa subdomena nie wymaga żadnej akcji przy certyfikacie. Możliwe też usługi niepubliczne. |
|
|
| Praca przez SSH + tmux | Sesja przeżywa rozłączenie. Ten sam `tmux attach` z Maca, Windowsa i iPhone'a. VS Code Remote SSH jako dodatek, nie zamiennik. |
|
|
| Osobny klucz SSH na urządzenie | Zgubiony telefon = usunięcie jednej linii z `authorized_keys`. |
|
|
| Konto robocze `ubuntu`, bez tworzenia `deploy` | Obraz OVH daje `ubuntu` z `sudo` i działającym kluczem. Tworzenie nowego konta to dodatkowe ryzyko lockoutu przy marginalnym zysku — realną ochroną jest brak haseł, ufw i fail2ban, nie nietypowa nazwa użytkownika. |
|
|
| Kontenery nie publikują portów | Docker omija ufw — opublikowany port jest widoczny z internetu mimo `deny` w firewallu. Wejście wyłącznie przez Traefika. |
|
|
| Wersje obrazów przypięte, nigdy `:latest` | Żeby `docker compose pull` nie podmienił działającej aplikacji na zepsutą, i żeby był rollback. |
|
|
| Brak serwera pocztowego | OVH blokuje port 25, IP bez reputacji trafia do spamu. Maile przez zewnętrzny SMTP (Resend/Brevo). |
|
|
| Backup off-site odłożony | Kacper ma wykupione chmury, wrócimy do restica **zanim** pojawią się pierwsze prawdziwe dane. Do tego czasu snapshot OVH wystarcza. |
|
|
| Skille napisane później | Najpierw przejść runbooki ręcznie raz czy dwa, potem zamienić w skille to, co się faktycznie powtarza. |
|
|
|
|
---
|
|
|
|
## 5. Decyzje otwarte
|
|
|
|
- **`sudo` z hasłem czy `NOPASSWD` dla `ubuntu`?** Do rozstrzygnięcia w kroku 2 bootstrapu.
|
|
Rekomendacja z runbooka: `NOPASSWD`, ale z ustawionym hasłem jako furtka przez konsolę KVM.
|
|
- **Nazwy dwóch pozostałych domen** — do wpisania w `SERVER.md` gdy będą potrzebne.
|
|
- **Gdzie backup off-site** — Kacper ma wykupione chmury, do ustalenia który dostawca.
|
|
|
|
---
|
|
|
|
## 6. Rzeczy, o których trzeba pamiętać
|
|
|
|
Wynikły z rozmowy, łatwo je przeoczyć:
|
|
|
|
1. **Kacper nie zna jeszcze wszystkich mechanizmów.** Warto przy okazji wyjaśniać —
|
|
np. dlaczego `claude` odpalamy z `/srv/infra` (inaczej `CLAUDE.md` się nie załaduje),
|
|
po co `/context` i `/memory`.
|
|
2. **Repo `infra` to kanał między rozmowami.** Ustalenie, które nie trafi do
|
|
`CLAUDE.md`, `SERVER.md` albo runbooka, umiera razem z sesją. Ta zasada jest
|
|
powodem, dla którego `SERVER.md` ma być aktualizowany w tej samej sesji, co zmiana.
|
|
3. **`scp` był jednorazowy.** Od momentu postawienia Gitei repo idzie przez git.
|
|
Ręczne kopiowanie plików na serwer to nawyk, przez który po miesiącu nikt nie wie,
|
|
która wersja konfiguracji jest prawdziwa.
|
|
4. **Lista braków jest w `docs/SECURITY.md`, sekcja 8.** Najpilniejsze: mirror na GitHub
|
|
i 2FA na koncie OVH — panel OVH może maszynę zreinstalować, więc w praktyce
|
|
jest ważniejszy niż dostęp SSH.
|
|
|
|
---
|
|
|
|
## 7. Czego nie robić
|
|
|
|
- Nie startuj bootstrapu bez potwierdzenia — Kacper może chcieć najpierw przeczytać runbooki
|
|
- Nie zmieniaj `sshd_config` bez otwartej drugiej sesji SSH
|
|
- Nie zakładaj, że coś działa — sprawdzaj (`curl`, `docker ps`, logi)
|
|
- Nie rób `docker system prune -a --volumes` odruchowo
|
|
- Nie wracaj do rozstrzygniętych decyzji z sekcji 4 bez konkretnego powodu
|