ADD: added photoprism and immich manifest

This commit is contained in:
henry
2025-05-02 19:07:42 +02:00
parent 291c2a0113
commit 35b7b7b4da
23 changed files with 571 additions and 1 deletions

View File

@@ -0,0 +1 @@
echo -n 'Z6x3h5xy569' | base64

View File

@@ -0,0 +1,8 @@
apiVersion: v1
kind: Secret
metadata:
name: icloudpd-secret
namespace: photoprism
type: Opaque
data:
apple_password: WjZ4M2g1eHk1Njk=

View File

@@ -0,0 +1,60 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: icloudpd
namespace: photoprism
spec:
replicas: 1
selector:
matchLabels:
app: icloudpd
template:
metadata:
labels:
app: icloudpd
spec:
containers:
- name: icloudpd
image: r3d454/iclouddownloader:latest
# image: r3d454/dockericloudpd:latest
env:
- name: apple_id
value: "Henry-Winkel@web.de"
- name: apple_password
valueFrom:
secretKeyRef:
name: icloudpd-secret
key: apple_password
- name: download_path
value: "/data/originals"
- name: authentication_type
value: "Web"
- name: directory_permissions
value: "777"
- name: file_permissions
value: "777"
- name: set_exif_datetime
value: "false"
- name: auto_delete
value: "False"
volumeMounts:
- name: icloudpd-storage
mountPath: /data/
volumes:
- name: icloudpd-storage
persistentVolumeClaim:
claimName: photoprism-storage
---
apiVersion: v1
kind: Service
metadata:
name: icloudpd-service
namespace: photoprism
spec:
selector:
app: icloudpd
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: NodePort

View File

@@ -0,0 +1,23 @@
kind: ConfigMap
apiVersion: v1
metadata:
name: immich-env
namespace: photoprism
labels:
app: immich
data:
DB_DATABASE_NAME: "immich"
DB_HOSTNAME: "immich-database"
DB_USERNAME: "immich"
IMMICH_MACHINE_LEARNING_URL: "http://immich-machine-learning:3003"
# REDIS_HOSTNAME: "redis-server.redis-server.svc.cluster.local"
REDIS_HOSTNAME: "redis-server"
REDIS_PORT: "6379"
REDIS_DBINDEX: "0"
REDIS_PASSWORD: ""
DISABLE_REVERSE_GEOCODING: "false"
REVERSE_GEOCODING_PRECISION: "2"
PUBLIC_LOGIN_PAGE_MESSAGE: ""
PUID: "0"
PGID: "0"
DB_PASSWORD: "password"

View File

@@ -0,0 +1,46 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: immich-database
namespace: photoprism
spec:
replicas: 1
selector:
matchLabels:
app: immich-database
template:
metadata:
labels:
app: immich-database
spec:
containers:
- name: immich-postgres
image: "docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0"
imagePullPolicy: Always
ports:
- containerPort: 5432
env:
- name: POSTGRES_USER
valueFrom:
configMapKeyRef:
name: immich-env
key: DB_USERNAME
- name: POSTGRES_PASSWORD
valueFrom:
configMapKeyRef:
name: immich-env
key: DB_PASSWORD
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: immich-env
key: DB_DATABASE_NAME
volumeMounts:
- name: pgdata
mountPath: /var/lib/postgresql/data
subPath: postgres
resources: {}
volumes:
- name: pgdata
persistentVolumeClaim:
claimName: immich-db-pvc

View File

@@ -0,0 +1,17 @@
kind: PersistentVolume
apiVersion: v1
metadata:
name: immich-db-pv
namespace: photoprism
labels:
app: immich-postgresql
spec:
capacity:
storage: 20Gi # Adjust the storage size as needed
storageClassName: nfs
accessModes:
- ReadWriteMany
nfs:
path: /slowData/immichDB # Static path on the NFS server
server: 192.168.178.132 # Your NFS server's IP
persistentVolumeReclaimPolicy: Retain

View File

@@ -0,0 +1,15 @@
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: immich-db-pvc
namespace: photoprism
labels:
app: immich
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi # Match or be less than the PV's capacity
volumeName: immich-db-pv # Bind explicitly to the PV created above
storageClassName: nfs

View File

@@ -0,0 +1,15 @@
kind: Service
apiVersion: v1
metadata:
name: immich-database
namespace: photoprism
labels:
app: immich-database
spec:
type: ClusterIP
selector:
app: immich-database
ports:
- name: tcp-postgresql
port: 5432
targetPort: 5432

