Czego się nauczysz¶
Ten przewodnik pokazuje, jak od zera zbudować produkcyjną platformę cloud na Google Cloud Platform — bez klikania w konsoli, bez kluczy serwisowych w kodzie, bez ręcznych kroków przy każdym deployu.
Co zbudujemy¶
Kompletna platforma webowa z backendem, frontendem, bazą danych, uwierzytelnianiem i monitoringiem — w pełni zautomatyzowana, z oddzielnym środowiskiem staging.
[Użytkownik] → HTTPS → [Cloudflare CDN]
│
▼
[GCS Bucket — SPA]
│ fetch() + JWT
▼
[API Gateway] ← walidacja JWT (Identity Platform)
│ OIDC token
▼
[Cloud Run — FastAPI] ← ingress tylko od API GW (IAM)
│ SDK (przez publiczne Google APIs)
▼
[Firestore] ← zerowy koszt przy braku ruchu
[GitHub Actions] → WIF (bez kluczy) → deploy całej infrastruktury
[Cloud Monitoring] → dashboard + alerty → email
Stos technologiczny¶
| Warstwa | Technologia | Dlaczego |
|---|---|---|
| Infrastruktura jako kod | Terraform v1.5+ | Powtarzalny, wersjonowany, idempotentny |
| Compute | Google Cloud Run | Skaluje do 0 — zerowy koszt przy braku ruchu |
| Auth | Identity Platform + Firebase Auth | Google SSO out-of-the-box, JWT managed |
| API | Google Cloud API Gateway | Walidacja JWT przed backendem, OpenAPI spec |
| Baza danych | Firestore | Zerowy koszt baseline, brak konfiguracji sieci |
| Frontend | GCS bucket + Cloudflare CDN | ~$0/mies, custom domena, DDoS protection |
| CI/CD | GitHub Actions + WIF | Keyless auth — zero sekretów z kluczami SA |
| Monitoring | Cloud Monitoring | Natywna integracja, alerty jako kod TF |
| Sieć | VPC + subnet | Izolacja sieciowa; VPC Connector usunięty (ADR-008 — brak zasobów VPC-wewnętrznych) |
Architektura decyzji (ADR-driven)¶
Każda nieoczywista decyzja jest udokumentowana jako ADR (Architecture Decision Record) — z kontekstem, alternatywami i uzasadnieniem. Znajdziesz je w docs/adr/. To nie jest dokumentacja "co zrobiliśmy", tylko "dlaczego tak, a nie inaczej".
Przykłady decyzji, które mogłyby pójść inaczej:
| Decyzja | Wybraliśmy | Odrzuciliśmy | Powód |
|---|---|---|---|
| Compute | Cloud Run | GKE Autopilot | GKE: $70/mies baseline, overkill dla prototypu |
| CDN | Cloudflare Free | Google Global LB | Google LB: $23/mies, Cloudflare: $0 |
| Auth CI/CD | Workload Identity Federation | Service Account keys | Klucze SA to wektory ataku — WIF eliminuje problem |
| Baza | Firestore | Cloud SQL | SQL: $7/mies zawsze; Firestore: $0 przy braku ruchu |
| API security | IAM + JWT | Network ingress rules | IAM daje lepszą izolację przy tym stosie |
Jak czytać ten przewodnik¶
Rozdziały są ułożone w kolejności implementacji. Każdy rozdział zawiera:
- Kontekst — co budujemy i dlaczego w tej kolejności
- Kod — pliki Terraform i konfiguracje z komentarzami
- Pułapki — rzeczywiste błędy napotkane podczas budowania (nie hipotetyczne)
- Alternatywy — co odrzuciliśmy i dlaczego
Senior thinking
Pułapki i odrzucone alternatywy to najcenniejsza część. Każdy może skopiować działający kod — zrozumienie dlaczego tak, a nie inaczej, to jest to, co odróżnia architekta od copy-paste engineera.
Szacowany koszt platformy¶
| Komponent | Koszt/mies | Uwagi |
|---|---|---|
| Cloud Run | ~$0 | Skaluje do 0; przy ruchu: $0.00002400/vCPU-sec |
| API Gateway | ~$0 | Free tier: 2M calls/mies |
| Firestore | ~$0 | Free tier: 1 GB storage, 50k reads/dzień |
| GCS bucket | ~$0.02 | 0.026 USD/GB/mies |
| Cloudflare CDN | $0 | Free tier bez limitu bandwidth |
| Cloud Monitoring | $0 | Free tier: 150 MB metryk/mies |
| Łącznie | ~$0/mies | VPC Connector usunięty (ADR-008) — brak stałych kosztów |
Opcjonalna warstwa LB — koszt ~$25/mies
Projekt zawiera warstwę tf/frontend-lb/ do nauki Google Global LB + Cloud CDN + Cloud Armor. Tworzy niezależny endpoint app-lb.kamilos.xyz. Można ją wdrożyć i usunąć w dowolnym momencie. Szczegóły: rozdział 14.