diff --git a/clusters/artemis/apps/immich/app-project.yaml b/clusters/artemis/apps/immich/app-project.yaml new file mode 100644 index 0000000..8a44bda --- /dev/null +++ b/clusters/artemis/apps/immich/app-project.yaml @@ -0,0 +1,17 @@ +--- +apiVersion: argoproj.io/v1alpha1 +kind: AppProject +metadata: + name: immich +spec: + description: Cloud Media Server + sourceRepos: + - '*' + sourceNamespaces: + - '*' + destinations: + - namespace: 'immich' + server: '*' + clusterResourceWhitelist: + - group: '*' + kind: '*' diff --git a/clusters/artemis/apps/immich/application.yaml b/clusters/artemis/apps/immich/application.yaml new file mode 100644 index 0000000..69234a5 --- /dev/null +++ b/clusters/artemis/apps/immich/application.yaml @@ -0,0 +1,24 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: immich + namespace: immich + labels: + platform.dgse.cloud/cluster: artemis + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: immich + source: + repoURL: 'https://git.dgse.cloud/DGSE/kubernetes.git' + path: manifests/artemis/immich + targetRevision: main + destination: + namespace: immich + name: in-cluster + syncPolicy: + syncOptions: + - CreateNamespace=true + automated: + prune: true + selfHeal: true diff --git a/clusters/artemis/apps/immich/kustomization.yaml b/clusters/artemis/apps/immich/kustomization.yaml new file mode 100644 index 0000000..f9b2a4b --- /dev/null +++ b/clusters/artemis/apps/immich/kustomization.yaml @@ -0,0 +1,7 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - app-project.yaml + - application.yaml diff --git a/clusters/artemis/apps/kustomization.yaml b/clusters/artemis/apps/kustomization.yaml index 95c6c49..32553fb 100644 --- a/clusters/artemis/apps/kustomization.yaml +++ b/clusters/artemis/apps/kustomization.yaml @@ -15,3 +15,4 @@ resources: - mailu - ntfy - penpot + - immich diff --git a/manifests/artemis/immich/kustomization.yaml b/manifests/artemis/immich/kustomization.yaml new file mode 100644 index 0000000..aaf8c1f --- /dev/null +++ b/manifests/artemis/immich/kustomization.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +metadata: + name: immich + +helmCharts: + - name: immich + repo: https://immich-app.github.io/immich-charts + version: 0.10.1 + releaseName: immich + namespace: immich + valuesFile: values.yaml diff --git a/manifests/artemis/immich/values.yaml b/manifests/artemis/immich/values.yaml new file mode 100644 index 0000000..f0fb6f5 --- /dev/null +++ b/manifests/artemis/immich/values.yaml @@ -0,0 +1,109 @@ +## This chart relies on the common library chart from bjw-s +## You can find it at https://github.com/bjw-s-labs/helm-charts/tree/common-4.3.0/charts/library/common +## Refer there for more detail about the supported values + +# These entries are shared between all the Immich components + +controllers: + main: + containers: + main: + image: + tag: v2.0.0 + env: + REDIS_HOSTNAME: '{{ printf "%s-valkey" .Release.Name }}' + IMMICH_MACHINE_LEARNING_URL: '{{ printf "http://%s-machine-learning:3003" .Release.Name }}' + # Add the env vars to connect to your database here. + +immich: + metrics: + # Enabling this will create the service monitors needed to monitor immich with the prometheus operator + enabled: false + 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: + # configuration is immich-config.json converted to yaml + # ref: https://immich.app/docs/install/config-file/ + # + configuration: {} + # trash: + # enabled: false + # days: 30 + # storageTemplate: + # enabled: true + # template: "{{y}}/{{y}}-{{MM}}-{{dd}}/{{filename}}" + +# Dependencies + +valkey: + enabled: true + controllers: + main: + containers: + main: + image: + repository: docker.io/valkey/valkey + tag: 9.0-alpine@sha256:73f3aa08d95879525aa0dc84ebf6b82b59b898a24e8067a37d6250c31ee2c4d4 + pullPolicy: IfNotPresent + persistence: + data: + enabled: true + size: 1Gi + # Optional: Set this to persistentVolumeClaim to keep job queues persistent + type: emptyDir + accessMode: ReadWriteOnce + # storageClass: your-class + +# Immich components + +server: + enabled: true + controllers: + main: + containers: + main: + image: + repository: ghcr.io/immich-app/immich-server + pullPolicy: IfNotPresent + ingress: + main: + enabled: true + className: traefik + annotations: + # proxy-body-size is set to 0 to remove the body limit on file uploads + nginx.ingress.kubernetes.io/proxy-body-size: "0" + cert-manager.io/cluster-issuer: letsencrypt + hosts: + - host: photos.dgse.cloud + paths: + - path: "/" + service: + identifier: main + tls: + - hosts: + - photos.dgse.cloud + secretName: immich-tls + +machine-learning: + enabled: true + controllers: + main: + containers: + main: + 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 persistentVolumeClaim to avoid downloading the ML models every start. + type: emptyDir + accessMode: ReadWriteMany + # storageClass: your-class +