Replace Homepage Helm chart with kustomize manifests and custom Dockerfile #221

Merged
eblume merged 8 commits from feature/homepage-kustomize into main 2026-02-19 18:29:19 -08:00
Owner

Summary

  • Replace third-party Helm chart (jameswynn/homepage v2.1.0, pinned at app v1.2.0) with plain kustomize manifests and a custom Dockerfile building from forge mirror at v1.10.1
  • Adds Dockerfile (containers/homepage/) with multi-stage build (node:22-slim builder, node:22-alpine runtime)
  • Creates kustomize manifests: Deployment, Service, ConfigMap (6 config files), ServiceAccount, ClusterRole, ClusterRoleBinding
  • Keeps existing ingress-tailscale.yaml and all 6 ExternalSecret resources unchanged
  • Updates ArgoCD app definition from multi-source Helm to single directory source

Prerequisite

  • Homepage source mirrored at forge.ops.eblu.me/eblume/homepage.git
  • Container must be built and pushed before syncing: mise run container-release homepage v1.10.1

Deployment and Testing

  • Build and push container image: mise run container-release homepage v1.10.1
  • Branch-test via ArgoCD: argocd app set homepage --revision feature/homepage-kustomize && argocd app sync homepage
  • Verify dashboard loads at go.ops.eblu.me / go.tail8d86e.ts.net
  • Verify k8s autodiscovery works (services appear on dashboard)
  • Verify widgets load (weather, Forgejo, Jellyfin, etc.)
  • After merge: argocd app set homepage --revision main && argocd app sync homepage

🤖 Generated with Claude Code

## Summary - Replace third-party Helm chart (jameswynn/homepage v2.1.0, pinned at app v1.2.0) with plain kustomize manifests and a custom Dockerfile building from forge mirror at v1.10.1 - Adds Dockerfile (`containers/homepage/`) with multi-stage build (node:22-slim builder, node:22-alpine runtime) - Creates kustomize manifests: Deployment, Service, ConfigMap (6 config files), ServiceAccount, ClusterRole, ClusterRoleBinding - Keeps existing ingress-tailscale.yaml and all 6 ExternalSecret resources unchanged - Updates ArgoCD app definition from multi-source Helm to single directory source ## Prerequisite - Homepage source mirrored at forge.ops.eblu.me/eblume/homepage.git ✅ - Container must be built and pushed before syncing: `mise run container-release homepage v1.10.1` ## Deployment and Testing - [ ] Build and push container image: `mise run container-release homepage v1.10.1` - [ ] Branch-test via ArgoCD: `argocd app set homepage --revision feature/homepage-kustomize && argocd app sync homepage` - [ ] Verify dashboard loads at go.ops.eblu.me / go.tail8d86e.ts.net - [ ] Verify k8s autodiscovery works (services appear on dashboard) - [ ] Verify widgets load (weather, Forgejo, Jellyfin, etc.) - [ ] After merge: `argocd app set homepage --revision main && argocd app sync homepage` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The third-party Helm chart (jameswynn/homepage v2.1.0) pinned Homepage at
v1.2.0, 8 minor versions behind upstream. Replace with plain kustomize
manifests and a Dockerfile building from forge mirror at v1.10.1, matching
the pattern used by other blumeops services.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Node 24 is the current LTS (Node 22 EOL April 2027, but 24 is active LTS).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add ca-certificates to Homepage builder stage
All checks were successful
Build Container (Nix) / build (push) Successful in 3s
Build Container / build (push) Successful in 3m2s
7c0089a2ad
--no-install-recommends skips ca-certificates, causing git clone
to fail with SSL certificate verification errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Container versions are decoupled from upstream app versions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Container image tags are decoupled from upstream app versions;
service-versions.yaml tracks the upstream app version.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Health probes use the pod IP which was being rejected by Homepage's
host validation, causing readiness failures and restarts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
K8s probes use the pod IP as the Host header, which Homepage rejects.
Set an explicit Host header on probes to match the allowed hosts list.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Homepage tries to copy skeleton files (custom.css etc.) into /app/config
at startup. A ConfigMap volume mount makes the directory read-only,
blocking this. SubPath mounts keep individual config files from the
ConfigMap while leaving the directory writable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
eblume merged commit b876e39981 into main 2026-02-19 18:29:19 -08:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
eblume/blumeops!221
No description provided.