Research-Stack/4-Infrastructure/k3s-flake/manifests/homer/configmap.yaml
Brandon Schneider 38f1022a20 feat(k3s-server): Traefik NodePort + host Caddy pass-through (internal-only)
Port conflict resolution:
- Add HelmChartConfig to pin Traefik web entrypoint to NodePort 30080
  (not host :80) so k3s Traefik and host Caddy do not race for the port
- Add host Caddy on :80 as a minimal pass-through to Traefik :30080;
  carries X-Forwarded-* headers so Traefik sees the real client IP and
  the correct Host. No TLS, no Porkbun, no subdomain logic — all of
  that stays on the edge Caddy (k3s-edge.nix)
- Caddy after= k3s.service so Traefik NodePort is ready before proxying

Authentik port fix:
- Change authentik server + worker services from NodePort 30080 to
  ClusterIP; Traefik reaches Authentik via the rs-auth Ingress and
  cluster DNS, no NodePort required

New manifests (internal, no public-traffic impact):
- manifests/ingress/: Traefik Ingress resources + Middleware CRDs
  (/apps/*, /server/* → forward_auth + strip-prefix; /api/* → strip only;
  / → Homer + forward_auth; auth.* → Authentik, no middleware)
- manifests/hermes/: placeholder chat/orchestrator service
- manifests/credential-server/: token-auth credential vault stub
- manifests/control-plane/: registry-api, jobs-api, blobs-api health stubs
- manifests/homer/configmap.yaml: updated dashboard links to canonical paths

Deploy order: rebuild k3s-server first, verify Traefik + Ingress
internally, then deploy k3s-edge (commit 3 / next step).

Generated with Devin (https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-26 21:03:54 -05:00

68 lines
2.1 KiB
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: homer-config
namespace: services
data:
config.yml: |
title: "Research Stack"
subtitle: "researchstack.info"
header: true
footer: false
columns: "3"
services:
- name: "Applications"
icon: "fas fa-rocket"
items:
- name: "Hermes"
subtitle: "Chat / orchestrator"
url: "https://researchstack.info/apps/chat/"
target: "_blank"
- name: "Jellyfin"
subtitle: "Media streaming"
url: "https://researchstack.info/apps/jellyfin/"
target: "_blank"
- name: "Navidrome"
subtitle: "Music"
url: "https://researchstack.info/apps/music/"
target: "_blank"
- name: "Audiobookshelf"
subtitle: "Books & podcasts"
url: "https://researchstack.info/apps/books/"
target: "_blank"
- name: "Actual Budget"
subtitle: "Personal finance"
url: "https://researchstack.info/apps/budget/"
target: "_blank"
- name: "Server"
icon: "fas fa-server"
items:
- name: "Uptime Kuma"
subtitle: "Service status"
url: "https://researchstack.info/server/status/"
target: "_blank"
- name: "Homarr"
subtitle: "Dashboard"
url: "https://researchstack.info/server/dash/"
target: "_blank"
- name: "Vaultwarden"
subtitle: "Password vault"
url: "https://researchstack.info/server/vault/"
target: "_blank"
- name: "Identity & APIs"
icon: "fas fa-id-card"
items:
- name: "Authentik"
subtitle: "Single sign-on"
url: "https://auth.researchstack.info"
target: "_blank"
- name: "Registry API"
subtitle: "Node join & heartbeat"
url: "https://researchstack.info/api/registry/"
target: "_blank"
- name: "Job Router"
subtitle: "Compute dispatch"
url: "https://researchstack.info/api/jobs/"
target: "_blank"