From d150b960824920fb489639657b4bfa84fb6516ae Mon Sep 17 00:00:00 2001 From: Morten Olsen Date: Fri, 2 Jan 2026 13:17:54 +0100 Subject: [PATCH] migrate homebox --- apps/charts/homebox/Chart.yaml | 6 +- apps/charts/homebox/templates/database.yaml | 7 +- apps/charts/homebox/templates/deployment.yaml | 81 +------------------ apps/charts/homebox/templates/pvc.yaml | 12 +-- apps/charts/homebox/templates/service.yaml | 16 +--- .../homebox/templates/virtual-service.yaml | 40 +-------- apps/charts/homebox/values.yaml | 73 +++++++++++++++++ apps/common/MIGRATION.md | 12 ++- 8 files changed, 93 insertions(+), 154 deletions(-) diff --git a/apps/charts/homebox/Chart.yaml b/apps/charts/homebox/Chart.yaml index 8c0e9b9..5c46db9 100644 --- a/apps/charts/homebox/Chart.yaml +++ b/apps/charts/homebox/Chart.yaml @@ -1,3 +1,7 @@ apiVersion: v2 version: 1.0.0 -name: vikunja +name: homebox +dependencies: + - name: common + version: 1.0.0 + repository: file://../../common diff --git a/apps/charts/homebox/templates/database.yaml b/apps/charts/homebox/templates/database.yaml index 6a30b53..8a7fad4 100644 --- a/apps/charts/homebox/templates/database.yaml +++ b/apps/charts/homebox/templates/database.yaml @@ -1,6 +1 @@ -apiVersion: homelab.mortenolsen.pro/v1 -kind: PostgresDatabase -metadata: - name: '{{ .Release.Name }}' -spec: - environment: '{{ .Values.globals.environment }}' +{{ include "common.database" . }} diff --git a/apps/charts/homebox/templates/deployment.yaml b/apps/charts/homebox/templates/deployment.yaml index 229ed33..4508e33 100644 --- a/apps/charts/homebox/templates/deployment.yaml +++ b/apps/charts/homebox/templates/deployment.yaml @@ -1,80 +1 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: "{{ .Release.Name }}" -spec: - strategy: - type: RollingUpdate - replicas: 1 - revisionHistoryLimit: 0 - selector: - matchLabels: - app: "{{ .Release.Name }}" - template: - metadata: - labels: - app: "{{ .Release.Name }}" - spec: - containers: - - name: "{{ .Release.Name }}" - image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - imagePullPolicy: "{{ .Values.image.pullPolicy }}" - ports: - - name: http - containerPort: 7745 - protocol: TCP - livenessProbe: - tcpSocket: - port: http - readinessProbe: - tcpSocket: - port: http - volumeMounts: - - mountPath: /data - name: data - env: - - name: TZ - value: "{{ .Values.globals.timezone }}" - - - name: HBOX_OPTIONS_ALLOW_REGISTRATION - value: "false" - - - name: HBOX_DATABASE_DRIVER - value: postgres - - - name: HBOX_DATABASE_DATABASE - valueFrom: - secretKeyRef: - name: "{{ .Release.Name }}-pg-connection" - key: database - - - name: HBOX_DATABASE_HOST - valueFrom: - secretKeyRef: - name: "{{ .Release.Name }}-pg-connection" - key: host - - - name: HBOX_DATABASE_PORT - valueFrom: - secretKeyRef: - name: "{{ .Release.Name }}-pg-connection" - key: port - - - name: HBOX_DATABASE_SSL_MODE - value: "disable" - - - name: HBOX_DATABASE_USERNAME - valueFrom: - secretKeyRef: - name: "{{ .Release.Name }}-pg-connection" - key: user - - name: HBOX_DATABASE_PASSWORD - valueFrom: - secretKeyRef: - name: "{{ .Release.Name }}-pg-connection" - key: password - - volumes: - - name: data - persistentVolumeClaim: - claimName: "{{ .Release.Name }}-data" +{{ include "common.deployment" . }} diff --git a/apps/charts/homebox/templates/pvc.yaml b/apps/charts/homebox/templates/pvc.yaml index bc1d0a6..379bad9 100644 --- a/apps/charts/homebox/templates/pvc.yaml +++ b/apps/charts/homebox/templates/pvc.yaml @@ -1,11 +1 @@ -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: '{{ .Release.Name }}-data' -spec: - accessModes: - - 'ReadWriteOnce' - resources: - requests: - storage: '1Gi' - storageClassName: '{{ .Values.globals.environment }}' +{{ include "common.pvc" . }} diff --git a/apps/charts/homebox/templates/service.yaml b/apps/charts/homebox/templates/service.yaml index d208e30..f024c64 100644 --- a/apps/charts/homebox/templates/service.yaml +++ b/apps/charts/homebox/templates/service.yaml @@ -1,15 +1 @@ -apiVersion: v1 -kind: Service -metadata: - name: "{{ .Release.Name }}" - labels: - app: "{{ .Release.Name }}" -spec: - type: ClusterIP - ports: - - port: 80 - targetPort: 7745 - protocol: TCP - name: http - selector: - app: "{{ .Release.Name }}" +{{ include "common.service" . }} diff --git a/apps/charts/homebox/templates/virtual-service.yaml b/apps/charts/homebox/templates/virtual-service.yaml index 36e9d43..766f6b9 100644 --- a/apps/charts/homebox/templates/virtual-service.yaml +++ b/apps/charts/homebox/templates/virtual-service.yaml @@ -1,39 +1 @@ -apiVersion: networking.istio.io/v1 -kind: VirtualService -metadata: - name: "{{ .Release.Name }}-public" - namespace: "{{ .Release.Namespace }}" -spec: - gateways: - - "{{ .Values.globals.istio.gateways.public }}" - - mesh - hosts: - - "{{ .Values.subdomain }}.{{ .Values.globals.domain }}" - - mesh - http: - - route: - - destination: - host: "{{ .Release.Name }}" - port: - number: 80 - ---- -apiVersion: networking.istio.io/v1 -kind: VirtualService -metadata: - name: "{{ .Release.Name }}-private" - namespace: "{{ .Release.Namespace }}" -spec: - gateways: - - "{{ .Values.globals.istio.gateways.private }}" - - mesh - hosts: - - "{{ .Values.subdomain }}.{{ .Values.globals.domain }}" - - mesh - http: - - route: - - destination: - host: "{{ .Release.Name }}" - port: - number: 80 - +{{ include "common.virtualService" . }} diff --git a/apps/charts/homebox/values.yaml b/apps/charts/homebox/values.yaml index 30294f9..98425c9 100644 --- a/apps/charts/homebox/values.yaml +++ b/apps/charts/homebox/values.yaml @@ -2,4 +2,77 @@ image: repository: ghcr.io/sysadminsmedia/homebox tag: latest@sha256:b6c1362ab0450ca8fc1a347c13614a0b4f5674e1ecfa9a57a8c456612921842b pullPolicy: IfNotPresent + subdomain: homebox + +# Deployment configuration +deployment: + strategy: RollingUpdate + replicas: 1 + +# Container configuration +container: + port: 7745 + healthProbe: + type: tcpSocket + port: http # Use named port + +# Service configuration +service: + port: 80 + type: ClusterIP + +# Volume configuration +volumes: + - name: data + mountPath: /data + persistentVolumeClaim: data + +# Persistent volume claims +persistentVolumeClaims: + - name: data + size: 1Gi + +# VirtualService configuration +virtualService: + enabled: true + gateways: + public: true + private: true + +# Database configuration +database: + enabled: true + +# Environment variables +env: + TZ: + value: "{timezone}" + HBOX_OPTIONS_ALLOW_REGISTRATION: "false" + HBOX_DATABASE_DRIVER: postgres + HBOX_DATABASE_DATABASE: + valueFrom: + secretKeyRef: + name: "{release}-connection" + key: database + HBOX_DATABASE_HOST: + valueFrom: + secretKeyRef: + name: "{release}-connection" + key: host + HBOX_DATABASE_PORT: + valueFrom: + secretKeyRef: + name: "{release}-connection" + key: port + HBOX_DATABASE_SSL_MODE: "disable" + HBOX_DATABASE_USERNAME: + valueFrom: + secretKeyRef: + name: "{release}-connection" + key: user + HBOX_DATABASE_PASSWORD: + valueFrom: + secretKeyRef: + name: "{release}-connection" + key: password diff --git a/apps/common/MIGRATION.md b/apps/common/MIGRATION.md index 4863038..bcadf09 100644 --- a/apps/common/MIGRATION.md +++ b/apps/common/MIGRATION.md @@ -464,7 +464,7 @@ The PostgresDatabase resource creates a secret named `{release}-connection` cont - `host` - Database hostname - `port` - Database port - `database` - Database name -- `username` - Database username +- `user` - Database username - `password` - Database password ### Using Database Secrets @@ -483,6 +483,11 @@ env: secretKeyRef: name: "{release}-connection" key: host + DB_USER: + valueFrom: + secretKeyRef: + name: "{release}-connection" + key: user ``` ### Global Configuration @@ -504,10 +509,13 @@ If migrating from the legacy `homelab.mortenolsen.pro/v1` PostgresDatabase: 1. **Update API version**: Changed from `homelab.mortenolsen.pro/v1` to `postgres.homelab.mortenolsen.pro/v1` 2. **Update spec**: Changed from `environment` to `clusterRef` with `name` and `namespace` 3. **Update secret name**: Changed from `{release}-pg-connection` to `{release}-connection` -4. **Add namespace**: Metadata now includes `namespace: {{ .Release.Namespace }}` +4. **Update secret key**: The username key remains `user` (no change needed) +5. **Add namespace**: Metadata now includes `namespace: {{ .Release.Namespace }}` The common library template handles all of this automatically. +**Note:** The new PostgresDatabase secret uses the key `user` (not `username`) for the database username. When migrating environment variables, ensure you reference `key: user` in your secret references. + ### Migrating Database from Old Server to New Server When migrating databases from the old PostgreSQL server (`prod-postgres-cluster-0` in `homelab` namespace) to the new server (`postgres-statefulset-0` in `shared` namespace), use the migration script.