瀏覽代碼

Added photoprism

Breandan Dezendorf 2 年之前
父節點
當前提交
2d7ec9a58e

+ 34 - 0
dezendorf/homelab/k3s/photoprisim/ingress.yaml

@@ -0,0 +1,34 @@
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: IngressRoute
+metadata:
+  name: photos-ingress-route
+  namespace: photoprism
+spec:
+  entryPoints:
+    - web
+  routes:
+  - match: Host(`photos.dezendorf.net`)
+    kind: Rule
+    middlewares:
+    - name: redirecthttps
+    services:
+    - name: photoprism-service
+      port: 2342
+---
+apiVersion: traefik.containo.us/v1alpha1
+kind: IngressRoute
+metadata:
+  name: photos-websecure-route
+  namespace: photoprism
+spec:
+  entryPoints:
+    - websecure
+  routes:
+  - match: Host(`photos.dezendorf.net`)
+    kind: Rule
+    services:
+    - name: photoprism-service
+      port: 2342
+  tls:
+    certResolver: myresolver

+ 76 - 0
dezendorf/homelab/k3s/photoprisim/photoprism-database.yaml

@@ -0,0 +1,76 @@
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: photoprism-db-pvc
+  namespace: photoprism
+spec:
+  accessModes:
+    - ReadWriteOnce
+  storageClassName: local-path
+  resources:
+    requests:
+      storage: 10Gi
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: photoprism-db-service
+  namespace: photoprism
+spec:
+  selector:
+    app: photoprism-db
+  ports:
+    - port: 3306
+      targetPort: 3306
+  type: ClusterIP
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: photoprism-db-deployment
+  namespace: photoprism
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: photoprism-db
+  strategy:
+    type: Recreate
+  template:
+    metadata:
+      labels:
+        app: photoprism-db
+    spec:
+      containers:
+        - name: photoprism-db
+          image: mariadb:10.6
+          env:
+            - name: MYSQL_DATABASE
+              value: photoprism
+            - name: MYSQL_PASSWORD
+              value: I2tb1mdf
+            - name: MYSQL_ROOT_PASSWORD
+              value: I2tb1mdf
+            - name: MYSQL_USER
+              value: photoprism
+          args:
+            - mysqld
+            - --innodb-buffer-pool-size=128M
+            - --transaction-isolation=READ-COMMITTED
+            - --character-set-server=utf8mb4
+            - --collation-server=utf8mb4_unicode_ci
+            - --max-connections=512
+            - --innodb-rollback-on-timeout=OFF
+            - --innodb-lock-wait-timeout=120
+          ports:
+            - containerPort: 3306
+          volumeMounts:
+            - mountPath: /var/lib/mysql
+              name: photoprism-db-pvc
+      restartPolicy: Always
+      volumes:
+        - name: photoprism-db-pvc
+          persistentVolumeClaim:
+            claimName: photoprism-db-pvc

+ 156 - 0
dezendorf/homelab/k3s/photoprisim/photoprism.yaml

@@ -0,0 +1,156 @@
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+  name: photoprism-originals-pv
+  namespace: photoprism
+spec:
+  storageClassName: manual
+  capacity:
+    storage: 10Gi
+  accessModes:
+    - ReadOnlyMany
+  hostPath:
+    path: "/mnt"
+
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: photoprism-originals-pvc
+  namespace: photoprism
+spec:
+  accessModes:
+    - ReadOnlyMany
+  storageClassName: manual
+  resources:
+    requests:
+      storage: 10Gi
+
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: photoprism-pvc
+  namespace: photoprism
+spec:
+  accessModes:
+    - ReadWriteOnce
+  storageClassName: local-path
+  resources:
+    requests:
+      storage: 100Gi
+
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: photoprism-service
+  namespace: photoprism
+  annotations:
+    metallb.universe.tf/allow-shared-ip: photoprism-share
+spec:
+  selector:
+    app: photoprism
+  ports:
+    - name: http
+      port: 80
+      targetPort: 2342
+    - name: "2342"
+      port: 2342
+      targetPort: 2342
+  type: LoadBalancer
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: photoprism-deployment
+  namespace: photoprism
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: photoprism
+  strategy:
+    type: Recreate
+  template:
+    metadata:
+      labels:
+        app: photoprism
+    spec:
+      containers:
+        - name: photoprism
+          image: photoprism/photoprism:latest
+          env:
+            - name: HOME
+              value: /photoprism
+            - name: PHOTOPRISM_ADMIN_PASSWORD
+              value: I2tb1mdf
+            - name: PHOTOPRISM_DARKTABLE_PRESETS
+              value: "false"
+            - name: PHOTOPRISM_DATABASE_DRIVER
+              value: mysql
+            - name: PHOTOPRISM_DATABASE_NAME
+              value: photoprism
+            - name: PHOTOPRISM_DATABASE_PASSWORD
+              value: I2tb1mdf
+            - name: PHOTOPRISM_DATABASE_SERVER
+              value: photoprism-db-service.photoprism.svc.cluster.local:3306
+            - name: PHOTOPRISM_DATABASE_USER
+              value: photoprism
+            - name: PHOTOPRISM_DEBUG
+              value: "false"
+            - name: PHOTOPRISM_DETECT_NSFW
+              value: "false"
+            - name: PHOTOPRISM_DISABLE_CHOWN
+              value: "false"
+            - name: PHOTOPRISM_DISABLE_CLASSIFICATION
+              value: "false"
+            - name: PHOTOPRISM_DISABLE_FACES
+              value: "false"
+            - name: PHOTOPRISM_DISABLE_SETTINGS
+              value: "false"
+            - name: PHOTOPRISM_DISABLE_TENSORFLOW
+              value: "false"
+            - name: PHOTOPRISM_DISABLE_WEBDAV
+              value: "false"
+            - name: PHOTOPRISM_EXPERIMENTAL
+              value: "false"
+            - name: PHOTOPRISM_HTTP_COMPRESSION
+              value: gzip
+            - name: PHOTOPRISM_ORIGINALS_LIMIT
+              value: "5000"
+            - name: PHOTOPRISM_PUBLIC
+              value: "false"
+            - name: PHOTOPRISM_READONLY
+              value: "false"
+            - name: PHOTOPRISM_SITE_AUTHOR
+              value: ""
+            - name: PHOTOPRISM_SITE_CAPTION
+              value: Browse Your Life
+            - name: PHOTOPRISM_SITE_DESCRIPTION
+              value: ""
+            - name: PHOTOPRISM_SITE_TITLE
+              value: PhotoPrism
+            - name: PHOTOPRISM_SITE_URL
+              value: https://photos.dezendorf.net/
+            - name: PHOTOPRISM_UPLOAD_NSFW
+              value: "true"
+            - name: PHOTOPRISM_WORKERS
+              value: "7"
+          ports:
+            - containerPort: 2342
+          volumeMounts:
+            - mountPath: /photoprism/originals
+              name: photoprism-originals-pvc
+            - mountPath: /photoprism/storage
+              name: photoprism-pvc
+      restartPolicy: Always
+      volumes:
+        - name: photoprism-originals-pvc
+          persistentVolumeClaim:
+            claimName: photoprism-originals-pvc
+        - name: photoprism-pvc
+          persistentVolumeClaim:
+            claimName: photoprism-pvc

+ 4 - 0
dezendorf/homelab/k3s/photoprisim/setup.sh

@@ -0,0 +1,4 @@
+kubectl create namespace photoprism
+kubectl apply --namespace photoprism -f photoprism-database.yaml
+kubectl apply --namespace photoprism -f photoprism.yaml
+kubectl apply --namespace photoprism -f ingress.yaml

+ 1 - 0
dezendorf/homelab/k3s/pihole/pihole.yaml

@@ -191,6 +191,7 @@ data:
     192.168.1.9 gondor.dezendorf.net
     192.168.1.50 astoria.dezendorf.net
     192.168.1.87 go.dezendorf.net
+    192.168.1.87 photos.dezendorf.net
     192.168.1.87 pihole.dezendorf.net
     192.168.1.87 tesseract.dezendorf.net
     192.168.1.87 sso.dezendorf.net