feat(astrololo): usługa render — raport PDF (PRE-24) #5

Open
gitea wants to merge 1 commits from feat/render-service into master
Owner

Manifesty nowego komponentu składającego raport PDF. Kod: astrololo#32.
Pełna instrukcja: docs/wdrozenie-render-pdf.md w repo astrololo.

Dlaczego osobny komponent

TeX Live waży setki megabajtów. W obrazie prezentacji spowalniałby każdy build
i deploy. Osobno: obraz produktu zostaje mały, TeX aktualizuje się niezależnie,
a awaria renderu nie kładzie aplikacji — przestaje działać wyłącznie przycisk
„Pobierz PDF". Ta sama zasada co przy izolacji swissepha (LOG-27).

Szyfrowanie

Własny, trzeci klucz LINK_KEY_PRESENTATION_RENDER. Osobny, bo tym łączem
płynie cały raport — dane urodzeniowe i opisy z baz — więc przejęcie go nie
może otwierać łącza do logiki ani do danych. LINK_ENCRYPTION_REQUIRED=true,
czyli bez klucza pod nie wstaje.

Hartowanie

ClusterIP bez NodePortu i Ingressu — nie ma powodu sięgać do tej usługi
z zewnątrz. readOnlyRootFilesystem + emptyDir na /tmp: kompilacja pisze
tylko do katalogu tymczasowego, raport nie zostawia śladu w kontenerze.
Limity rozjechane celowo (100m/256Mi → 1500m/1Gi) — XeLaTeX na obszernym
raporcie bierze dużo, ale na krótko.

⚠️ Krok PRZED mergem: uzupełnić sekret

Sekret astrololo-link już istnieje — dokładamy trzeci klucz, zachowując
dwa dotychczasowe
:

kubectl -n astrololo create secret generic astrololo-link \
  --from-literal=LINK_KEY_PRESENTATION_LOGIC="$(kubectl -n astrololo get secret astrololo-link \
      -o jsonpath='{.data.LINK_KEY_PRESENTATION_LOGIC}' | base64 -d)" \
  --from-literal=LINK_KEY_LOGIC_DATA="$(kubectl -n astrololo get secret astrololo-link \
      -o jsonpath='{.data.LINK_KEY_LOGIC_DATA}' | base64 -d)" \
  --from-literal=LINK_KEY_PRESENTATION_RENDER="$(openssl rand -hex 32)" \
  --dry-run=client -o yaml | kubectl apply -f -

Bez tego pod render wpadnie w CrashLoop — fail-closed działa zgodnie z projektem.

Sprawdzone

kubectl kustomize + apply --dry-run=server na żywym klastrze:
service/render i deployment.apps/rendercreated, reszta configured.

Weryfikacja po wdrożeniu

kubectl -n astrololo rollout status deploy/render deploy/presentation
kubectl -n astrololo exec deploy/presentation -- \
  python -c "import httpx; print(httpx.get('http://render:8004/health').text)"

Oczekiwane: {"status":"ok",...,"tools":{"xelatex":true,"rsvg-convert":true}}.
degraded = obraz zbudował się bez któregoś narzędzia.

