# Architecture — Nginx + upload-sidecar > git-pages on korvattu. Uusi arkkitehtuuri: Nginx palvelee staattisia tiedostoja PV:ltä, upload-sidecar (busybox httpd + CGI) ottaa vastaan tar.gz-PUTit. ## Yleiskuvaus Yksi apex-host, monta Gitea-repoa. URL = FS-polku: `/{owner}/{repo}/{branch}/{sha8}/{suite}/`. Ei Host-header-kikkaa, ei slugia, ei rewritea. ## Komponentit | Komponentti | Rooli | |-------------|-------| | **nginx** | Palvelee staattisia tiedostoja /app/data -rootista (:8080) | | **upload** (Python HTTP server) | Vastaanottaa PUT /path + tar.gz body, purkaa PV:lle (:8081) | | **PVC** | Raporttisisältö suoraan FS-muodossa | | **Service** | ClusterIP :8080 (read), :8081 (write) | | **Traefik IngressRoute** | PATCH/PUT → upload:8081 (BasicAuth), GET/HEAD → nginx:8080 | | **Traefik Middleware** | `git-pages-publish-auth` (BasicAuth), HTTPS-redirect | | **cert-manager Certificate** | TLS | ## URL ja sisältö ``` https://ci-reports.helm-dev.keskikuja.site/niko/gitea-ci-library/main/f4baa286/cucumber/index.html └── selvä URL ──┘ └─────────── Gitea-yhteensopiva polku ──────────────────────────┘ ``` Levyllä: ``` /app/data/{owner}/{repo}/{branch}/{sha8}/ .meta index.html ... ``` ## Järjestelmäkaavio ```mermaid flowchart TB subgraph ext["Ulkoiset"] PUB["Julkaisija\n(CI)"] BR["Selain"] GITEA["Gitea API\n(branch-lista)"] end subgraph edge["Reuna"] TRAEFIK["Traefik\nIngressRoute + Middleware"] CM["cert-manager\nTLS"] end subgraph cluster["Pod"] NGINX["nginx\n(kontti)"] UPLOAD["upload sidecar\n(Python HTTP server)"] PVC["PVC /app/data"] end PUB -->|"PUT + BasicAuth\ntar.gz"| TRAEFIK BR -->|"GET/HEAD"| TRAEFIK TRAEFIK -->|"PUT/PATCH"| UPLOAD TRAEFIK -->|"GET/HEAD"| NGINX CM --> TRAEFIK UPLOAD -->|"extract to PV"| PVC NGINX --> PVC ``` ## Julkaisu 1. Julkaisija paketoi tiedostot tar.gz:ksi 2. `PUT https://{host}/{owner}/{repo}/{branch}/{sha8}/{suite}/` 3. Traefik tarkistaa BasicAuth → välittää upload-sidecarille 4. CGI purkaa tar.gz:n suoraan PV:lle: `/app/data/{owner}/{repo}/{branch}/{sha8}/{suite}/` ## Luku 1. Selain avaa URL:n (GET/HEAD) 2. Traefik välittää nginxille 3. Nginx palauttaa suoraan PV:ltä ## Retention CronJob lukee PV:tä suoraan (find, ls, stat), tarkistaa branchin olemassaolon Giteasta, poistaa vanhat commit-kansiot.