a9ff6e1f68
Nazwa `astroklient` zostaje zarezerwowana dla przyszłej wersji produkcyjnej; obecna, demonstracyjna nazywa się od teraz `astroklient-demo`. Zmiana obejmuje nazwy plików (astroklient-demo.yaml, astroklient-demo-stack.yaml, README-astroklient-demo.md), Deployment i Service, etykiety selektorów, obraz w rejestrze, alias w image-updaterze, wpisy w kustomization i odsyłacze w README. `data-demo` i `logic-demo` zostają bez zmian — nie niosły starej nazwy. Sprawdzone: `kubectl kustomize astrololo` składa komplet 27 zasobów, obraz to astrololo-astroklient-demo, żadnego zdublowanego przyrostka ani gołego `astroklient` nie zostało. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
178 lines
5.3 KiB
Markdown
178 lines
5.3 KiB
Markdown
# astroklient-demo — wdrożenie wersji demo (PRE-28/29)
|
|
|
|
Osobna usługa o dwóch funkcjach: **dodanie pliku bazy** i **zapytanie o
|
|
interpretację urodzeniową**. Opis aplikacji: `services/astroklient-demo/README.md`
|
|
w repo aplikacji.
|
|
|
|
---
|
|
|
|
## Jak to jest odizolowane
|
|
|
|
```
|
|
astroklient-demo → logic-demo → data-demo → /mnt/Tank1/astrololo-demo
|
|
└── klientA/ ← pula konta
|
|
└── klientB/ ← pula konta
|
|
```
|
|
|
|
**Oryginalne bazy są dla demo nieosiągalne.** Nie chodzi o uprawnienia: demo ma
|
|
własną warstwę danych, pracującą na osobnym udziale, pustym na starcie.
|
|
|
|
Dlaczego osobna jest też **warstwa logiczna**: zna ona jeden adres warstwy danych,
|
|
więc astroklient-demo korzystający z produkcyjnej logiki i tak trafiłby na produkcyjne
|
|
bazy. Izolacja musi sięgnąć obu warstw naraz, inaczej nie ma jej wcale.
|
|
|
|
**Każde konto ma własną pulę** — swój podkatalog na tym udziale. Konta nie widzą
|
|
swoich plików nawzajem ani w liście, ani w wynikach wyszukiwania. Pula bierze się
|
|
z **loginu zalogowanej osoby**, nigdy z pola formularza.
|
|
|
|
---
|
|
|
|
## Krok 1 — udział `astrololo-demo` na TrueNAS
|
|
|
|
Ta sama procedura co przy `astrololo-state`, więc jeśli tamten działa, ten też
|
|
zadziała. Po SSH na NAS:
|
|
|
|
```bash
|
|
sudo zfs create Tank1/astrololo-demo # albo: sudo mkdir -p /mnt/Tank1/astrololo-demo
|
|
```
|
|
|
|
```bash
|
|
midclt call sharing.nfs.query '[["path","=","/mnt/Tank1/astrololo-demo"]]' \
|
|
| python3 -m json.tool
|
|
```
|
|
|
|
**Pusta lista `[]`** — twórz:
|
|
|
|
```bash
|
|
midclt call sharing.nfs.create '{
|
|
"path": "/mnt/Tank1/astrololo-demo",
|
|
"comment": "astrololo — pule kont wersji demo (PRE-29)",
|
|
"hosts": ["192.168.1.73", "192.168.1.80", "192.168.1.81"],
|
|
"enabled": true,
|
|
"ro": false,
|
|
"mapall_user": "root",
|
|
"mapall_group": "root"
|
|
}'
|
|
```
|
|
|
|
**Coś zwróciło** — weź `id` i użyj `sharing.nfs.update <ID>` z tą samą treścią.
|
|
|
|
```bash
|
|
midclt call service.restart nfs
|
|
sudo exportfs -v | grep astrololo-demo
|
|
```
|
|
|
|
Musi tam być `rw`. Sprawdź jeszcze zapis z węzła — to jest ten test, którego
|
|
zabrakło przy poprzednim udziale:
|
|
|
|
```bash
|
|
ssh <węzeł> 'sudo mkdir -p /mnt/t && sudo mount -t nfs 192.168.1.34:/mnt/Tank1/astrololo-demo /mnt/t \
|
|
&& sudo touch /mnt/t/proba && echo ZAPIS-OK || echo ZAPIS-NIE; sudo rm -f /mnt/t/proba; sudo umount /mnt/t'
|
|
```
|
|
|
|
---
|
|
|
|
## Krok 2 — konta demo
|
|
|
|
Każde konto to osobna pula, więc **rozdajesz konta, nie jedno hasło**.
|
|
|
|
Hasła najlepiej jako hash — wtedy nie leżą nigdzie jawnie (skrypt jest w repo
|
|
aplikacji, `services/presentation/scripts/make_user.py`):
|
|
|
|
```bash
|
|
python scripts/make_user.py klientA # wypisze: scrypt$…
|
|
python scripts/make_user.py klientB
|
|
```
|
|
|
|
```bash
|
|
kubectl -n astrololo create secret generic astrololo-demo \
|
|
--from-literal=DEMO_USERS='klientA:scrypt$…,klientB:scrypt$…'
|
|
```
|
|
|
|
### Dodanie konta później
|
|
|
|
```bash
|
|
STARE=$(kubectl -n astrololo get secret astrololo-demo -o jsonpath='{.data.DEMO_USERS}' | base64 -d)
|
|
|
|
kubectl -n astrololo create secret generic astrololo-demo \
|
|
--from-literal=DEMO_USERS="${STARE},klientC:scrypt\$…" \
|
|
--dry-run=client -o yaml | kubectl apply -f -
|
|
|
|
kubectl -n astrololo rollout restart deploy/astroklient-demo
|
|
```
|
|
|
|
### Odebranie dostępu
|
|
|
|
Usuń wpis z `DEMO_USERS` tą samą drogą. **Pula zostaje na udziale** — pliki
|
|
klienta nie znikają, tylko przestaje być komu je pokazywać.
|
|
|
|
---
|
|
|
|
## Krok 3 — wdrożenie
|
|
|
|
```bash
|
|
kubectl apply -k astrololo
|
|
kubectl -n astrololo rollout status deploy/data-demo deploy/logic-demo deploy/astroklient-demo
|
|
```
|
|
|
|
Sprawdzenie na czas jednej sesji, bez wystawiania na świat:
|
|
|
|
```bash
|
|
kubectl -n astrololo port-forward deploy/astroklient-demo 8005:8005
|
|
```
|
|
|
|
Wejście z zewnątrz wymaga reguły w `ingress.yaml` — osobny host albo ścieżka.
|
|
**Celowo nie zakładam tego za Ciebie**: to decyzja, pod jakim adresem świat
|
|
zobaczy demo.
|
|
|
|
---
|
|
|
|
## Import puli klienta do pełnej aplikacji
|
|
|
|
Sedno całego układu: klient, który przechodzi na pełną wersję, **nie traci
|
|
dotychczasowych wgrań**. Jego pula to jeden katalog.
|
|
|
|
**1. Zobacz, co tam jest** (na NAS):
|
|
|
|
```bash
|
|
LOGIN=klientA
|
|
sudo ls -la /mnt/Tank1/astrololo-demo/$LOGIN/
|
|
```
|
|
|
|
**2. Sprawdź kolizje nazw** z bazami produkcyjnymi:
|
|
|
|
```bash
|
|
comm -12 \
|
|
<(cd /mnt/Tank1/astrololo-demo/$LOGIN && ls *.xlsx 2>/dev/null | sort) \
|
|
<(cd /mnt/Tank1/astrololo && ls *.xlsx 2>/dev/null | sort)
|
|
```
|
|
|
|
Pusto = brak kolizji. Cokolwiek się wypisze, przenieś ręcznie pod inną nazwą —
|
|
**nie nadpisuj bazy produkcyjnej**.
|
|
|
|
**3. Skopiuj** (`-n` = nie nadpisuj niczego, co już jest):
|
|
|
|
```bash
|
|
sudo cp -n /mnt/Tank1/astrololo-demo/$LOGIN/*.xlsx /mnt/Tank1/astrololo/
|
|
```
|
|
|
|
> Kopiujemy **tylko pliki `.xlsx`**. Plik `.files-state.json` zostaje — opisuje
|
|
> stan wewnątrz puli demo i w produkcji nie ma sensu; produkcja ma własny.
|
|
|
|
**4. Włącz je w pełnej aplikacji**: zakładka **Pliki**, nowe bazy pojawią się jako
|
|
„gotowa, odstawiona". Klikasz przełącznik przy tych, które mają wejść do użytku.
|
|
|
|
To, że nie włączają się same, jest zamierzone: przeniesienie plików jest czynnością
|
|
techniczną, a decyzja, które bazy biorą udział w interpretacji, należy do Ciebie.
|
|
|
|
---
|
|
|
|
## Odcięcie całego demo
|
|
|
|
```bash
|
|
kubectl -n astrololo scale deploy/astroklient-demo --replicas=0
|
|
```
|
|
|
|
Pule i dane zostają. Skasowanie sekretu `astrololo-demo` zatrzyma pod (nie wstanie
|
|
bez niego) i to też jest zachowanie zamierzone.
|