docs(snapshot): sync workspace documentation

This commit is contained in:
u1
2026-03-29 13:14:30 +02:00
parent 93a6e4aa2f
commit 0d3d110026
37 changed files with 8500 additions and 123 deletions

View File

@@ -253,6 +253,23 @@ Nie commituj sekretów do gita. W GitOps wybierz jedną drogę:
16) Workflow CI: build+push obrazów (i ewentualny commit do `trade-deploy`).
17) Zasady promocji: staging → prod (np. tylko tag/release).
### Etap 4b: Workflow zmian (dev → staging) + snapshoty/rollback
Rekomendacja: nie robimy “ręcznych” zmian na VPS (żeby nie tworzyć snowflakea). Każdy deploy ma być **snapshootem**, do którego można wrócić: *git commit w `trade-deploy` + pin do obrazu* (`sha-<shortsha>` albo digest; bez `latest`).
Standardowy flow:
1) Zmiany robisz lokalnie (nie musisz odpalać lokalnego Dockera; na start wystarczy szybki build/typecheck).
2) Push do gita (PR/merge).
3) CI buduje i pushuje obrazy, a następnie aktualizuje `trade-deploy` (tag/digest + ewentualnie `BUILD_TIMESTAMP`).
4) Argo CD (auto-sync) wdraża do `trade-staging`.
5) Testujesz na VPS (UI/API/ingestor).
Rollback (szybki, preferowany):
- cofasz zmianę w `trade-deploy` (`git revert` / powrót do poprzedniej rewizji w Argo) → Argo wraca do poprzedniego snapshoota.
Rollback (bezpieczny dla “dużych” zmian, np. ingest/schema):
- użyj wersjonowania vN (osobna tabela/funkcja/porty) + cutover ingestora; jeśli zmiana nie siądzie, robisz cut back vN → v1 (dane w starej tabeli zostają).
## 9) Wersjonowanie v1/v2… (równoległe wdrożenia + cutover)
Repo ma już pattern wersjonowania w Compose (`scripts/ops/*` + `devops/versions/vN.env`).
@@ -337,54 +354,3 @@ trade-infra/
- ingest ticków (`trade-ingestor``trade-api`).
Uwaga: lokalnie repo nie ma historii commitów, więc refaktor będzie startem „od zera” w nowych repo (initial commit per subrepo).
### Status wdrożenia (superproject)
- Subrepo mają już initial import i są dostępne na Gitei:
- `trade/trade-api`
- `trade/trade-ingestor`
- `trade/trade-frontend`
- `trade/trade-doc`
- Superproject `trade/trade-infra` jest utworzony i zawiera `.gitmodules` + submodules (w tym `trade/trade-deploy`).
- Argo CD nadal śledzi `trade/trade-deploy` (bez zmian w klastrze).
Klonowanie superproject:
```bash
git clone --recurse-submodules https://rv32i.pl/trade/trade-infra.git
```
## 13) Dostęp i logowanie (admin vs użytkownicy)
Wymaganie:
- **admin** ma dostęp do wszystkich serwisów (np. Portainer, Argo CD, itp.)
- pozostali użytkownicy logują się **wyłącznie** do `trade` (`trade.rv32i.pl`)
Decyzja: na ten moment **wdrażamy logowanie tylko dla `trade`**. Pozostałe serwisy (Portainer/Argo/pgAdmin/Hasura) zostają ze swoimi, osobnymi loginami.
Rekomendowana metoda dla `trade`: **Traefik `basicAuth` na Ingress (Middleware)**.
### Plan wdrożenia (staging → prod)
1) Inwentaryzacja publicznych endpointów:
- sprawdzić które serwisy mają Ingress (hosty),
- serwisy administracyjne traktować jako „admin-only” (docelowo: ukryte za port-forward/VPN/IP allowlist).
2) `trade` (multi-user):
- przygotować `htpasswd` z wieloma wpisami (bcrypt),
- utworzyć `Secret` w namespace `trade-staging` (np. `trade-basic-auth`) z plikiem `users`,
- dodać `Middleware` `basicAuth` wskazujący na secret,
- podpiąć middleware do `Ingress/trade-frontend`.
3) Wyłączyć/dopasować auth w aplikacji `trade-frontend`:
- obecnie serwer frontendu ma wbudowany basic auth (plik `frontend.json`),
- żeby nie było „podwójnego logowania”, dodać tryb `BASIC_AUTH_MODE=off` (albo podobny) i ustawić go w `trade-deploy`.
4) Testy:
- `https://trade.rv32i.pl` → 401 bez auth, 200/304 z auth dla każdego usera,
- regresja: proxy `/api/*` w frontendzie nadal działa (token read jest dodawany po stronie serwera frontendu).
5) Utrzymanie:
- dodanie/usunięcie usera = update secreta (`htpasswd`) + rollout (bez zmian w kodzie),
- docelowo przenieść sekrety do GitOps (np. SOPS/SealedSecrets/ExternalSecrets).
### Status (trade)
- `trade-staging` ma wdrożone logowanie na Ingress (Traefik `basicAuth`) oraz wyłączony wbudowany basic auth w `trade-frontend` (`BASIC_AUTH_MODE=off`).
- UI pokazuje zalogowanego użytkownika (`GET /whoami`) i ma przycisk `Wyloguj` (`GET /logout`, best-effort dla Basic Auth).