Manifesty nowego komponentu składającego raport PDF. Kod: [astrololo#32](https://gitea.czernobog.pl/gitea/astrololo/pulls/32). Pełna instrukcja: `docs/wdrozenie-render-pdf.md` w repo astrololo. ## Dlaczego osobny komponent TeX Live waży setki megabajtów. W obrazie prezentacji spowalniałby każdy build i deploy. Osobno: obraz produktu zostaje mały, TeX aktualizuje się niezależnie, a **awaria renderu nie kładzie aplikacji** — przestaje działać wyłącznie przycisk „Pobierz PDF". Ta sama zasada co przy izolacji swissepha (LOG-27). ## Szyfrowanie Własny, **trzeci** klucz `LINK_KEY_PRESENTATION_RENDER`. Osobny, bo tym łączem płynie **cały raport** — dane urodzeniowe i opisy z baz — więc przejęcie go nie może otwierać łącza do logiki ani do danych. `LINK_ENCRYPTION_REQUIRED=true`, czyli **bez klucza pod nie wstaje**. ## Hartowanie `ClusterIP` bez NodePortu i Ingressu — nie ma powodu sięgać do tej usługi z zewnątrz. `readOnlyRootFilesystem` + `emptyDir` na `/tmp`: kompilacja pisze tylko do katalogu tymczasowego, **raport nie zostawia śladu w kontenerze**. Limity rozjechane celowo (100m/256Mi → 1500m/1Gi) — XeLaTeX na obszernym raporcie bierze dużo, ale na krótko. ## ⚠️ Krok PRZED mergem: uzupełnić sekret Sekret `astrololo-link` już istnieje — dokładamy **trzeci** klucz, **zachowując dwa dotychczasowe**: ```bash kubectl -n astrololo create secret generic astrololo-link \ --from-literal=LINK_KEY_PRESENTATION_LOGIC="$(kubectl -n astrololo get secret astrololo-link \ -o jsonpath='{.data.LINK_KEY_PRESENTATION_LOGIC}' | base64 -d)" \ --from-literal=LINK_KEY_LOGIC_DATA="$(kubectl -n astrololo get secret astrololo-link \ -o jsonpath='{.data.LINK_KEY_LOGIC_DATA}' | base64 -d)" \ --from-literal=LINK_KEY_PRESENTATION_RENDER="$(openssl rand -hex 32)" \ --dry-run=client -o yaml | kubectl apply -f - ``` Bez tego pod `render` wpadnie w CrashLoop — fail-closed działa zgodnie z projektem. ## Sprawdzone `kubectl kustomize` + `apply --dry-run=server` na **żywym klastrze**: `service/render` i `deployment.apps/render` — *created*, reszta *configured*. ## Weryfikacja po wdrożeniu ```bash kubectl -n astrololo rollout status deploy/render deploy/presentation kubectl -n astrololo exec deploy/presentation -- \ python -c "import httpx; print(httpx.get('http://render:8004/health').text)" ``` Oczekiwane: `{"status":"ok",...,"tools":{"xelatex":true,"rsvg-convert":true}}`. `degraded` = obraz zbudował się bez któregoś narzędzia.
gitea added 1 commit 2026-07-24 17:22:36 +00:00
Nowy komponent skladajacy raport PDF. Osobny obraz, bo dzwiga TeX Live (setki MB)
— ta sama zasada co przy izolacji swissepha (LOG-27): obraz produktu zostaje maly,
TeX aktualizuje sie niezaleznie, a awaria renderu nie kladzie aplikacji, tylko
przycisk „Pobierz PDF".

- render.yaml — Deployment + Service. ClusterIP, BEZ NodePortu i Ingressu: nie ma
  powodu, zeby ktokolwiek siegal do tej uslugi z zewnatrz. Rozmawia wylacznie
  z prezentacja.
- Szyfrowanie: wlasny, TRZECI klucz LINK_KEY_PRESENTATION_RENDER z sekretu
  astrololo-link. Osobny, bo tym laczem plynie CALY raport (dane urodzeniowe
  i opisy z baz) — przejecie go nie moze otwierac lacza do logiki ani danych.
  LINK_ENCRYPTION_REQUIRED=true, wiec bez klucza pod NIE wstaje.
- readOnlyRootFilesystem + emptyDir na /tmp: kompilacja pisze tylko do katalogu
  tymczasowego, raport nie zostawia sladu w kontenerze.
- Limity rozjechane celowo (100m/256Mi -> 1500m/1Gi): XeLaTeX na obszernym
  raporcie bierze duzo, ale na krotko.
- presentation: RENDER_URL + trzeci klucz lacza.

Sekret astrololo-link trzeba UZUPELNIC o trzeci klucz PRZED wdrozeniem,
zachowujac dwa dotychczasowe — komenda w instrukcji.

Sprawdzone: kubectl kustomize + apply --dry-run=server na zywym klastrze
(service/render i deployment.apps/render created).

Pelna instrukcja: docs/wdrozenie-render-pdf.md w repo astrololo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/render-service:feat/render-service
git checkout feat/render-service
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gitea/deploy#5