Files
deploy/astrololo/astroklient.yaml
T
gitea 82c73f6aa5 feat(astroklient): wdrożenie wersji demonstracyjnej (PRE-28)
Deployment + Service (ClusterIP), wpięcie w kustomization, obraz dopisany do
image-updatera i runbook.

Obraz na liście image-updatera CELOWO od razu: obraz, którego tam nie ma, nigdy
się nie podbije, choćby CI go budowało — tak przez chwilę wisiał render na :latest.

Token międzywarstwowy i klucz łącza brane z TYCH SAMYCH sekretów co prezentacja:
demo nie jest furtką omijającą ochronę warstwy logicznej. Hasło demo natomiast
z OSOBNEGO sekretu astrololo-demo — demo odcina się jego skasowaniem, bez ruszania
kont głównej aplikacji.

Limit żądań niższy niż w pełnej aplikacji (60/min): demo bywa udostępniane szerzej,
a każde zapytanie sięga do treści baz.

Runbook zaczyna się od ostrzeżenia, bo to jedyna rzecz, którą trzeba pamiętać za
każdym razem: demo pracuje na PRODUKCYJNEJ warstwie danych, więc kto dostaje adres,
czyta oryginalne bazy, a jego wgrania trafiają do produkcyjnego zbioru. Pełna
izolacja wymagałaby osobnej warstwy danych i nie jest dziś zrobiona.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 18:39:48 +02:00

71 lines
2.8 KiB
YAML

# astroklient — wersja demonstracyjna (PRE-28).
#
# Osobna usługa o DWÓCH funkcjach: dodanie pliku bazy i zapytanie o interpretację
# urodzeniową. Pozostałe funkcje nie są tu ukryte — nie ma ich w obrazie.
#
# ⚠️ PRACUJE NA PRODUKCYJNEJ WARSTWIE DANYCH (świadoma decyzja właściciela).
# Kto ma dostęp do demo, czyta oryginalne bazy interpretacyjne, a pliki przez nie
# wgrane trafiają do produkcyjnego zbioru. Dlatego konto jest OSOBNE: demo odcina
# się skasowaniem sekretu astrololo-demo, bez ruszania kont głównej aplikacji.
apiVersion: apps/v1
kind: Deployment
metadata:
name: astroklient
namespace: astrololo
spec:
replicas: 1
selector:
matchLabels: { app: astroklient }
template:
metadata:
labels: { app: astroklient }
spec:
containers:
- name: astroklient
image: gitea.czernobog.pl/gitea/astrololo-astroklient:latest
ports: [{ containerPort: 8005 }]
env:
- name: LOGIC_URL
value: "http://logic:8001"
# Konto demo — WŁASNE, nie astrololo-auth. Sekret tworzony POZA repo
# (jak pozostałe), patrz README-astroklient.md.
- name: DEMO_USER
value: "demo"
- name: DEMO_PASSWORD
valueFrom:
secretKeyRef: { name: astrololo-demo, key: DEMO_PASSWORD }
# Token międzywarstwowy i klucz łącza — TE SAME co prezentacja:
# demo nie jest furtką omijającą ochronę warstwy logicznej.
- name: INTERNAL_TOKEN
valueFrom:
secretKeyRef: { name: astrololo-auth, key: INTERNAL_TOKEN }
- name: LINK_KEY_PRESENTATION_LOGIC
valueFrom:
secretKeyRef: { name: astrololo-link, key: LINK_KEY_PRESENTATION_LOGIC }
- name: LINK_ENCRYPTION_REQUIRED
value: "true"
# Za Ingressem bezpośrednim rozmówcą jest pod Traefika. Bez tego limit
# liczyłby WSZYSTKICH do jednego wiadra i pierwsza osoba, która go
# wyklika, odcięłaby pozostałe.
- name: TRUST_PROXY
value: "true"
# Niższy niż w pełnej aplikacji: demo bywa udostępniane szerzej,
# a każde zapytanie sięga do treści baz.
- name: RATE_LIMIT_PER_MIN
value: "60"
resources:
requests: { cpu: "50m", memory: "96Mi" }
limits: { cpu: "300m", memory: "256Mi" }
---
apiVersion: v1
kind: Service
metadata:
name: astroklient
namespace: astrololo
spec:
# ClusterIP — wejście z zewnątrz wyłącznie przez Ingress po https, tak samo
# jak prezentacja. Druga, nieszyfrowana droga byłaby obejściem PRE-16.
type: ClusterIP
selector: { app: astroklient }
ports: [{ port: 8005, targetPort: 8005 }]