diff --git a/homepage-system/homepage.yaml b/homepage-system/homepage.yaml index 54cd0b3..821c7f4 100644 --- a/homepage-system/homepage.yaml +++ b/homepage-system/homepage.yaml @@ -453,6 +453,264 @@ data: # Custom JS custom.js: "" --- +apiVersion: v1 +kind: ConfigMap +metadata: + name: homepage-user-config + namespace: homepage-system + labels: + app.kubernetes.io/name: homepage-user + app.kubernetes.io/instance: homepage-user +data: + # Kubernetes connection configuration + kubernetes.yaml: | + mode: cluster + ingress: true + + # Global settings + settings.yaml: | + title: Dooplex Dashboard + favicon: https://nextcloud.dooplex.hu/s/9H89T5kgNRpkQDP/download + theme: dark + color: slate + headerStyle: clean + layout: + Media: + style: row + columns: 3 + Productivity: + style: row + columns: 3 + Other: + style: row + columns: 3 + providers: + longhorn: + url: http://192.168.0.209 + + # Services configuration - customize as needed + services.yaml: | + - Media: + - Arcade: + icon: romm.png + href: https://arcade.dooplex.hu + description: Retro Games + widget: + type: romm + url: http://romm.arcade-system.svc.cluster.local:8080 + - AudioBookshelf: + icon: audiobookshelf.png + href: https://audiobookshelf.dooplex.hu + description: AudioBooks + widget: + type: audiobookshelf + url: http://audiobookshelf.audiobookshelf-system.svc.cluster.local + key: "{{HOMEPAGE_VAR_AUDIOBOOKSHELF_API_KEY}}" + - Calibre-Web: + icon: calibre-web.png + href: https://books.dooplex.hu + description: eBooks + widget: + type: calibreweb + url: http://calibre-web.calibre-system.svc.cluster.local:8083 + username: "{{HOMEPAGE_VAR_CALIBREWEB_USER}}" + password: "{{HOMEPAGE_VAR_CALIBREWEB_PASS}}" + - Immich: + icon: immich.png + href: https://photos.dooplex.hu + description: Photos + widget: + type: immich + url: http://immich-server.immich-system.svc.cluster.local:2283 + key: "{{HOMEPAGE_VAR_IMMICH_API_KEY}}" + version: 2 + - Plex: + icon: plex.png + href: https://plex.dooplex.hu + description: Media Server + - Sonarr: + icon: sonarr.png + href: https://sonarr.dooplex.hu + description: TV Shows + widget: + type: sonarr + url: http://sonarr.servarr-system.svc.cluster.local:8989 + key: "{{HOMEPAGE_VAR_SONARR_API_KEY}}" + - Radarr: + icon: radarr.png + href: https://radarr.dooplex.hu + description: Movies + widget: + type: radarr + url: http://radarr.servarr-system.svc.cluster.local:7878 + key: "{{HOMEPAGE_VAR_RADARR_API_KEY}}" + - RadarrKids: + icon: https://nextcloud.dooplex.hu/s/E3LB8dJTTpyDSge/download + href: https://radarrkids.dooplex.hu + description: Kids Movies + widget: + type: radarr + url: http://radarrkids.servarr-system.svc.cluster.local:7879 + key: "{{HOMEPAGE_VAR_RADARRKIDS_API_KEY}}" + - Prowlarr: + icon: prowlarr.png + href: https://prowlarr.dooplex.hu + description: Indexer Manager + widget: + type: prowlarr + url: http://prowlarr.servarr-system.svc.cluster.local:9696 + key: "{{HOMEPAGE_VAR_PROWLARR_API_KEY}}" + - Seerr: + icon: overseerr.png + href: https://seerr.dooplex.hu + description: Movie, TV Show Request + widget: + type: overseerr + url: http://seerr.servarr-system.svc.cluster.local:5055 + key: "{{HOMEPAGE_VAR_SEERR_API_KEY}}" + + - Productivity: + - ActialBudget: + icon: actual-budget.png + href: https://actualbudget.dooplex.hu + description: Finance Manager + - Bookstack: + icon: bookstack.png + href: https://bookstack.dooplex.hu + description: Documentation, Wiki + - Nextcloud: + icon: nextcloud.png + href: https://nextcloud.dooplex.hu + description: Cloud Storage + - Outline: + icon: outline.png + href: https://outline.dooplex.hu + description: Team Wiki, Documentation + - Paperless: + icon: paperless-ngx.png + href: https://paperless.dooplex.hu + description: Document Management + - Tandoor: + icon: tandoor-recipes.png + href: https://tandoor.dooplex.hu + description: Recipe Manager + widget: + type: tandoor + url: http://tandoor.tandoor-system.svc.cluster.local:8080 + key: "{{HOMEPAGE_VAR_TANDOOR_API_KEY}}" + - Vaultwarden: + icon: bitwarden.png + href: https://vaultwarden.dooplex.hu + description: Password Manager + + - Other: + - Adventurelog: + icon: adventure-log.png + href: https://adventures.dooplex.hu + description: Documenting Travels + - Fileshare: + icon: https://nextcloud.dooplex.hu/s/89PfscLdHoykWrZ/download + href: https://fileshare.dooplex.hu + description: Drag&Drop Fileshare + - Pastes: + icon: opengist.png + href: https://paste.dooplex.hu + description: Pastes (opengist) + - Privatebin: + icon: privatebin.png + href: https://privatebin.dooplex.hu + description: Pastebin (secure) + - Plantit: + icon: plant-it.png + href: https://plantit.dooplex.hu + description: Gardening companion + - Wanderer: + icon: wanderer.png + href: https://wanderer.dooplex.hu + description: Trail database + - Workout: + icon: wger.png + href: https://workout.dooplex.hu + description: Workout and fitness manager + + # Widgets configuration + widgets.yaml: | + - logo: + icon: https://nextcloud.dooplex.hu/s/sD9GdyEZNFdxRns/download + - greeting: + text_size: xl + text: "" + - datetime: + text_size: l + format: + dateStyle: long + timeStyle: short + hour12: false + - kubernetes: + cluster: + show: true + cpu: true + memory: true + showLabel: true + label: "dooplex" + nodes: + show: true + cpu: true + memory: true + showLabel: true + - longhorn: + expanded: true + total: true + labels: true + nodes: false + - search: + provider: duckduckgo + target: _blank + + # Bookmarks + bookmarks.yaml: | + - Developer: + - GitHub: + - abbr: GH + href: https://github.com + icon: github.png + - Gitea: + - abbr: GT + href: https://gitea.dooplex.hu + icon: gitea.png + - Documentation: + - Kubernetes: + - abbr: K8s + href: https://kubernetes.io/docs + icon: kubernetes.png + - ArgoCD: + - abbr: Argo + href: https://argo-cd.readthedocs.io + icon: argo-cd.png + + # Docker settings (not used in k8s mode) + docker.yaml: "" + + # Custom CSS + custom.css: | + /* Make the logo widget container bigger */ + #information-widgets .information-widget-logo { + min-height: 100px !important; + display: flex !important; + align-items: center !important; + } + + /* Make the image fill it */ + #information-widgets .information-widget-logo img { + max-height: 100px !important; + height: 100px !important; + width: auto !important; + object-fit: contain !important; + } + + # Custom JS + custom.js: "" +--- apiVersion: apps/v1 kind: Deployment metadata: @@ -465,10 +723,7 @@ metadata: spec: replicas: 1 strategy: - type: RollingUpdate - rollingUpdate: - maxSurge: 1 - maxUnavailable: 0 + type: Recreate selector: matchLabels: app.kubernetes.io/name: homepage @@ -623,6 +878,153 @@ spec: configMap: name: homepage-config --- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: homepage-user + namespace: homepage-system + labels: + app.kubernetes.io/name: homepage-user + app.kubernetes.io/instance: homepage-user + app.kubernetes.io/version: "v1.8.0" +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app.kubernetes.io/name: homepage-user + app.kubernetes.io/instance: homepage-user + template: + metadata: + labels: + app.kubernetes.io/name: homepagee-user + app.kubernetes.io/instance: homepagee-user + app.kubernetes.io/version: "v1.8.0" + spec: + serviceAccountName: homepage + automountServiceAccountToken: true + dnsPolicy: ClusterFirst + enableServiceLinks: true + containers: + - name: homepage + image: ghcr.io/gethomepage/homepage:v1.8.0 + imagePullPolicy: IfNotPresent + env: + # Required for external access + - name: HOMEPAGE_ALLOWED_HOSTS + value: "*" + # Timezone + - name: TZ + value: "Europe/Budapest" + # Optional: Widget API keys (create secret with these if needed) + - name: HOMEPAGE_VAR_TANDOOR_API_KEY + valueFrom: + secretKeyRef: + name: homepage-secrets + key: tandoor-api-key + - name: HOMEPAGE_VAR_PROWLARR_API_KEY + valueFrom: + secretKeyRef: + name: homepage-secrets + key: prowlarr-api-key + - name: HOMEPAGE_VAR_SONARR_API_KEY + valueFrom: + secretKeyRef: + name: homepage-secrets + key: sonarr-api-key + - name: HOMEPAGE_VAR_RADARR_API_KEY + valueFrom: + secretKeyRef: + name: homepage-secrets + key: radarr-api-key + - name: HOMEPAGE_VAR_RADARRKIDS_API_KEY + valueFrom: + secretKeyRef: + name: homepage-secrets + key: radarrkids-api-key + - name: HOMEPAGE_VAR_SEERR_API_KEY + valueFrom: + secretKeyRef: + name: homepage-secrets + key: seerr-api-key + - name: HOMEPAGE_VAR_IMMICH_API_KEY + valueFrom: + secretKeyRef: + name: homepage-secrets + key: immich-api-key + - name: HOMEPAGE_VAR_AUDIOBOOKSHELF_API_KEY + valueFrom: + secretKeyRef: + name: homepage-secrets + key: audiobookshelf-api-key + - name: HOMEPAGE_VAR_CALIBREWEB_USER + valueFrom: + secretKeyRef: + name: homepage-secrets + key: calibreweb-user + - name: HOMEPAGE_VAR_CALIBREWEB_PASS + valueFrom: + secretKeyRef: + name: homepage-secrets + key: calibreweb-pass + ports: + - name: http + containerPort: 3000 + protocol: TCP + livenessProbe: + httpGet: + path: /api/healthcheck + port: http + initialDelaySeconds: 30 + periodSeconds: 30 + timeoutSeconds: 10 + failureThreshold: 3 + readinessProbe: + httpGet: + path: /api/healthcheck + port: http + initialDelaySeconds: 10 + periodSeconds: 10 + timeoutSeconds: 5 + failureThreshold: 3 + resources: + requests: + cpu: 50m + memory: 128Mi + limits: + cpu: 500m + memory: 512Mi + volumeMounts: + - name: config + mountPath: /app/config/kubernetes.yaml + subPath: kubernetes.yaml + - name: config + mountPath: /app/config/settings.yaml + subPath: settings.yaml + - name: config + mountPath: /app/config/services.yaml + subPath: services.yaml + - name: config + mountPath: /app/config/widgets.yaml + subPath: widgets.yaml + - name: config + mountPath: /app/config/bookmarks.yaml + subPath: bookmarks.yaml + - name: config + mountPath: /app/config/docker.yaml + subPath: docker.yaml + - name: config + mountPath: /app/config/custom.css + subPath: custom.css + - name: config + mountPath: /app/config/custom.js + subPath: custom.js + volumes: + - name: config + configMap: + name: homepage-user-config +--- apiVersion: v1 kind: Service metadata: @@ -642,6 +1044,25 @@ spec: app.kubernetes.io/name: homepage app.kubernetes.io/instance: homepage --- +apiVersion: v1 +kind: Service +metadata: + name: homepage-user + namespace: homepage-system + labels: + app.kubernetes.io/name: homepage-user + app.kubernetes.io/instance: homepage-user +spec: + type: ClusterIP + ports: + - name: http + port: 3000 + targetPort: http + protocol: TCP + selector: + app.kubernetes.io/name: homepage-user + app.kubernetes.io/instance: homepage-user +--- # Ingress WITH Authentik proxy authentication # Update the auth-url annotation with your actual outpost service name after Authentik creates it apiVersion: networking.k8s.io/v1 @@ -700,3 +1121,49 @@ spec: - homepage.dooplex.hu secretName: homepage-tls --- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: homepage-user + namespace: homepage-system + labels: + app.kubernetes.io/name: homepage-user + app.kubernetes.io/instance: homepage-user + annotations: + cert-manager.io/cluster-issuer: letsencrypt-prod + external-dns.alpha.kubernetes.io/hostname: dooplex.hu + nginx.ingress.kubernetes.io/ssl-redirect: "true" + nginx.ingress.kubernetes.io/proxy-buffer-size: "16k" + nginx.ingress.kubernetes.io/proxy-buffers-number: "4" + nginx.ingress.kubernetes.io/proxy-busy-buffers-size: "32k" + # Authentik Forward Auth annotations + # Update 'homepage-outpost' with your actual outpost name + nginx.ingress.kubernetes.io/auth-url: http://ak-outpost-homepage-user-outpost.auth-system.svc.cluster.local:9000/outpost.goauthentik.io/auth/nginx + nginx.ingress.kubernetes.io/auth-signin: https://dooplex.hu/outpost.goauthentik.io/start?rd=$escaped_request_uri + nginx.ingress.kubernetes.io/auth-response-headers: Set-Cookie,X-authentik-username,X-authentik-groups,X-authentik-email + nginx.ingress.kubernetes.io/auth-snippet: | + proxy_set_header X-Forwarded-Host $http_host; + # Homepage auto-discovery annotation + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "Homepage" + gethomepage.dev/description: "Application Dashboard" + gethomepage.dev/group: "Infrastructure" + gethomepage.dev/icon: "homepage.png" +spec: + ingressClassName: nginx-internal + rules: + - host: dooplex.hu + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: homepage-user + port: + number: 3000 + tls: + - hosts: + - dooplex.hu + secretName: homepage-user-tls +--- \ No newline at end of file