be8886032b
Same convention as retif/kotkanagrilli.fi so the marketing site can run on a kotkanagrilli.fi subdomain (Oracle Cloud ARM64 k3s) alongside the bot. - deploy/Containerfile — nginx-unprivileged serving the static site on :8080. - deploy/chart/ — Deployment + Service + Ingress (host studio.kotkanagrilli.fi, kube-system-traefik). - deploy/.woodpecker.yaml — buildx remote buildkit --platform linux/arm64 -> push image, helm package + push chart to Gitea OCI. - deploy/README.md — operator provisioning + how to change the subdomain. Verified locally (amd64): image builds and serves the site (HTTP 200, correct title); helm template renders Service/Deployment/Ingress clean. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1.3 KiB
1.3 KiB
Deploy — static site on the kotkan k8s cluster
Same convention as retif/kotkanagrilli.fi: Containerfile + Helm chart +
Woodpecker; Flux rolls it out; the subdomain comes from the Ingress host.
What's here
Containerfile—nginxinc/nginx-unprivilegedserving the static site on:8080(non-root, k8s-friendly). Verified locally: builds and serves the site with HTTP 200.chart/— Deployment + Service + Ingress (host: studio.kotkanagrilli.fi,kube-system-traefik).helm templaterenders clean..woodpecker.yaml— CI: build--platform linux/arm64→ push image, package- push chart to the Gitea OCI registry.
What the operator (Сашко) provisions once
- Mirror to Gitea + Woodpecker with
gitea_clone_token/gitea_packages_token(as the kotkanagrilli pipeline). gitea-registry-credspull secret in the namespace.- DNS for the chosen subdomain (
studio.kotkanagrilli.fior another) → Cloudflare → cluster, plus a TLS cert if Traefik doesn't issue it automatically. - Flux HelmRelease →
oci://git.oleks.space/oleks/charts/ai-studio-site.
Change the subdomain in chart/values.yaml (ingress.host).
Build/run locally
docker build -f deploy/Containerfile -t ai-studio-site .
docker run --rm -p 8080:8080 ai-studio-site # http://localhost:8080