View File

@@ -0,0 +1,16 @@
kind: PersistentVolume
apiVersion: v1
metadata:
name: immich-library-pv
namespace: immich
labels:
app: immich
spec:
capacity:
storage: 50Gi # Adjust the storage size as needed
storageClassName: nfs
accessModes:
- ReadWriteMany
nfs:
path: /fastData/immichLibrary # Static path on the NFS server
server: 192.168.178.132

View File

@@ -0,0 +1,15 @@
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: immich-library-pvc
namespace: photoprism
labels:
app: immich
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi # Match or be less than the PV's capacity
volumeName: immich-library-pv # Bind explicitly to the PV created above
storageClassName: nfs

View File

@@ -0,0 +1,65 @@
kind: Deployment
apiVersion: apps/v1
metadata:
name: immich-machine-learning
namespace: photoprism
labels:
app: immich-machine-learning
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: immich-machine-learning
template:
metadata:
labels:
app: immich-machine-learning
spec:
securityContext:
fsGroup: 0
serviceAccountName: default
automountServiceAccountToken: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
containers:
- name: immich-machine-learning
image: "ghcr.io/immich-app/immich-machine-learning:release"
imagePullPolicy: Always
ports:
- containerPort: 3003
env:
- name: DB_PASSWORD
valueFrom:
configMapKeyRef:
name: immich-env
key: DB_PASSWORD
- name: TRANSFORMERS_CACHE
value: /cache
envFrom:
- configMapRef:
name: immich-env
optional: false
livenessProbe:
failureThreshold: 3
httpGet:
path: /ping
port: 3003
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
readinessProbe:
failureThreshold: 3
httpGet:
path: /ping
port: 3003
initialDelaySeconds: 0
periodSeconds: 10
timeoutSeconds: 1
volumeMounts:
- name: cache
mountPath: /cache
resources: {}
volumes:
- name: cache
emptyDir: {}

View File

@@ -0,0 +1,15 @@
kind: Service
apiVersion: v1
metadata:
name: immich-machine-learning
namespace: photoprism
labels:
app: immich-machine-learning
spec:
type: ClusterIP
selector:
app: immich-machine-learning
ports:
- port: 3003
targetPort: 3003
protocol: TCP

View File

@@ -0,0 +1,97 @@
kind: Deployment
apiVersion: apps/v1
metadata:
name: immich-server
namespace: photoprism
labels:
app: immich-server
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: immich-server
template:
metadata:
labels:
app: immich-server
annotations:
k8s.v1.cni.cncf.io/networks: |
[{
"name": "multus-iot",
"namespace": "default",
"mac": "2e:f8:57:99:6e:31",
"ips": ["192.168.1.192/24"]
}]
spec:
securityContext:
fsGroup: 0
serviceAccountName: default
dnsPolicy: ClusterFirst
initContainers:
- name: postgresql-isready
image: "docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0"
imagePullPolicy: Always
env:
- name: POSTGRES_USER
valueFrom:
configMapKeyRef:
name: immich-env
key: DB_USERNAME
- name: POSTGRES_DB
valueFrom:
configMapKeyRef:
name: immich-env
key: DB_DATABASE_NAME
command:
- /bin/sh
- -c
- until pg_isready -U "${POSTGRES_USER}" -d "dbname=${POSTGRES_DB}"
-h immich-database -p 5432 ; do sleep 2 ; done
containers:
- name: immich-server
image: "ghcr.io/immich-app/immich-server:release"
imagePullPolicy: Always
securityContext:
runAsUser: 0
ports:
- containerPort: 3001
env:
- name: DB_PASSWORD
valueFrom:
configMapKeyRef:
name: immich-env
key: DB_PASSWORD
envFrom:
- configMapRef:
name: immich-env
optional: false
livenessProbe:
failureThreshold: 120
httpGet:
path: /server/ping
port: 2283
initialDelaySeconds: 10
periodSeconds: 120
timeoutSeconds: 1
readinessProbe:
failureThreshold: 120
httpGet:
path: /server/ping
port: 2283
initialDelaySeconds: 10
periodSeconds: 120
timeoutSeconds: 1
volumeMounts:
- name: library
mountPath: /usr/src/app/upload
subPath: library
- name: ext-library
mountPath: /photos
volumes:
- name: library
persistentVolumeClaim:
claimName: immich-library-pvc
- name: ext-library
persistentVolumeClaim:
claimName: photoprism-storage

