Files
antonsemenovser be8886032b feat(deploy): containerize the static site for the kotkan k8s cluster
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>
2026-06-02 23:30:38 +03:00

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

  • Containerfilenginxinc/nginx-unprivileged serving 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 template renders clean.
  • .woodpecker.yaml — CI: build --platform linux/arm64 → push image, package
    • push chart to the Gitea OCI registry.

What the operator (Сашко) provisions once

  1. Mirror to Gitea + Woodpecker with gitea_clone_token / gitea_packages_token (as the kotkanagrilli pipeline).
  2. gitea-registry-creds pull secret in the namespace.
  3. DNS for the chosen subdomain (studio.kotkanagrilli.fi or another) → Cloudflare → cluster, plus a TLS cert if Traefik doesn't issue it automatically.
  4. Flux HelmReleaseoci://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