From ca7aee700f8ec2f9ef6569a6db81b86e9c098ab9 Mon Sep 17 00:00:00 2001 From: Michael Thomson Date: Wed, 24 Jan 2024 15:59:57 -0500 Subject: [PATCH] immich --- .../helmrepository-immich.yaml | 8 ++ .../kustomizations/kustomization-immich.yaml | 18 +++ bootstrap/namespaces/namespace-immich.yaml | 4 + immich/dns-endpoint.yaml | 12 ++ immich/helmrelease-immich.yaml | 116 ++++++++++++++++++ immich/pvc-data.yaml | 12 ++ 6 files changed, 170 insertions(+) create mode 100644 bootstrap/helmrepositories/helmrepository-immich.yaml create mode 100644 bootstrap/kustomizations/kustomization-immich.yaml create mode 100644 bootstrap/namespaces/namespace-immich.yaml create mode 100644 immich/dns-endpoint.yaml create mode 100644 immich/helmrelease-immich.yaml create mode 100644 immich/pvc-data.yaml diff --git a/bootstrap/helmrepositories/helmrepository-immich.yaml b/bootstrap/helmrepositories/helmrepository-immich.yaml new file mode 100644 index 0000000..9580ead --- /dev/null +++ b/bootstrap/helmrepositories/helmrepository-immich.yaml @@ -0,0 +1,8 @@ +apiVersion: source.toolkit.fluxcd.io/v1beta2 +kind: HelmRepository +metadata: + name: immich + namespace: flux-system +spec: + interval: 15m + url: https://immich-app.github.io/immich-charts diff --git a/bootstrap/kustomizations/kustomization-immich.yaml b/bootstrap/kustomizations/kustomization-immich.yaml new file mode 100644 index 0000000..a9393ab --- /dev/null +++ b/bootstrap/kustomizations/kustomization-immich.yaml @@ -0,0 +1,18 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: immich + namespace: flux-system +spec: + interval: 15m + path: ./immich + prune: true # remove any elements later removed from the above path + timeout: 2m # if not set, this defaults to interval duration, which is 1h + sourceRef: + kind: GitRepository + name: flux-system + healthChecks: + - apiVersion: helm.toolkit.fluxcd.io/v2beta1 + kind: HelmRelease + name: immich + namespace: immich diff --git a/bootstrap/namespaces/namespace-immich.yaml b/bootstrap/namespaces/namespace-immich.yaml new file mode 100644 index 0000000..c796392 --- /dev/null +++ b/bootstrap/namespaces/namespace-immich.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: immich diff --git a/immich/dns-endpoint.yaml b/immich/dns-endpoint.yaml new file mode 100644 index 0000000..99f15b5 --- /dev/null +++ b/immich/dns-endpoint.yaml @@ -0,0 +1,12 @@ +apiVersion: externaldns.k8s.io/v1alpha1 +kind: DNSEndpoint +metadata: + name: immich.michaelthomson.dev + namespace: immich +spec: + endpoints: + - dnsName: immich.michaelthomson.dev + recordTTL: 180 + recordType: CNAME + targets: + - server.michaelthomson.dev diff --git a/immich/helmrelease-immich.yaml b/immich/helmrelease-immich.yaml new file mode 100644 index 0000000..0c6888e --- /dev/null +++ b/immich/helmrelease-immich.yaml @@ -0,0 +1,116 @@ +apiVersion: helm.toolkit.fluxcd.io/v2beta1 +kind: HelmRelease +metadata: + name: immich + namespace: immich +spec: + chart: + spec: + chart: immich + version: 0.3.x + sourceRef: + kind: HelmRepository + name: immich + namespace: flux-system + interval: 15m + timeout: 5m + releaseName: immich + values: + ## This chart relies on the common library chart from bjw-s + ## You can find it at https://github.com/bjw-s/helm-charts/tree/main/charts/library/common + ## Refer there for more detail about the supported values + + # These entries are shared between all the Immich components + + env: + REDIS_HOSTNAME: '{{ printf "%s-redis-master" .Release.Name }}' + DB_HOSTNAME: "{{ .Release.Name }}-postgresql" + DB_USERNAME: "{{ .Values.postgresql.global.postgresql.auth.username }}" + DB_DATABASE_NAME: "{{ .Values.postgresql.global.postgresql.auth.database }}" + # -- You should provide your own secret outside of this helm-chart and use `postgresql.global.postgresql.auth.existingSecret` to provide credentials to the postgresql instance + DB_PASSWORD: "{{ .Values.postgresql.global.postgresql.auth.password }}" + IMMICH_MACHINE_LEARNING_URL: '{{ printf "http://%s-machine-learning:3003" .Release.Name }}' + + image: + tag: v1.91.4 + + immich: + persistence: + # Main data store for all photos shared between different components. + library: + # Automatically creating the library volume is not supported by this chart + # You have to specify an existing PVC to use + existingClaim: immich-data + + # Dependencies + + postgresql: + enabled: true + image: + repository: tensorchord/pgvecto-rs + tag: pg14-v0.1.11 + global: + postgresql: + auth: + username: immich + database: immich + password: immich + primary: + initdb: + scripts: + create-extensions.sql: | + CREATE EXTENSION cube; + CREATE EXTENSION earthdistance; + CREATE EXTENSION vectors; + + redis: + enabled: true + architecture: standalone + auth: + enabled: false + + # Immich components + + server: + enabled: true + image: + repository: ghcr.io/immich-app/immich-server + pullPolicy: IfNotPresent + + ingress: + main: + enabled: true + annotations: + traefik.ingress.kubernetes.io/router.entrypoints: websecure + # traefik.ingress.kubernetes.io/router.middlewares: traefik-authentik@kubernetescrd + traefik.ingress.kubernetes.io/router.tls: "true" + hosts: + - host: immich.michaelthomson.dev + paths: + - path: "/" + tls: + - hosts: + - immich.michaelthomson.dev + secretName: letsencrypt-wildcard-cert-michaelthomson.dev + + microservices: + enabled: true + image: + repository: ghcr.io/immich-app/immich-server + pullPolicy: IfNotPresent + + machine-learning: + enabled: false + image: + repository: ghcr.io/immich-app/immich-machine-learning + pullPolicy: IfNotPresent + env: + TRANSFORMERS_CACHE: /cache + persistence: + cache: + enabled: true + size: 10Gi + # Optional: Set this to pvc to avoid downloading the ML models every start. + type: emptyDir + accessMode: ReadWriteMany + # storageClass: your-class diff --git a/immich/pvc-data.yaml b/immich/pvc-data.yaml new file mode 100644 index 0000000..2d2904e --- /dev/null +++ b/immich/pvc-data.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: immich-data + namespace: immich +spec: + accessModes: + - ReadWriteOnce + storageClassName: nfs-client + resources: + requests: + storage: 1Ti