View File

@@ -0,0 +1,15 @@
kind: Service
apiVersion: v1
metadata:
name: immich-server
namespace: photoprism
labels:
app: immich-server
spec:
type: NodePort
selector:
app: immich-server
ports:
- port: 2283
targetPort: 2283
protocol: TCP

View File

@@ -0,0 +1,45 @@
#apiVersion: v1
#kind: Namespace
#metadata:
# name: redis-server
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-server
namespace: photoprism
labels:
app: redis-server
spec:
selector:
matchLabels:
app: redis-server
replicas: 1
template:
metadata:
labels:
app: redis-server
spec:
containers:
- image: redis:alpine
name: redis-server
ports:
- containerPort: 6379
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: redis-server
namespace: photoprism
labels:
app: redis-server
spec:
ports:
- port: 6379
selector:
app: redis-server

View File

@@ -0,0 +1,13 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: mariadb-pv
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain # Optional: verhindert, dass K8s dein Share löscht
storageClassName: local-path
hostPath:
path: /slowData/photoprismDB

View File

@@ -0,0 +1,60 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb
namespace: photoprism
spec:
storageClassName: local-path
volumeName: mariadb-pv
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb
namespace: photoprism
spec:
replicas: 1
selector:
matchLabels:
app: mariadb
template:
metadata:
labels:
app: mariadb
spec:
containers:
- name: mariadb
image: mariadb:10.11
env:
- name: MYSQL_ROOT_PASSWORD
value: photoprism
- name: MYSQL_DATABASE
value: photoprism
- name: MYSQL_USER
value: photoprism
- name: MYSQL_PASSWORD
value: photoprism
volumeMounts:
- mountPath: /var/lib/mysql
name: mariadb
volumes:
- name: mariadb
persistentVolumeClaim:
claimName: mariadb
---
apiVersion: v1
kind: Service
metadata:
name: mariadb
namespace: photoprism
spec:
type: ClusterIP
selector:
app: mariadb
ports:
- port: 3306

View File

@@ -0,0 +1,98 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: photoprism-storage
namespace: photoprism
spec:
storageClassName: nfs
volumeName: nfs-pv
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Gi
---
#apiVersion: v1
#kind: PersistentVolumeClaim
#metadata:
# name: photoprism-originals
# namespace: photoprism
#spec:
# storageClassName: nfs
# volumeName: nfs-pv
# accessModes:
# - ReadWriteMany
# resources:
# requests:
# storage: 100Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: photoprism
namespace: photoprism
spec:
replicas: 1
selector:
matchLabels:
app: photoprism
template:
metadata:
labels:
app: photoprism
spec:
containers:
- name: photoprism
image: photoprism/photoprism
env:
- name: PHOTOPRISM_ADMIN_USER
value: admin
- name: PHOTOPRISM_ADMIN_PASSWORD
value: photoprism
- name: PHOTOPRISM_AUTH_MODE
value: password
- name: PHOTOPRISM_SITE_URL
value: https://photoprism.henryathome.home64.de
- name: PHOTOPRISM_INDEX_WORKERS
value: "3"
- name: PHOTOPRISM_INDEX_SCHEDULE
value: "@every 3h"
# DB
- name: PHOTOPRISM_DATABASE_DRIVER
value: mysql
- name: PHOTOPRISM_DATABASE_SERVER
value: mariadb:3306
- name: PHOTOPRISM_DATABASE_NAME
value: photoprism
- name: PHOTOPRISM_DATABASE_USER
value: photoprism
- name: PHOTOPRISM_DATABASE_PASSWORD
value: photoprism
volumeMounts:
- mountPath: /photoprism/
name: photoprism-storage
# - mountPath: /photoprism/storage
# name: photoprism-storage
# - mountPath: /photoprism/originals
# name: photoprism-storage
# name: photoprism-originals
volumes:
- name: photoprism-storage
persistentVolumeClaim:
claimName: photoprism-storage
# - name: photoprism-originals
# persistentVolumeClaim:
# claimName: photoprism-originals
---
apiVersion: v1
kind: Service
metadata:
name: photoprism
namespace: photoprism
spec:
type: NodePort
selector:
app: photoprism
ports:
- port: 2342