Replace hajimari with gethomepage (#75)
## Summary - Remove hajimari (unmaintained since Oct 2022, broken helm deps) - Add gethomepage (28k stars, actively maintained, monthly releases) - Migrate custom apps, bookmarks, and search config - Enable k8s RBAC for service autodiscovery - Configure Tailscale ingress at go.tail8d86e.ts.net ## Why the switch Hajimari hasn't released since October 2022. The helm chart has a broken dependency (bjw-s/common URL is 404), and unreleased code on main has bugs. gethomepage has similar k8s autodiscovery via ingress annotations and is very actively maintained. ## Deployment and Testing - [ ] Delete hajimari app from ArgoCD - [ ] Delete hajimari namespace - [ ] Sync apps to pick up new homepage app - [ ] Sync homepage app - [ ] Verify go.ops.eblu.me loads 🤖 Generated with [Claude Code](https://claude.com/claude-code) Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/75
This commit is contained in:
parent
9fd70c3892
commit
38538ad5f0
14 changed files with 180 additions and 188 deletions
|
|
@ -1,33 +0,0 @@
|
|||
# Hajimari - Service Dashboard / Start Page
|
||||
#
|
||||
# Using custom fork from forge.ops.eblu.me/eblume/hajimari
|
||||
# Fork enables custom builds with search auto-focus, weather widget, etc.
|
||||
#
|
||||
# Auto-discovers k8s services via ingress annotations and displays
|
||||
# custom apps for non-k8s services (Forge, Registry, NAS).
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: hajimari
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: default
|
||||
sources:
|
||||
# Helm chart from our fork
|
||||
- repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/hajimari.git
|
||||
targetRevision: v0.3.1-blumeops.1
|
||||
path: charts/hajimari
|
||||
helm:
|
||||
releaseName: hajimari
|
||||
valueFiles:
|
||||
- $values/argocd/manifests/hajimari/values.yaml
|
||||
# Values from blumeops repo
|
||||
- repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/blumeops.git
|
||||
targetRevision: main
|
||||
ref: values
|
||||
destination:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: hajimari
|
||||
syncPolicy:
|
||||
syncOptions:
|
||||
- CreateNamespace=true
|
||||
30
argocd/apps/homepage.yaml
Normal file
30
argocd/apps/homepage.yaml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# Homepage - Service Dashboard / Start Page
|
||||
#
|
||||
# Replaced hajimari with gethomepage for active maintenance and better features.
|
||||
# Auto-discovers k8s services via ingress annotations.
|
||||
#
|
||||
# Helm chart: https://github.com/jameswynn/helm-charts/tree/main/charts/homepage
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
name: homepage
|
||||
namespace: argocd
|
||||
spec:
|
||||
project: default
|
||||
sources:
|
||||
- repoURL: https://jameswynn.github.io/helm-charts
|
||||
chart: homepage
|
||||
targetRevision: 2.1.0
|
||||
helm:
|
||||
releaseName: homepage
|
||||
valueFiles:
|
||||
- $values/argocd/manifests/homepage/values.yaml
|
||||
- repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/blumeops.git
|
||||
targetRevision: main
|
||||
ref: values
|
||||
destination:
|
||||
server: https://kubernetes.default.svc
|
||||
namespace: homepage
|
||||
syncPolicy:
|
||||
syncOptions:
|
||||
- CreateNamespace=true
|
||||
|
|
@ -11,12 +11,13 @@ metadata:
|
|||
namespace: argocd
|
||||
annotations:
|
||||
tailscale.com/proxy-class: "default"
|
||||
hajimari.io/enable: "true"
|
||||
hajimari.io/url: "https://argocd.ops.eblu.me"
|
||||
hajimari.io/icon: "simple-icons:argo"
|
||||
hajimari.io/appName: "ArgoCD"
|
||||
hajimari.io/group: "Infrastructure"
|
||||
hajimari.io/info: "GitOps CD"
|
||||
gethomepage.dev/enabled: "true"
|
||||
gethomepage.dev/name: "ArgoCD"
|
||||
gethomepage.dev/group: "Infrastructure"
|
||||
gethomepage.dev/icon: "argocd.png"
|
||||
gethomepage.dev/description: "GitOps CD"
|
||||
gethomepage.dev/href: "https://argocd.ops.eblu.me"
|
||||
gethomepage.dev/pod-selector: "app.kubernetes.io/name=argocd-server"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
|
|
|
|||
|
|
@ -5,12 +5,13 @@ metadata:
|
|||
namespace: devpi
|
||||
annotations:
|
||||
tailscale.com/proxy-class: "default"
|
||||
hajimari.io/enable: "true"
|
||||
hajimari.io/url: "https://pypi.ops.eblu.me"
|
||||
hajimari.io/icon: "simple-icons:pypi"
|
||||
hajimari.io/appName: "PyPI"
|
||||
hajimari.io/group: "Infrastructure"
|
||||
hajimari.io/info: "PyPI cache"
|
||||
gethomepage.dev/enabled: "true"
|
||||
gethomepage.dev/name: "PyPI"
|
||||
gethomepage.dev/group: "Infrastructure"
|
||||
gethomepage.dev/icon: "pypi.png"
|
||||
gethomepage.dev/description: "PyPI cache"
|
||||
gethomepage.dev/href: "https://pypi.ops.eblu.me"
|
||||
gethomepage.dev/pod-selector: "app=devpi"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
|
|
|
|||
|
|
@ -9,12 +9,13 @@ metadata:
|
|||
namespace: monitoring
|
||||
annotations:
|
||||
tailscale.com/proxy-class: "default"
|
||||
hajimari.io/enable: "true"
|
||||
hajimari.io/url: "https://grafana.ops.eblu.me"
|
||||
hajimari.io/icon: "simple-icons:grafana"
|
||||
hajimari.io/appName: "Grafana"
|
||||
hajimari.io/group: "Observability"
|
||||
hajimari.io/info: "Metrics dashboards"
|
||||
gethomepage.dev/enabled: "true"
|
||||
gethomepage.dev/name: "Grafana"
|
||||
gethomepage.dev/group: "Observability"
|
||||
gethomepage.dev/icon: "grafana.png"
|
||||
gethomepage.dev/description: "Metrics dashboards"
|
||||
gethomepage.dev/href: "https://grafana.ops.eblu.me"
|
||||
gethomepage.dev/pod-selector: "app.kubernetes.io/name=grafana"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
|
|
|
|||
|
|
@ -1,95 +0,0 @@
|
|||
# Hajimari values for blumeops
|
||||
# Service dashboard at go.ops.eblu.me
|
||||
|
||||
# Use custom image from our fork
|
||||
image:
|
||||
repository: registry.ops.eblu.me/blumeops/hajimari
|
||||
tag: v0.3.1-blumeops.1
|
||||
|
||||
# Page settings
|
||||
hajimari:
|
||||
title: BlumeOps
|
||||
name: Erich
|
||||
defaultEnable: true
|
||||
|
||||
# Display settings
|
||||
showAppGroups: true
|
||||
showAppUrls: false
|
||||
showAppInfo: true
|
||||
|
||||
# Search - default to Kagi
|
||||
defaultSearchProvider: Kagi
|
||||
searchProviders:
|
||||
- name: Kagi
|
||||
token: k
|
||||
icon: simple-icons:kagi
|
||||
searchUrl: https://kagi.com/search?q={query}
|
||||
url: https://kagi.com
|
||||
- name: Google
|
||||
token: g
|
||||
icon: simple-icons:google
|
||||
searchUrl: https://www.google.com/search?q={query}
|
||||
url: https://www.google.com
|
||||
- name: DuckDuckGo
|
||||
token: d
|
||||
icon: simple-icons:duckduckgo
|
||||
searchUrl: https://duckduckgo.com/?q={query}
|
||||
url: https://duckduckgo.com
|
||||
|
||||
# Discover ingresses from all namespaces
|
||||
namespaceSelector:
|
||||
any: true
|
||||
|
||||
# Non-k8s services (hosted on indri or LAN)
|
||||
customApps:
|
||||
- group: Host Services
|
||||
apps:
|
||||
- name: Forgejo
|
||||
url: https://forge.ops.eblu.me
|
||||
icon: simple-icons:forgejo
|
||||
info: Git forge
|
||||
- name: Registry
|
||||
url: https://registry.ops.eblu.me
|
||||
icon: mdi:docker
|
||||
info: Container registry
|
||||
- name: Sifaka NAS
|
||||
url: https://nas.ops.eblu.me
|
||||
icon: simple-icons:synology
|
||||
info: NAS dashboard
|
||||
|
||||
# Useful external bookmarks
|
||||
globalBookmarks:
|
||||
- group: Admin
|
||||
bookmarks:
|
||||
- name: Tailscale Admin
|
||||
url: https://login.tailscale.com/admin
|
||||
- name: 1Password
|
||||
url: https://my.1password.com
|
||||
- name: Pulumi
|
||||
url: https://app.pulumi.com/eblume/blumeops-tailnet
|
||||
|
||||
# Service account for reading ingresses across namespaces
|
||||
serviceAccount:
|
||||
create: true
|
||||
|
||||
# Tailscale Ingress - exposes at go.tail8d86e.ts.net
|
||||
# Caddy will proxy go.ops.eblu.me to this
|
||||
ingress:
|
||||
main:
|
||||
enabled: true
|
||||
ingressClassName: tailscale
|
||||
annotations:
|
||||
hajimari.io/enable: "false"
|
||||
hosts:
|
||||
- host: go
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
tls:
|
||||
- hosts:
|
||||
- go
|
||||
|
||||
# No persistence needed - config is in values.yaml
|
||||
persistence:
|
||||
data:
|
||||
enabled: false
|
||||
86
argocd/manifests/homepage/values.yaml
Normal file
86
argocd/manifests/homepage/values.yaml
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
# Homepage values for blumeops
|
||||
# Service dashboard at go.ops.eblu.me
|
||||
|
||||
# Enable RBAC for Kubernetes service autodiscovery
|
||||
enableRbac: true
|
||||
|
||||
serviceAccount:
|
||||
create: true
|
||||
|
||||
# Tailscale Ingress - exposes at go.tail8d86e.ts.net
|
||||
# Caddy proxies go.ops.eblu.me to this
|
||||
ingress:
|
||||
main:
|
||||
enabled: true
|
||||
ingressClassName: tailscale
|
||||
annotations:
|
||||
gethomepage.dev/enabled: "false"
|
||||
hosts:
|
||||
- host: go
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
tls:
|
||||
- hosts:
|
||||
- go
|
||||
|
||||
env:
|
||||
- name: HOMEPAGE_ALLOWED_HOSTS
|
||||
value: "go.tail8d86e.ts.net,go.ops.eblu.me"
|
||||
|
||||
config:
|
||||
# Host services (non-k8s, on indri or LAN)
|
||||
services:
|
||||
- Host Services:
|
||||
- Forgejo:
|
||||
href: https://forge.ops.eblu.me
|
||||
icon: forgejo
|
||||
description: Git forge
|
||||
- Registry:
|
||||
href: https://registry.ops.eblu.me
|
||||
icon: docker
|
||||
description: Container registry
|
||||
- Sifaka NAS:
|
||||
href: https://nas.ops.eblu.me
|
||||
icon: synology
|
||||
description: NAS dashboard
|
||||
|
||||
# External bookmarks
|
||||
bookmarks:
|
||||
- Admin:
|
||||
- Tailscale Admin:
|
||||
- href: https://login.tailscale.com/admin
|
||||
icon: tailscale
|
||||
- 1Password:
|
||||
- href: https://my.1password.com
|
||||
icon: 1password
|
||||
- Pulumi:
|
||||
- href: https://app.pulumi.com/eblume/blumeops-tailnet
|
||||
icon: pulumi
|
||||
|
||||
# Widgets on the page
|
||||
# Note: Kubernetes widget disabled - requires metrics-server
|
||||
widgets:
|
||||
- search:
|
||||
provider: custom
|
||||
url: https://kagi.com/search?q=
|
||||
target: _blank
|
||||
suggestionUrl: https://kagisuggest.com/api/autosuggest?q=
|
||||
|
||||
# Kubernetes autodiscovery
|
||||
kubernetes:
|
||||
mode: cluster
|
||||
|
||||
# Layout and styling
|
||||
settingsString: |
|
||||
title: BlumeOps
|
||||
headerStyle: boxed
|
||||
layout:
|
||||
Host Services:
|
||||
style: column
|
||||
Apps:
|
||||
style: column
|
||||
Observability:
|
||||
style: column
|
||||
Infrastructure:
|
||||
style: column
|
||||
|
|
@ -8,12 +8,13 @@ metadata:
|
|||
namespace: immich
|
||||
annotations:
|
||||
tailscale.com/funnel: "false"
|
||||
hajimari.io/enable: "true"
|
||||
hajimari.io/url: "https://photos.ops.eblu.me"
|
||||
hajimari.io/icon: "simple-icons:immich"
|
||||
hajimari.io/appName: "Immich"
|
||||
hajimari.io/group: "Apps"
|
||||
hajimari.io/info: "Photo management"
|
||||
gethomepage.dev/enabled: "true"
|
||||
gethomepage.dev/name: "Immich"
|
||||
gethomepage.dev/group: "Apps"
|
||||
gethomepage.dev/icon: "immich.png"
|
||||
gethomepage.dev/description: "Photo management"
|
||||
gethomepage.dev/href: "https://photos.ops.eblu.me"
|
||||
gethomepage.dev/pod-selector: "app.kubernetes.io/name=server"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
rules:
|
||||
|
|
|
|||
|
|
@ -6,12 +6,13 @@ metadata:
|
|||
namespace: kiwix
|
||||
annotations:
|
||||
tailscale.com/proxy-class: "default"
|
||||
hajimari.io/enable: "true"
|
||||
hajimari.io/url: "https://kiwix.ops.eblu.me"
|
||||
hajimari.io/icon: "mdi:wikipedia"
|
||||
hajimari.io/appName: "Kiwix"
|
||||
hajimari.io/group: "Apps"
|
||||
hajimari.io/info: "Offline Wikipedia"
|
||||
gethomepage.dev/enabled: "true"
|
||||
gethomepage.dev/name: "Kiwix"
|
||||
gethomepage.dev/group: "Apps"
|
||||
gethomepage.dev/icon: "kiwix.png"
|
||||
gethomepage.dev/description: "Offline Wikipedia"
|
||||
gethomepage.dev/href: "https://kiwix.ops.eblu.me"
|
||||
gethomepage.dev/pod-selector: "app=kiwix"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
|
|
|
|||
|
|
@ -7,12 +7,7 @@ metadata:
|
|||
namespace: monitoring
|
||||
annotations:
|
||||
tailscale.com/funnel: "false"
|
||||
hajimari.io/enable: "false"
|
||||
hajimari.io/url: "https://loki.ops.eblu.me"
|
||||
hajimari.io/icon: "mdi:text-box-search"
|
||||
hajimari.io/appName: "Loki"
|
||||
hajimari.io/group: "Observability"
|
||||
hajimari.io/info: "Log aggregation"
|
||||
gethomepage.dev/enabled: "false"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
rules:
|
||||
|
|
|
|||
|
|
@ -5,12 +5,13 @@ metadata:
|
|||
namespace: miniflux
|
||||
annotations:
|
||||
tailscale.com/proxy-class: "default"
|
||||
hajimari.io/enable: "true"
|
||||
hajimari.io/url: "https://feed.ops.eblu.me"
|
||||
hajimari.io/icon: "mdi:rss"
|
||||
hajimari.io/appName: "Miniflux"
|
||||
hajimari.io/group: "Apps"
|
||||
hajimari.io/info: "RSS reader"
|
||||
gethomepage.dev/enabled: "true"
|
||||
gethomepage.dev/name: "Miniflux"
|
||||
gethomepage.dev/group: "Apps"
|
||||
gethomepage.dev/icon: "miniflux.png"
|
||||
gethomepage.dev/description: "RSS reader"
|
||||
gethomepage.dev/href: "https://feed.ops.eblu.me"
|
||||
gethomepage.dev/pod-selector: "app=miniflux"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
|
|
|
|||
|
|
@ -7,12 +7,13 @@ metadata:
|
|||
namespace: monitoring
|
||||
annotations:
|
||||
tailscale.com/funnel: "false"
|
||||
hajimari.io/enable: "true"
|
||||
hajimari.io/url: "https://prometheus.ops.eblu.me"
|
||||
hajimari.io/icon: "simple-icons:prometheus"
|
||||
hajimari.io/appName: "Prometheus"
|
||||
hajimari.io/group: "Observability"
|
||||
hajimari.io/info: "Metrics storage"
|
||||
gethomepage.dev/enabled: "true"
|
||||
gethomepage.dev/name: "Prometheus"
|
||||
gethomepage.dev/group: "Observability"
|
||||
gethomepage.dev/icon: "prometheus.png"
|
||||
gethomepage.dev/description: "Metrics storage"
|
||||
gethomepage.dev/href: "https://prometheus.ops.eblu.me"
|
||||
gethomepage.dev/pod-selector: "app=prometheus"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
rules:
|
||||
|
|
|
|||
|
|
@ -5,12 +5,13 @@ metadata:
|
|||
namespace: teslamate
|
||||
annotations:
|
||||
tailscale.com/proxy-class: "default"
|
||||
hajimari.io/enable: "true"
|
||||
hajimari.io/url: "https://tesla.ops.eblu.me"
|
||||
hajimari.io/icon: "simple-icons:tesla"
|
||||
hajimari.io/appName: "TeslaMate"
|
||||
hajimari.io/group: "Apps"
|
||||
hajimari.io/info: "Tesla data logger"
|
||||
gethomepage.dev/enabled: "true"
|
||||
gethomepage.dev/name: "TeslaMate"
|
||||
gethomepage.dev/group: "Apps"
|
||||
gethomepage.dev/icon: "teslamate.png"
|
||||
gethomepage.dev/description: "Tesla data logger"
|
||||
gethomepage.dev/href: "https://tesla.ops.eblu.me"
|
||||
gethomepage.dev/pod-selector: "app=teslamate"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
|
|
|
|||
|
|
@ -6,12 +6,13 @@ metadata:
|
|||
namespace: torrent
|
||||
annotations:
|
||||
tailscale.com/proxy-class: "default"
|
||||
hajimari.io/enable: "true"
|
||||
hajimari.io/url: "https://torrent.ops.eblu.me"
|
||||
hajimari.io/icon: "mdi:download"
|
||||
hajimari.io/appName: "Transmission"
|
||||
hajimari.io/group: "Apps"
|
||||
hajimari.io/info: "Torrent client"
|
||||
gethomepage.dev/enabled: "true"
|
||||
gethomepage.dev/name: "Transmission"
|
||||
gethomepage.dev/group: "Apps"
|
||||
gethomepage.dev/icon: "transmission.png"
|
||||
gethomepage.dev/description: "Torrent client"
|
||||
gethomepage.dev/href: "https://torrent.ops.eblu.me"
|
||||
gethomepage.dev/pod-selector: "app=transmission"
|
||||
spec:
|
||||
ingressClassName: tailscale
|
||||
defaultBackend:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue