duplicati.yaml 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. ---
  2. apiVersion: apps/v1
  3. kind: Deployment
  4. metadata:
  5. name: duplicati
  6. namespace: plex
  7. spec:
  8. strategy:
  9. type: Recreate
  10. selector:
  11. matchLabels:
  12. app: duplicati
  13. replicas: 1
  14. template:
  15. metadata:
  16. labels:
  17. app: duplicati
  18. annotations:
  19. backup.velero.io/backup-volumes-excludes: plex,media2,data
  20. spec:
  21. containers:
  22. - name: duplicati
  23. image: lscr.io/linuxserver/duplicati:2.2.0
  24. ports:
  25. - containerPort: 8200
  26. name: http-web-svc
  27. env:
  28. - name: TZ
  29. value: Etc/UTC
  30. - name: PUID
  31. value: "1000"
  32. - name: PGID
  33. value: "1000"
  34. - name: DUPLICATI__WEBSERVICE_PASSWORD
  35. valueFrom:
  36. secretKeyRef:
  37. name: duplicati
  38. key: DUPLICATI__WEBSERVICE_PASSWORD
  39. volumeMounts:
  40. - mountPath: "/plex"
  41. name: plex
  42. - mountPath: "/media2"
  43. name: media2
  44. - mountPath: "/data"
  45. name: data
  46. - mountPath: "/config"
  47. name: config
  48. volumes:
  49. - name: plex
  50. persistentVolumeClaim:
  51. claimName: plex-pvc
  52. - name: media2
  53. persistentVolumeClaim:
  54. claimName: media2-pvc
  55. - name: data
  56. persistentVolumeClaim:
  57. claimName: data-ec-pvc
  58. - name: config
  59. persistentVolumeClaim:
  60. claimName: duplicati-pvc
  61. ---
  62. apiVersion: v1
  63. kind: Service
  64. metadata:
  65. name: duplicati-service
  66. namespace: plex
  67. spec:
  68. selector:
  69. app: duplicati
  70. type: ClusterIP
  71. ports:
  72. - name: duplicati-web-port
  73. protocol: TCP
  74. port: 8200
  75. targetPort: http-web-svc
  76. ---
  77. apiVersion: batch/v1
  78. kind: CronJob
  79. metadata:
  80. name: duplicati-run-tree
  81. namespace: plex
  82. spec:
  83. schedule: "0 0 * * 0"
  84. jobTemplate:
  85. spec:
  86. template:
  87. spec:
  88. containers:
  89. - name: tree
  90. image: alpine:3.18.4
  91. imagePullPolicy: IfNotPresent
  92. env:
  93. - name: NTFY_AUTH
  94. valueFrom:
  95. secretKeyRef:
  96. name: duplicati
  97. key: NTFY_AUTH
  98. command:
  99. - /bin/sh
  100. - -c
  101. - (tree /plex > /plex/tree.txt && tree /media2 > /media2/tree.txt) || curl -u $NTFY_AUTH -d 'error generating media tree' https://ntfy.jibby.org/media-tree
  102. volumeMounts:
  103. - mountPath: "/plex"
  104. name: plex
  105. - mountPath: "/media2"
  106. name: media2
  107. volumes:
  108. - name: plex
  109. persistentVolumeClaim:
  110. claimName: plex-pvc
  111. - name: media2
  112. persistentVolumeClaim:
  113. claimName: media2-pvc
  114. restartPolicy: OnFailure
  115. ---
  116. apiVersion: networking.k8s.io/v1
  117. kind: Ingress
  118. metadata:
  119. name: duplicati
  120. namespace: plex
  121. annotations:
  122. traefik.ingress.kubernetes.io/router.entrypoints: websecure
  123. traefik.ingress.kubernetes.io/router.middlewares: kube-system-lanonly@kubernetescrd
  124. spec:
  125. rules:
  126. - host: duplicati.lan.jibby.org
  127. http:
  128. paths:
  129. - path: /
  130. pathType: Prefix
  131. backend:
  132. service:
  133. name: duplicati-service
  134. port:
  135. number: 8200
  136. ---
  137. apiVersion: external-secrets.io/v1
  138. kind: ExternalSecret
  139. metadata:
  140. name: duplicati
  141. namespace: plex
  142. spec:
  143. target:
  144. name: duplicati
  145. deletionPolicy: Delete
  146. template:
  147. type: Opaque
  148. data:
  149. DUPLICATI__WEBSERVICE_PASSWORD: |-
  150. {{ .password }}
  151. NTFY_AUTH: |-
  152. {{ .ntfyuser }}:{{ .ntfypass }}
  153. data:
  154. - secretKey: password
  155. sourceRef:
  156. storeRef:
  157. name: bitwarden-login
  158. kind: ClusterSecretStore
  159. remoteRef:
  160. key: 15ef8c69-b0ed-4ca0-8871-b33b003c29de
  161. property: password
  162. - secretKey: ntfyuser
  163. sourceRef:
  164. storeRef:
  165. name: bitwarden-login
  166. kind: ClusterSecretStore
  167. remoteRef:
  168. key: 674fbf3d-531a-4ca6-afec-b1d7012d1a8a
  169. property: username
  170. - secretKey: ntfypass
  171. sourceRef:
  172. storeRef:
  173. name: bitwarden-login
  174. kind: ClusterSecretStore
  175. remoteRef:
  176. key: 674fbf3d-531a-4ca6-afec-b1d7012d1a8a
  177. property: password