diff --git a/nextcloud/restore/app.yml b/nextcloud/restore/app.yml
new file mode 100644
index 0000000000000000000000000000000000000000..18d4540f54a12ec5ddc871e8260a2d96db6e95ec
--- /dev/null
+++ b/nextcloud/restore/app.yml
@@ -0,0 +1,290 @@
+---
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    app.kubernetes.io/component: app
+    app.kubernetes.io/instance: ${FQDN}
+    app.kubernetes.io/name: nextcloud
+    app.kubernetes.io/part-of: Nextcloud
+  name: ${FQDN}-app
+  namespace: ${NS}
+spec:
+  ports:
+  - name: api
+    port: 9000
+    protocol: TCP
+    targetPort: api
+  selector:
+    app.kubernetes.io/component: app
+    app.kubernetes.io/instance: ${FQDN}
+    app.kubernetes.io/name: nextcloud
+    app.kubernetes.io/part-of: Nextcloud
+  type: ClusterIP
+---
+apiVersion: v1
+kind: Service
+metadata:
+  labels:
+    app.kubernetes.io/component: web
+    app.kubernetes.io/instance: ${FQDN}
+    app.kubernetes.io/name: nextcloud
+    app.kubernetes.io/part-of: Nextcloud
+  name: ${FQDN}-web
+  namespace: ${NS}
+spec:
+  ports:
+  - name: http
+    port: 80
+    protocol: TCP
+    targetPort: http
+  selector:
+    app.kubernetes.io/component: web
+    app.kubernetes.io/instance: ${FQDN}
+    app.kubernetes.io/name: nextcloud
+    app.kubernetes.io/part-of: Nextcloud
+  sessionAffinity: None
+  type: ClusterIP
+---
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+  annotations:
+    kubernetes.io/tls-acme: "true"
+    nginx.ingress.kubernetes.io/proxy-body-size: 100g
+    nginx.ingress.kubernetes.io/proxy-request-buffering: "off"
+  labels:
+    app.kubernetes.io/component: web
+    app.kubernetes.io/instance: ${FQDN}
+    app.kubernetes.io/name: nextcloud
+    app.kubernetes.io/part-of: Nextcloud
+  name: ${FQDN}-web
+  namespace: ${NS}
+spec:
+  rules:
+  - host: ${FQDN_DOTS}
+    http:
+      paths:
+      - backend:
+          serviceName: ${FQDN}-web
+          servicePort: http
+        path: /
+  tls:
+  - hosts:
+    - ${FQDN_DOTS}
+    secretName: ${FQDN}-tls
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: app
+    app.kubernetes.io/instance: ${FQDN}
+    app.kubernetes.io/name: nextcloud
+    app.kubernetes.io/part-of: Nextcloud
+  name: ${FQDN}-app
+  namespace: ${NS}
+spec:
+  progressDeadlineSeconds: 600
+  replicas: 2
+  revisionHistoryLimit: 10
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: app
+      app.kubernetes.io/instance: ${FQDN}
+      app.kubernetes.io/name: nextcloud
+      app.kubernetes.io/part-of: Nextcloud
+  strategy:
+    rollingUpdate:
+      maxSurge: 1
+      maxUnavailable: 1
+    type: RollingUpdate
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: app
+        app.kubernetes.io/instance: ${FQDN}
+        app.kubernetes.io/name: nextcloud
+        app.kubernetes.io/part-of: Nextcloud
+    spec:
+      affinity:
+        nodeAffinity:
+          preferredDuringSchedulingIgnoredDuringExecution:
+          - weight: 20
+            preference:
+              matchExpressions:
+              - key: stateless
+                operator: In
+                values:
+                - "true"
+        podAntiAffinity:
+          requiredDuringSchedulingIgnoredDuringExecution:
+          - topologyKey: kubernetes.io/hostname
+            labelSelector:
+              matchExpressions:
+              - key: app.kubernetes.io/instance
+                operator: In
+                values:
+                - ${FQDN}
+              - key: app.kubernetes.io/component
+                operator: In
+                values:
+                - app
+      containers:
+      - command:
+        - php-fpm
+        env:
+#cat ./version.php | grep 'array(' | cut -d\( -f2 | cut -d\) -f1 | sed 's/,/\./g'
+        - name: VERSION
+          value: ${NC_VERSION}
+        - name: INSTALLED
+          value: "true"
+        - name: OBJECTSTORE_S3_KEY 
+          valueFrom:
+            secretKeyRef:
+              key: AWS_ACCESS_KEY_ID 
+              name: ${FQDN}-s3
+        - name: OBJECTSTORE_S3_SECRET 
+          valueFrom:
+            secretKeyRef:
+              key: AWS_SECRET_ACCESS_KEY
+              name: ${FQDN}-s3
+        - name: MAIL_FROM_ADDRESS 
+          valueFrom:
+            secretKeyRef:
+              key: mail_from_address
+              name: ${NS}-smtp
+        - name: SMTP_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              key: password 
+              name: ${NS}-smtp
+        - name: SMTP_NAME 
+          valueFrom:
+            secretKeyRef:
+              key: username
+              name: ${NS}-smtp
+        - name: DB_PASSWORD 
+          valueFrom:
+            secretKeyRef:
+              key: password 
+              name: nextcloud.pg-${PG_DOMAIN}.credentials
+        envFrom:
+        - secretRef:
+            name: ${FQDN}-app
+        image: libresh/nextcloud:${NC_IMAGE_TAG}
+        imagePullPolicy: Always
+        name: app
+        livenessProbe:
+          exec:
+            command:
+            - /php-fpm-healthcheck
+          initialDelaySeconds: 10
+          periodSeconds: 60
+        readinessProbe:
+          exec:
+            command:
+            - /php-fpm-healthcheck
+          initialDelaySeconds: 10
+          periodSeconds: 60
+        ports:
+        - containerPort: 9000
+          name: api
+          protocol: TCP
+        resources: 
+          requests:
+            memory: "80Mi"
+          limits:
+            memory: "400Mi"
+        terminationMessagePath: /dev/termination-log
+        terminationMessagePolicy: File
+      dnsPolicy: ClusterFirst
+      restartPolicy: Always
+      schedulerName: default-scheduler
+      securityContext:
+        fsGroup: 82
+        runAsGroup: 82
+        runAsUser: 82
+      terminationGracePeriodSeconds: 30
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  labels:
+    app.kubernetes.io/component: web
+    app.kubernetes.io/instance: ${FQDN}
+    app.kubernetes.io/name: nextcloud
+    app.kubernetes.io/part-of: Nextcloud
+  name: ${FQDN}-web
+  namespace: ${NS}
+spec:
+  progressDeadlineSeconds: 600
+  replicas: 2
+  revisionHistoryLimit: 10
+  selector:
+    matchLabels:
+      app.kubernetes.io/component: web
+      app.kubernetes.io/instance: ${FQDN}
+      app.kubernetes.io/name: nextcloud
+      app.kubernetes.io/part-of: Nextcloud
+  strategy:
+    rollingUpdate:
+      maxSurge: 1
+      maxUnavailable: 1
+    type: RollingUpdate
+  template:
+    metadata:
+      labels:
+        app.kubernetes.io/component: web
+        app.kubernetes.io/instance: ${FQDN}
+        app.kubernetes.io/name: nextcloud
+        app.kubernetes.io/part-of: Nextcloud
+    spec:
+      affinity:
+        podAffinity:
+          preferredDuringSchedulingIgnoredDuringExecution:
+            - weight: 10
+              podAffinityTerm:
+                topologyKey: kubernetes.io/hostname
+                labelSelector:
+                  matchExpressions:
+                  - key: app.kubernetes.io/instance
+                    operator: In
+                    values:
+                    - ${FQDN}
+                  - key: app.kubernetes.io/component
+                    operator: In
+                    values:
+                    - app
+        podAntiAffinity:
+          requiredDuringSchedulingIgnoredDuringExecution:
+          - topologyKey: kubernetes.io/hostname
+            labelSelector:
+              matchExpressions:
+              - key: app.kubernetes.io/instance
+                operator: In
+                values:
+                - ${FQDN} 
+              - key: app.kubernetes.io/component
+                operator: In
+                values:
+                - web
+      containers:
+      - image: libresh/nextcloud:${NC_WEB_IMAGE_TAG}
+        imagePullPolicy: Always
+        name: web
+        ports:
+        - containerPort: 80
+          name: http
+          protocol: TCP
+        env:
+        - name: BACKEND_HOST
+          value: ${FQDN}-app
+        resources: {}
+        terminationMessagePath: /dev/termination-log
+        terminationMessagePolicy: File
+      dnsPolicy: ClusterFirst
+      restartPolicy: Always
+      schedulerName: default-scheduler
+      securityContext: {}
+      terminationGracePeriodSeconds: 30
diff --git a/nextcloud/restore/pg.yml b/nextcloud/restore/pg.yml
new file mode 100644
index 0000000000000000000000000000000000000000..eef2a280a98d28e37c32dab207cf1b0c0b708b76
--- /dev/null
+++ b/nextcloud/restore/pg.yml
@@ -0,0 +1,69 @@
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: zalando-postgres
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+  name: zalando-postgres
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: zalando-postgres
+subjects:
+- kind: ServiceAccount
+  name: zalando-postgres
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: postgres-pod-config
+data:
+  AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
+  AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
+  AWS_S3_FORCE_PATH_STYLE: "true"
+  WAL_S3_BUCKET: ${NS}-dumps
+  AWS_ENDPOINT: ${S3_ENDPOINT_COLD}
+  WAL_S3_ENDPOINT: ${S3_ENDPOINT_COLD}
+  AWS_REGION: default
+  USE_WALE: "true"
+  USE_WALG_BACKUP: "true"
+  WALG_DISABLE_S3_SSE: "true"
+  BACKUP_SCHEDULE: "5 0 * * *"
+---
+apiVersion: "acid.zalan.do/v1"
+kind: postgresql
+metadata:
+  name: pg-${PG_DOMAIN}
+spec:
+  clone:
+#https://postgres-operator.readthedocs.io/en/latest/user/#how-to-clone-an-existing-postgresql-cluster
+    uid: ""
+    cluster: ""
+    timestamp: "2022-01-19T12:00:00+00:00"
+    s3_endpoint: https://cold.minio.liiib.re
+    s3_access_key_id: 
+    s3_secret_access_key: 
+    s3_force_path_style: true
+  resources:
+    limits:
+      cpu: "2"
+      memory: 1000Mi
+    requests:
+      cpu: 100m
+      memory: 500Mi
+  teamId: "pg"
+  volume:
+    size: 4975Mi
+    storageClass: small
+  numberOfInstances: 2
+  users:
+    nextcloud:  # database owner
+    - superuser
+    - createdb
+  databases:
+    nextcloud: nextcloud # dbname: owner
+  postgresql:
+    version: "12"