diff --git a/.gitlab/agents/dev/values.yaml b/.gitlab/agents/dev/values.yaml
index e1641b507792aa9b342d543ad859a2dac278a959..7b17e8222b345bdb04bfcf8713ad5fc26dd44beb 100644
--- a/.gitlab/agents/dev/values.yaml
+++ b/.gitlab/agents/dev/values.yaml
@@ -142,13 +142,7 @@ ui:
   #    subPath: logo.svg
 
 gatewayservice:
-  extraVolumes:
-    - name: config-map
-      configMap:
-        name: gateway-service-config
-  extraVolumeMounts:
-    - name: config-map
-      mountPath: /etc/nginx/assets/assets
+  enabled: true
 
 ingress:
   enabled: true
diff --git a/dbrepo-storage-service/init/Dockerfile b/dbrepo-storage-service/init/Dockerfile
index cf1f23ead3a7dcd69166c54f8ddea5528ff49167..4f4f0c797434901d27311cadbbe250bb0e96c480 100644
--- a/dbrepo-storage-service/init/Dockerfile
+++ b/dbrepo-storage-service/init/Dockerfile
@@ -1,7 +1,13 @@
-FROM docker.io/bitnami/seaweedfs:3.80.0-debian-12-r1 AS runtime
+FROM docker.io/python:3.11-alpine3.21 AS runtime
+LABEL org.opencontainers.image.authors="martin.weise@tuwien.ac.at"
+
+RUN apk add --no-cache bash \
+    && pip install s3cmd
+
+USER 1001
 
 WORKDIR /app
 
-COPY ./create-buckets.sh ./create-buckets.sh
+COPY --chown=1001 --chmod=0744 ./init.sh /app/init.sh
 
-ENTRYPOINT [ "/bin/sh", "/app/create-buckets.sh" ]
\ No newline at end of file
+ENTRYPOINT [ "bash", "-c", "/app/init.sh" ]
diff --git a/dbrepo-storage-service/init/create-buckets.sh b/dbrepo-storage-service/init/create-buckets.sh
deleted file mode 100644
index 316a4cf11ee824101e7c23d688387dabf143bff7..0000000000000000000000000000000000000000
--- a/dbrepo-storage-service/init/create-buckets.sh
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/bash
-S3_BUCKET=${S3_BUCKET:-dbrepo}
-
-function log {
-  echo "$(date '+%Y-%m-%d %H:%M:%S') $1"
-}
-
-log "SeaweedFS master is set to ${WEED_CLUSTER_SW_MASTER}"
-log "Starting to create bucket ${S3_BUCKET}"
-echo "s3.bucket.create -name ${S3_BUCKET}" | weed shell -master="${WEED_CLUSTER_SW_MASTER}"
-log "Created bucket ${S3_BUCKET}"
diff --git a/dbrepo-storage-service/init/init.sh b/dbrepo-storage-service/init/init.sh
new file mode 100644
index 0000000000000000000000000000000000000000..4cadc056774594d9e823d27095f982b77b855b2c
--- /dev/null
+++ b/dbrepo-storage-service/init/init.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+cat << EOF > /app/.s3cfg
+access_key = ${S3_ACCESS_KEY_ID}
+secret_key = ${S3_SECRET_ACCESS_KEY}
+# Setup endpoint
+host_base = ${STORAGE_ENDPOINT}
+host_bucket = ${STORAGE_ENDPOINT}
+use_https = False
+# Enable S3 v4 signature APIs
+signature_v2 = False
+EOF
+s3cmd --config=/app/.s3cfg mb s3://${S3_BUCKET}
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index d8f1ff945d284910a22b08e40458403d2b0f45bd..abf0e0ec18925630f88fd77b913bc064b5abff4e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -487,8 +487,10 @@ services:
       context: ./dbrepo-storage-service/init
       network: host
     environment:
-      WEED_CLUSTER_SW_MASTER: "${STORAGE_SERVICE_MASTER_ENDPOINT:-storage-service:9333}"
+      S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-seaweedfsadmin}
       S3_BUCKET: "${S3_BUCKET:-dbrepo}"
+      S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-seaweedfsadmin}
+      STORAGE_ENDPOINT: ${STORAGE_ENDPOINT:-http://storage-service:9000}
     depends_on:
       dbrepo-storage-service:
         condition: service_healthy
diff --git a/helm/dbrepo/Chart.lock b/helm/dbrepo/Chart.lock
index d1e25fa02c698de5b98aca7356ef985a0a13829b..f452f870386be707d92e9f19498b4c24f004e6c1 100644
--- a/helm/dbrepo/Chart.lock
+++ b/helm/dbrepo/Chart.lock
@@ -16,15 +16,15 @@ dependencies:
   version: 14.0.0
 - name: seaweedfs
   repository: file://../seaweedfs
-  version: 1.0.2
+  version: 4.2.1
 - name: grafana
   repository: https://charts.bitnami.com/bitnami
-  version: 10.1.1
+  version: 11.4.2
 - name: prometheus
   repository: https://charts.bitnami.com/bitnami
   version: 1.3.22
 - name: nginx
   repository: https://charts.bitnami.com/bitnami
-  version: 18.2.6
-digest: sha256:1b33454076a84ee922115724fe72d18c6ee2db1d45b022300e00e036fb9e0f13
-generated: "2024-12-29T10:04:46.520502177+01:00"
+  version: 18.3.1
+digest: sha256:414c043a3751945d7bd5b02fa00ee0464bee7f08efb469e00a5f059cdbff03b5
+generated: "2025-01-01T15:06:18.720941571+01:00"
diff --git a/helm/dbrepo/Chart.yaml b/helm/dbrepo/Chart.yaml
index c1d361ba4e10a2f987b60fccd80ea6bcfb2cfbaa..2145c0461e025784e1664f6b537a15456a37f86d 100644
--- a/helm/dbrepo/Chart.yaml
+++ b/helm/dbrepo/Chart.yaml
@@ -14,7 +14,7 @@ keywords:
 maintainers:
   - name: Martin Weise
     email: martin.weise@tuwien.ac.at
-home: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/
+home: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.6/
 icon: https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/master/dbrepo-ui/public/favicon.png
 dependencies:
   - name: opensearch
@@ -44,12 +44,12 @@ dependencies:
     condition: brokerservice.enabled
   - name: seaweedfs
     alias: storageservice
-    version: 1.0.2
+    version: 4.2.1
     repository: file://../seaweedfs
     condition: storageservice.enabled
   - name: grafana
     alias: dashboardservice
-    version: 10.1.1
+    version: 11.4.2
     repository: https://charts.bitnami.com/bitnami
     condition: dashboardservice.enabled
   - name: prometheus
@@ -59,6 +59,6 @@ dependencies:
     condition: metricdb.enabled
   - name: nginx
     alias: gatewayservice
-    version: 18.2.6
+    version: 18.3.1
     repository: https://charts.bitnami.com/bitnami
     condition: gatewayservice.enabled
\ No newline at end of file
diff --git a/helm/dbrepo/charts/grafana-10.1.1.tgz b/helm/dbrepo/charts/grafana-10.1.1.tgz
deleted file mode 100644
index 332c7758f160e873e5e5bebe46e5c0353aa03d88..0000000000000000000000000000000000000000
Binary files a/helm/dbrepo/charts/grafana-10.1.1.tgz and /dev/null differ
diff --git a/helm/dbrepo/charts/grafana-11.4.2.tgz b/helm/dbrepo/charts/grafana-11.4.2.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..efc2fb1e6b01aa2fc4f73e268fa33ac4ee0b65d8
Binary files /dev/null and b/helm/dbrepo/charts/grafana-11.4.2.tgz differ
diff --git a/helm/dbrepo/charts/nginx-18.2.6.tgz b/helm/dbrepo/charts/nginx-18.2.6.tgz
deleted file mode 100644
index 865261caf41c33b3266e4a97fab231e177fdbf83..0000000000000000000000000000000000000000
Binary files a/helm/dbrepo/charts/nginx-18.2.6.tgz and /dev/null differ
diff --git a/helm/dbrepo/charts/nginx-18.3.1.tgz b/helm/dbrepo/charts/nginx-18.3.1.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..66ed8e26a1578edede247ba67dc160133d3bc93f
Binary files /dev/null and b/helm/dbrepo/charts/nginx-18.3.1.tgz differ
diff --git a/helm/dbrepo/charts/seaweedfs-1.0.2.tgz b/helm/dbrepo/charts/seaweedfs-1.0.2.tgz
deleted file mode 100644
index 52da45b0e88accafd5e275c77ae10c37746b1cf0..0000000000000000000000000000000000000000
Binary files a/helm/dbrepo/charts/seaweedfs-1.0.2.tgz and /dev/null differ
diff --git a/helm/dbrepo/charts/seaweedfs-4.2.1.tgz b/helm/dbrepo/charts/seaweedfs-4.2.1.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..63b26f02bd9136b3e2eaae92b06486dbac5cb1ad
Binary files /dev/null and b/helm/dbrepo/charts/seaweedfs-4.2.1.tgz differ
diff --git a/helm/dbrepo/templates/gateway-configmap.yaml b/helm/dbrepo/templates/gateway-configmap.yaml
index 5ee59adf0e4c8a6d23a9d035444427a925b0aa14..aa314d3c65948076a4e7eaf977bf47b8735b153d 100644
--- a/helm/dbrepo/templates/gateway-configmap.yaml
+++ b/helm/dbrepo/templates/gateway-configmap.yaml
@@ -1,9 +1,144 @@
 {{- if .Values.gatewayservice.enabled }}
----
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: gateway-service-config
+  name: gateway-service-setup
   namespace: {{ include "common.names.namespace" . | quote }}
 data:
-{{- end }}
+  dbrepo.conf: |
+    # This is required to proxy Grafana Live WebSocket connections.
+    map $http_upgrade $connection_upgrade {
+      default upgrade;
+      '' close;
+    }
+
+    server {
+        listen 8080 default_server;
+        server_name _;
+
+        location /dashboard/ {
+            rewrite  ^/dashboard/(.*)  /$1 break;
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://dashboard-service:3000;
+            proxy_read_timeout      90;
+        }
+
+        # Proxy Grafana Live WebSocket connections.
+        location /dashboard/api/live/ {
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_set_header        Upgrade $http_upgrade;
+            proxy_set_header        Connection $connection_upgrade;
+            proxy_http_version      1.1;
+            proxy_pass              http://dashboard-service:3000;
+            proxy_read_timeout      90;
+        }
+
+        location /api/search {
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://search-service;
+            proxy_read_timeout      90;
+        }
+
+        location /api/upload {
+    #         allow 128.130.0.0/16;
+    #         deny all;
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_set_header        X-Forwarded-Host $host;
+            proxy_pass              http://upload-service;
+            proxy_read_timeout      90;
+            # Disable request and response buffering
+            proxy_request_buffering off;
+            proxy_buffering         off;
+            proxy_http_version      1.1;
+        }
+
+        location /api/analyse {
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://analyse-service;
+            proxy_read_timeout      90;
+        }
+
+        location ~ /api/database/([0-9]+)/table/([0-9]+)/(data|history|export) {
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://data-service;
+            proxy_read_timeout      90;
+        }
+
+        location ~ /api/database/([0-9]+)/view/([0-9]+)/(data|export) {
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://data-service;
+            proxy_read_timeout      90;
+        }
+
+        location ~ /api/database/([0-9]+)/view {
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://metadata-service;
+            proxy_read_timeout      90;
+        }
+
+        location ~ /api/database/([0-9]+)/subset {
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://data-service;
+            proxy_read_timeout      600;
+        }
+
+        location ~ /api/(database|concept|container|identifier|image|message|license|oai|ontology|unit|user) {
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://metadata-service;
+            proxy_read_timeout      90;
+        }
+
+        location ~ /pid/([0-9]+) {
+            rewrite /pid/(.*) /api/identifier/$1 break;
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://metadata-service;
+            proxy_read_timeout      90;
+        }
+
+        location /assets {
+            root /etc/nginx/assets;
+        }
+
+        location / {
+            proxy_set_header        Host $host;
+            proxy_set_header        X-Real-IP $remote_addr;
+            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_set_header        X-Forwarded-Proto $scheme;
+            proxy_pass              http://ui;
+            proxy_read_timeout      90;
+        }
+    }
+{{- end }}
\ No newline at end of file
diff --git a/helm/dbrepo/templates/storage-job.yaml b/helm/dbrepo/templates/storage-job.yaml
index c48255493e029dcdca594999145e17f68ab5cc9a..f24e9afa333b995bbfea4effc5def050c752831a 100644
--- a/helm/dbrepo/templates/storage-job.yaml
+++ b/helm/dbrepo/templates/storage-job.yaml
@@ -3,12 +3,12 @@
 apiVersion: batch/v1
 kind: Job
 metadata:
-  name: storage-service-create-buckets-job
+  name: storage-service-setup-job
   namespace: {{ include "common.names.namespace" . | quote }}
 spec:
   template:
     metadata:
-      name: storage-service-create-buckets-job
+      name: storage-service-setup-job
     spec:
       restartPolicy: OnFailure
       containers:
@@ -16,12 +16,6 @@ spec:
           image: {{ .Values.storageservice.init.image.name }}
           imagePullPolicy: {{ .Values.storageservice.init.image.pullPolicy | default "IfNotPresent" }}
           env:
-            - name: WEED_CLUSTER_DEFAULT
-              value: "sw"
-            - name: WEED_CLUSTER_SW_MASTER
-              value: "storage-service-master:9333"
-            - name: WEED_CLUSTER_SW_FILER
-              value: "storage-service-filer:8888"
             - name: POD_IP
               valueFrom:
                 fieldRef:
@@ -34,30 +28,35 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
+            - name: S3_ACCESS_KEY_ID
+              valueFrom:
+                secretKeyRef:
+                  name: storage-service-secret
+                  key: admin_access_key_id
             - name: S3_BUCKET
               valueFrom:
                 secretKeyRef:
                   name: storage-service-secret
                   key: S3_BUCKET
-            - name: SEAWEEDFS_FULLNAME
-              value: "storage-service"
+            - name: S3_SECRET_ACCESS_KEY
+              valueFrom:
+                secretKeyRef:
+                  name: storage-service-secret
+                  key: admin_secret_access_key
+            - name: STORAGE_ENDPOINT
+              valueFrom:
+                secretKeyRef:
+                  name: storage-service-secret
+                  key: STORAGE_ENDPOINT
           volumeMounts:
-            - name: config-users
-              mountPath: /etc/sw
-              readOnly: true
-          ports:
-            - containerPort: 9333
-              name: swfs-master
-            - containerPort: 19333
-              #name: swfs-master-grpc
+            - name: app-cache
+              mountPath: /app
           {{- if .Values.storageservice.init.resources }}
           resources: {{- toYaml .Values.storageservice.init.resources | nindent 12 }}
           {{- else if ne .Values.storageservice.init.resourcesPreset "none" }}
           resources: {{- include "common.resources.preset" (dict "type" .Values.storageservice.init.resourcesPreset) | nindent 12 }}
           {{- end }}
       volumes:
-        - name: config-users
-          secret:
-            defaultMode: 420
-            secretName: storage-service-secret
+        - name: app-cache
+          emptyDir: {}
 {{- end }}
diff --git a/helm/dbrepo/templates/storage-secret.yaml b/helm/dbrepo/templates/storage-secret.yaml
index dc8e107e799a31c9748a6dd0641dd04d8a01fe58..452baecbf9480295e86fcc3975ab62996431f52c 100644
--- a/helm/dbrepo/templates/storage-secret.yaml
+++ b/helm/dbrepo/templates/storage-secret.yaml
@@ -7,6 +7,7 @@ metadata:
   namespace: {{ include "common.names.namespace" . | quote }}
 stringData:
   S3_BUCKET: "{{ .Values.storageservice.s3.bucket }}"
+  STORAGE_ENDPOINT: "{{ .Values.storageservice.init.s3.endpoint }}"
   admin_access_key_id: "{{ .Values.storageservice.s3.auth.adminAccessKeyId }}"
   admin_secret_access_key: "{{ .Values.storageservice.s3.auth.adminSecretAccessKey }}"
   read_access_key_id: "{{ .Values.storageservice.s3.auth.readAccessKeyId }}"
diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml
index fb08f447cf332fa28604c8ec182dc8f9444979ec..9ac022cdf12c5edc92137f3ca974540f58f6a488 100644
--- a/helm/dbrepo/values.yaml
+++ b/helm/dbrepo/values.yaml
@@ -721,7 +721,10 @@ storageservice:
   init:
     image:
       ## @skip storageservice.init.image.name
-      name: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.6.0
+      name: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.6.0rc2
+    s3:
+      ## @param storageservice.init.s3.endpoint The S3-capable endpoint the microservice connects to.
+      endpoint: http://storage-service-s3:8333
     ## @param storageservice.init.resourcesPreset The container resource preset
     resourcesPreset: "nano"
     ## @param storageservice.init.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
@@ -1013,169 +1016,11 @@ gatewayservice:
   service:
     ## @param gatewayservice.service.type The service type.
     type: ClusterIP
-  ## @param gatewayservice.serverBlock The extra configuration for the reverse proxy
-  serverBlock: |
-    # This is required to proxy Grafana Live WebSocket connections.
-    map $http_upgrade $connection_upgrade {
-      default upgrade;
-      '' close;
-    }
-
-    upstream broker {
-        server broker-service:15672;
-    }
-
-    upstream analyse {
-        server analyse-service:8080;
-    }
-
-    upstream data {
-        server data-service:8080;
-    }
-
-    upstream metadata {
-        server metadata-service:8080;
-    }
-
-    upstream search {
-        server search-service:8080;
-    }
-
-    upstream ui {
-        server ui:3000;
-    }
-
-    upstream upload {
-        server upload-service:8080;
-    }
-
-    upstream dashboard-service {
-        server dashboard-service:3000;
-    }
-
-    server {
-        listen 8080 default_server;
-        server_name _;
-
-        location /dashboard/ {
-            rewrite  ^/dashboard/(.*)  /$1 break;
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://dashboard-service;
-            proxy_read_timeout      90;
-        }
-
-        # Proxy Grafana Live WebSocket connections.
-        location /dashboard/api/live/ {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_set_header        Upgrade $http_upgrade;
-            proxy_set_header        Connection $connection_upgrade;
-            proxy_http_version      1.1;
-            proxy_pass              http://dashboard-service;
-            proxy_read_timeout      90;
-        }
-
-        location /api/search {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://search;
-            proxy_read_timeout      90;
-        }
-
-        location /api/upload {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_set_header        X-Forwarded-Host $host;
-            proxy_pass              http://upload;
-            proxy_read_timeout      90;
-            # Disable request and response buffering
-            proxy_request_buffering off;
-            proxy_buffering         off;
-            proxy_http_version      1.1;
-        }
-
-        location /api/analyse {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://analyse;
-            proxy_read_timeout      90;
-        }
-
-        location ~ /api/database/([0-9]+)/table/([0-9]+)/(data|history|export) {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://data;
-            proxy_read_timeout      90;
-        }
-
-        location ~ /api/database/([0-9]+)/view/([0-9]+)/(data|export) {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://data;
-            proxy_read_timeout      90;
-        }
-
-        location ~ /api/database/([0-9]+)/view {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://metadata;
-            proxy_read_timeout      90;
-        }
-
-        location ~ /api/database/([0-9]+)/subset {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://data;
-            proxy_read_timeout      600;
-        }
-
-        location ~ /api/(database|concept|container|identifier|image|message|license|oai|ontology|unit|user) {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://metadata;
-            proxy_read_timeout      90;
-        }
-
-        location ~ /pid/([0-9]+) {
-            rewrite /pid/(.*) /api/identifier/$1 break;
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://metadata;
-            proxy_read_timeout      90;
-        }
-
-        location / {
-            proxy_set_header        Host $host;
-            proxy_set_header        X-Real-IP $remote_addr;
-            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
-            proxy_set_header        X-Forwarded-Proto $scheme;
-            proxy_pass              http://ui;
-            proxy_read_timeout      90;
-        }
-    }
+  metrics:
+    ## @param gatewayservice.metrics.enabled Enable the Prometheus metrics sidecar.
+    enabled: false
+  ## @param gatewayservice.existingServerBlockConfigmap The extra configuration for the reverse proxy
+  existingServerBlockConfigmap: gateway-service-setup
   ## @param gatewayservice.replicaCount The number of replicas.
   replicaCount: 3
 
diff --git a/helm/seaweedfs/.gitignore b/helm/seaweedfs/.gitignore
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/helm/seaweedfs/CHANGELOG.md b/helm/seaweedfs/CHANGELOG.md
index 33dfaba2218a152cd9e5ec072a2cb2bc19582f0c..e880917876b0c345b35c2706b379a006bc41de99 100644
--- a/helm/seaweedfs/CHANGELOG.md
+++ b/helm/seaweedfs/CHANGELOG.md
@@ -1,8 +1,133 @@
 # Changelog
 
-## 1.0.2 (2024-07-22)
+## 4.2.0 (2024-12-10)
 
-* [bitnami/seaweedfs] Release 1.0.2 ([#28194](https://github.com/bitnami/charts/pull/28194))
+* [bitnami/seaweedfs] Detect non-standard images ([#30967](https://github.com/bitnami/charts/pull/30967))
+
+## <small>4.1.2 (2024-12-04)</small>
+
+* [bitnami/*] docs: :memo: Add "Backup & Restore" section (#30711) ([35ab536](https://github.com/bitnami/charts/commit/35ab5363741e7548f4076f04da6e62d10153c60c)), closes [#30711](https://github.com/bitnami/charts/issues/30711)
+* [bitnami/*] docs: :memo: Add "Prometheus metrics" (batch 6) (#30675) ([7b9cd04](https://github.com/bitnami/charts/commit/7b9cd04c2ffc730a0d62da787f2d4967c0ede47c)), closes [#30675](https://github.com/bitnami/charts/issues/30675)
+* [bitnami/*] docs: :memo: Add "Update Credentials" (batch 3) (#30688) ([10a49f9](https://github.com/bitnami/charts/commit/10a49f9ff2db1d9d11a6edd1c40a9f61803241bc)), closes [#30688](https://github.com/bitnami/charts/issues/30688)
+* [bitnami/seaweedfs] Release 4.1.2 (#30778) ([7342074](https://github.com/bitnami/charts/commit/7342074fd2562d7a024407a0275c62affee0181a)), closes [#30778](https://github.com/bitnami/charts/issues/30778)
+
+## <small>4.1.1 (2024-11-18)</small>
+
+* [bitnami/seaweedfs] Release 4.1.1 (#30510) ([990d46e](https://github.com/bitnami/charts/commit/990d46e857dbca7ff3181675cebb1f7509f7e698)), closes [#30510](https://github.com/bitnami/charts/issues/30510)
+
+## 4.1.0 (2024-11-18)
+
+* [bitnami/seaweedfs] feat: add support for customizing PVC retention policies (#30495) ([8a54fb8](https://github.com/bitnami/charts/commit/8a54fb8b17818a6237d3cadbe55fe956a0bc8c6c)), closes [#30495](https://github.com/bitnami/charts/issues/30495)
+
+## 4.0.0 (2024-11-12)
+
+* [bitnami/seaweedfs] chore!: :arrow_up: :boom: Bump MariaDB subchart to 20 (#30358) ([1d471fd](https://github.com/bitnami/charts/commit/1d471fd9fae99cf2e3b9a6e2230b0102046193e7)), closes [#30358](https://github.com/bitnami/charts/issues/30358)
+
+## 3.2.0 (2024-11-08)
+
+* [bitnami/seaweedfs] Support configuring volume size limit on Master (#30315) ([0dc86e0](https://github.com/bitnami/charts/commit/0dc86e09237ecaabf57d6c7b66d53dd461256e69)), closes [#30315](https://github.com/bitnami/charts/issues/30315)
+
+## 3.1.0 (2024-11-07)
+
+* [bitnami/seaweedfs] Support configuring max number of volumes per disk (#30294) ([c87c282](https://github.com/bitnami/charts/commit/c87c2825e8c1c4e4f1f6ee0ae678f999f76890e1)), closes [#30294](https://github.com/bitnami/charts/issues/30294)
+
+## <small>3.0.7 (2024-11-07)</small>
+
+* [bitnami/seaweedfs] Release 3.0.7 (#30292) ([cc3cbf6](https://github.com/bitnami/charts/commit/cc3cbf69cc6523de1b28de138cbe38afda75a00f)), closes [#30292](https://github.com/bitnami/charts/issues/30292)
+
+## <small>3.0.6 (2024-11-06)</small>
+
+* [bitnami/seaweedfs] Mount security.toml regardless security enhancements are enabled (#30235) ([2ec7ec9](https://github.com/bitnami/charts/commit/2ec7ec965a444558f5e74edba80d12b8c9420f5a)), closes [#30235](https://github.com/bitnami/charts/issues/30235)
+
+## <small>3.0.5 (2024-10-31)</small>
+
+* [bitnami/*] Remove wrong comment about imagePullPolicy (#30107) ([a51f9e4](https://github.com/bitnami/charts/commit/a51f9e4bb0fbf77199512d35de7ac8abe055d026)), closes [#30107](https://github.com/bitnami/charts/issues/30107)
+* [bitnami/seaweedfs] Release 3.0.5 (#30149) ([86395d9](https://github.com/bitnami/charts/commit/86395d98966d8ed6bd4a445e96ca112f7c0b0709)), closes [#30149](https://github.com/bitnami/charts/issues/30149)
+
+## <small>3.0.4 (2024-10-28)</small>
+
+* [bitnami/seaweedfs] Release 3.0.4 (#30097) ([f6a1c6f](https://github.com/bitnami/charts/commit/f6a1c6f46a5af99b8307b8b05ca1a2e61497ae03)), closes [#30097](https://github.com/bitnami/charts/issues/30097)
+
+## <small>3.0.3 (2024-10-16)</small>
+
+* [bitnami/seaweedfs] Release 3.0.3 (#29944) ([1dea08b](https://github.com/bitnami/charts/commit/1dea08b301bf082f6a32cf98332ebde411bb9f2b)), closes [#29944](https://github.com/bitnami/charts/issues/29944)
+* Update documentation links to techdocs.broadcom.com (#29931) ([f0d9ad7](https://github.com/bitnami/charts/commit/f0d9ad78f39f633d275fc576d32eae78ded4d0b8)), closes [#29931](https://github.com/bitnami/charts/issues/29931)
+
+## <small>3.0.2 (2024-10-07)</small>
+
+* [bitnami/seaweedfs] Release 3.0.2 (#29792) ([fb96676](https://github.com/bitnami/charts/commit/fb9667635ba7b4dea74d1f9df7ba2b30c1c0ee83)), closes [#29792](https://github.com/bitnami/charts/issues/29792)
+
+## <small>3.0.1 (2024-10-03)</small>
+
+* [bitnami/seaweedfs] Release 3.0.1 (#29767) ([47ffa78](https://github.com/bitnami/charts/commit/47ffa783266d4633b4a8f749fc7291e84b9d176b)), closes [#29767](https://github.com/bitnami/charts/issues/29767)
+
+## 3.0.0 (2024-10-03)
+
+* [bitnami/seaweedfs] feat!: :arrow_up: :boom: Bump PostgreSQL to 17.x (#29744) ([024f9e6](https://github.com/bitnami/charts/commit/024f9e6d9faad1a6616ea0145b9bf64a10232c40)), closes [#29744](https://github.com/bitnami/charts/issues/29744)
+
+## <small>2.0.4 (2024-10-02)</small>
+
+* [bitnami/seaweedfs] Release 2.0.4 (#29719) ([36de636](https://github.com/bitnami/charts/commit/36de636d89b745738f1426126f67bfc7f5cca0e9)), closes [#29719](https://github.com/bitnami/charts/issues/29719)
+
+## <small>2.0.3 (2024-09-30)</small>
+
+* [bitnami/seaweedfs] Release 2.0.3 (#29675) ([c077c83](https://github.com/bitnami/charts/commit/c077c839da01b34acd5ffb7b370f542b50fecf20)), closes [#29675](https://github.com/bitnami/charts/issues/29675)
+
+## <small>2.0.2 (2024-09-19)</small>
+
+* [bitnami/seaweedfs] Release 2.0.2 (#29537) ([2c05061](https://github.com/bitnami/charts/commit/2c050617c8d43da601117f7c8fd1945e00962da0)), closes [#29537](https://github.com/bitnami/charts/issues/29537)
+
+## <small>2.0.1 (2024-09-17)</small>
+
+* [bitnami/seaweedfs] test: :white_check_mark: Improve reliability of ginkgo tests (#29473) ([ef52e0d](https://github.com/bitnami/charts/commit/ef52e0d1992e16bed6d9726028b81b917c52bc41)), closes [#29473](https://github.com/bitnami/charts/issues/29473)
+
+## 2.0.0 (2024-09-16)
+
+* [bitnami/seaweedfs] Add support for PostgreSQL as alternative db (#29400) ([c43d3ba](https://github.com/bitnami/charts/commit/c43d3bac08541808d8b0d4f0e86f7870ed7a5411)), closes [#29400](https://github.com/bitnami/charts/issues/29400)
+
+## <small>1.1.2 (2024-09-13)</small>
+
+* [bitnami/seaweedfs] Release 1.1.2 (#29392) ([7df7650](https://github.com/bitnami/charts/commit/7df7650db97c60e5f447e5f18efc06764629d351)), closes [#29392](https://github.com/bitnami/charts/issues/29392)
+
+## <small>1.1.1 (2024-09-12)</small>
+
+* [bitnami/seaweedfs] fix: add apiVersion and kind to volumeClaimTemplates (#29357) ([ed8879b](https://github.com/bitnami/charts/commit/ed8879b066c604f95bde4c08f13d7eb8dc6f2d3f)), closes [#29357](https://github.com/bitnami/charts/issues/29357)
+
+## 1.1.0 (2024-09-10)
+
+* bitnami/seaweedfs external postgres database support (#29216) ([dc9b740](https://github.com/bitnami/charts/commit/dc9b7402d1ea788f806e42b7fc7e5c025e003e2a)), closes [#29216](https://github.com/bitnami/charts/issues/29216)
+
+## <small>1.0.9 (2024-08-19)</small>
+
+* [bitnami/seaweedfs] Release 1.0.9 (#28920) ([28916ca](https://github.com/bitnami/charts/commit/28916ca487e16f1626580f21c2ae8acb443a2e39)), closes [#28920](https://github.com/bitnami/charts/issues/28920)
+
+## <small>1.0.8 (2024-08-07)</small>
+
+* [bitnami/seaweedfs] Release 1.0.8 (#28750) ([c4ee2ee](https://github.com/bitnami/charts/commit/c4ee2ee425e92559b05a554fdae3fd0191614fb0)), closes [#28750](https://github.com/bitnami/charts/issues/28750)
+
+## <small>1.0.7 (2024-07-31)</small>
+
+* [bitnami/seaweedfs] Fix mounting the S3 auth config.json from secret (#28583) ([40d557a](https://github.com/bitnami/charts/commit/40d557addf28bc8c253fb99f3060220e43499632)), closes [#28583](https://github.com/bitnami/charts/issues/28583)
+
+## <small>1.0.6 (2024-07-30)</small>
+
+* [bitnami/seaweedfs] Fix tests (#28572) ([ef36337](https://github.com/bitnami/charts/commit/ef36337c5ffeedf577bb6fcadabbb3a92cf5d8e6)), closes [#28572](https://github.com/bitnami/charts/issues/28572)
+
+## <small>1.0.5 (2024-07-25)</small>
+
+* [bitnami/seaweedfs] Release 1.0.5 (#28483) ([f8b7481](https://github.com/bitnami/charts/commit/f8b7481b1c4b5cb35adf6c82e78f132592fe3335)), closes [#28483](https://github.com/bitnami/charts/issues/28483)
+
+## <small>1.0.4 (2024-07-24)</small>
+
+* [bitnami/seaweedfs] Release 1.0.4 (#28373) ([0aba72d](https://github.com/bitnami/charts/commit/0aba72d38fd247366717c98540c33b7306f3cc4d)), closes [#28373](https://github.com/bitnami/charts/issues/28373)
+
+## <small>1.0.3 (2024-07-23)</small>
+
+* [bitnami/seaweedfs] Release 1.0.3 (#28217) ([4746541](https://github.com/bitnami/charts/commit/4746541360d52a6a2f4c7742b922035326f30a27)), closes [#28217](https://github.com/bitnami/charts/issues/28217)
+
+## <small>1.0.2 (2024-07-22)</small>
+
+* [bitnami/seaweedfs] Release 1.0.2 (#28194) ([f1e0b37](https://github.com/bitnami/charts/commit/f1e0b37ed9860efa6ecc05dcda4ab501b0d7e505)), closes [#28194](https://github.com/bitnami/charts/issues/28194)
 
 ## <small>1.0.1 (2024-07-18)</small>
 
diff --git a/helm/seaweedfs/Chart.lock b/helm/seaweedfs/Chart.lock
index ae4ad47bb64e7849f30c61055cd0ae55c4ab700f..c973082620a92115ed6d4b5f96147ed8ab5d7984 100644
--- a/helm/seaweedfs/Chart.lock
+++ b/helm/seaweedfs/Chart.lock
@@ -1,9 +1,12 @@
 dependencies:
 - name: mariadb
   repository: oci://registry-1.docker.io/bitnamicharts
-  version: 19.1.2
+  version: 20.2.1
+- name: postgresql
+  repository: oci://registry-1.docker.io/bitnamicharts
+  version: 16.3.4
 - name: common
   repository: oci://registry-1.docker.io/bitnamicharts
   version: 2.28.0
-digest: sha256:cb5ef9761fc335713b8908c3e264dfdda602839b400ede4ce6d648348dd9343c
-generated: "2024-12-27T11:44:41.064882892+01:00"
+digest: sha256:98a68ef67facda82298174f5bae4e07abd0998e0440002390583a1be97b17aee
+generated: "2025-01-01T15:05:43.198633687+01:00"
diff --git a/helm/seaweedfs/Chart.yaml b/helm/seaweedfs/Chart.yaml
index 7d520821315084481c6be1f7df9ad1276b5bd453..0c7bf3c684c6c3bcee0ebe2d521a9794c4634c59 100644
--- a/helm/seaweedfs/Chart.yaml
+++ b/helm/seaweedfs/Chart.yaml
@@ -5,19 +5,29 @@ annotations:
   category: Infrastructure
   licenses: Apache-2.0
   images: |
+    - name: mariadb
+      image: docker.io/bitnami/mariadb:11.4.4-debian-12-r1
     - name: os-shell
-      image: docker.io/bitnami/os-shell:12-debian-12-r25
+      image: docker.io/bitnami/os-shell:12-debian-12-r33
+    - name: postgresql
+      image: docker.io/bitnami/postgresql:17.2.0-debian-12-r2
     - name: seaweedfs
-      image: docker.io/bitnami/seaweedfs:3.71.0-debian-12-r0
+      image: docker.io/bitnami/seaweedfs:3.80.0-debian-12-r1
 apiVersion: v2
-appVersion: 3.71.0
+appVersion: 3.80.0
 dependencies:
 - condition: mariadb.enabled
   name: mariadb
   repository: oci://registry-1.docker.io/bitnamicharts
   tags:
   - seaweedfs-database
-  version: 19.x.x
+  version: 20.x.x
+- condition: postgresql.enabled
+  name: postgresql
+  repository: oci://registry-1.docker.io/bitnamicharts
+  tags:
+  - seaweedfs-database
+  version: 16.x.x
 - name: common
   repository: oci://registry-1.docker.io/bitnamicharts
   tags:
@@ -40,4 +50,4 @@ name: seaweedfs
 sources:
 - https://github.com/bitnami/charts/tree/main/bitnami/seawwedfs
 - https://github.com/bitnami/containers/tree/main/bitnami/seaweedfs
-version: 1.0.2
+version: 4.2.1
diff --git a/helm/seaweedfs/README.md b/helm/seaweedfs/README.md
index 54f07c7a5963d4c86828608ae6690af32bbddae6..7506718dc1087f1ede7d95d9ebb28f40632a0b86 100644
--- a/helm/seaweedfs/README.md
+++ b/helm/seaweedfs/README.md
@@ -51,9 +51,38 @@ The command deploys SeaweedFS on the Kubernetes cluster in the default configura
 
 Bitnami charts allow setting resource requests and limits for all containers inside the chart deployment. These are inside the `resources` values (check parameter table). Setting requests is essential for production workloads and these should be adapted to your specific use case.
 
-To make this process easier, the chart contains the `resourcesPreset` values, which automatically sets the `resources` section according to different presets. Check these presets in [the bitnami/common chart](https://github.com/bitnami/charts/blob/main/bitnami/common/templates/_resources.tpl#L15). However, in production workloads using `resourcePreset` is discouraged as it may not fully adapt to your specific needs. Find more information on container resource management in the [official Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
+To make this process easier, the chart contains the `resourcesPreset` values, which automatically sets the `resources` section according to different presets. Check these presets in [the bitnami/common chart](https://github.com/bitnami/charts/blob/main/bitnami/common/templates/_resources.tpl#L15). However, in production workloads using `resourcesPreset` is discouraged as it may not fully adapt to your specific needs. Find more information on container resource management in the [official Kubernetes documentation](https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/).
 
-### [Rolling VS Immutable tags](https://docs.vmware.com/en/VMware-Tanzu-Application-Catalog/services/tutorials/GUID-understand-rolling-tags-containers-index.html)
+### Prometheus metrics
+
+This chart can be integrated with Prometheus by setting `*.metrics.enabled` (under the `master`, `volume`, `filer` and `s3` sections) to `true`. This will expose the SeaweedFS native Prometheus ports in the containers. Additionally, it will deploy several `metrics` services, which can be configured under the `*.metrics.service` section (under the `master`, `volume`, `filer` and `s3` sections). These `metrics` services will have the necessary annotations to be automatically scraped by Prometheus.
+
+#### Prometheus requirements
+
+It is necessary to have a working installation of Prometheus or Prometheus Operator for the integration to work. Install the [Bitnami Prometheus helm chart](https://github.com/bitnami/charts/tree/main/bitnami/prometheus) or the [Bitnami Kube Prometheus helm chart](https://github.com/bitnami/charts/tree/main/bitnami/kube-prometheus) to easily have a working Prometheus in your cluster.
+
+#### Integration with Prometheus Operator
+
+The chart can deploy `ServiceMonitor` objects for integration with Prometheus Operator installations. To do so, set the value `*.metrics.serviceMonitor.enabled=true` (under the `master`, `volume`, `filer` and `s3` sections). Ensure that the Prometheus Operator `CustomResourceDefinitions` are installed in the cluster or it will fail with the following error:
+
+```text
+no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
+```
+
+Install the [Bitnami Kube Prometheus helm chart](https://github.com/bitnami/charts/tree/main/bitnami/kube-prometheus) for having the necessary CRDs and the Prometheus Operator.
+
+### Update credentials
+
+Bitnami charts configure credentials at first boot. Any further change in the secrets or credentials require manual intervention. Follow these instructions:
+
+- Update the user password following [the upstream documentation](https://github.com/seaweedfs/seaweedfs/wiki)
+- Update the password secret with the new values (replace the SECRET_NAME, ADMIN_ACCESS_KEY_ID, ADMIN_SECRET_KEY_ID, READ_ACCESS_KEY_ID and READ_SECRET_ACCESS_KEY placeholders)
+
+```shell
+kubectl create secret generic SECRET_NAME --from-literal=admin_access_key_id=ADMIN_ACCESS_KEY_ID --from-literal=admin_secret_access_key=ADMIN_SECRET_KEY_ID --from-literal=read_access_key_id=READ_ACCESS_KEY_ID --from-literal=read_secret_access_key=READ_SECRET_KEY_ID --dry-run -o yaml | kubectl apply -f -
+```
+
+### [Rolling VS Immutable tags](https://techdocs.broadcom.com/us/en/vmware-tanzu/application-catalog/tanzu-application-catalog/services/tac-doc/apps-tutorials-understand-rolling-tags-containers-index.html)
 
 It is strongly recommended to use immutable tags in a production environment. This ensures your deployment does not change automatically if the same tag is updated with a different image.
 
@@ -65,6 +94,8 @@ You may want to have SeaweedFS Filer Server connect to an external database rath
 
 ```console
 mariadb.enabled=false
+externalDatabase.enabled=true
+externalDatabase.store=mariadb
 externalDatabase.host=myexternalhost
 externalDatabase.user=myuser
 externalDatabase.password=mypassword
@@ -72,6 +103,38 @@ externalDatabase.database=mydatabase
 externalDatabase.port=3306
 ```
 
+In addition, the "filemeta" table must be created in the external database before starting SeaweedFS.
+
+- For MariaDB, the following should be performed:
+
+```sql
+USE DATABASE_NAME;
+CREATE TABLE IF NOT EXISTS filemeta (
+  `dirhash`   BIGINT NOT NULL       COMMENT 'first 64 bits of MD5 hash value of directory field',
+  `name`      VARCHAR(766) NOT NULL COMMENT 'directory or file name',
+  `directory` TEXT NOT NULL         COMMENT 'full path to parent directory',
+  `meta`      LONGBLOB,
+  PRIMARY KEY (`dirhash`, `name`)
+) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+```
+
+- For PostgreSQL, the following should be performed:
+
+```sql
+\c DATABASE_NAME;
+CREATE TABLE IF NOT EXISTS filemeta (
+  dirhash     BIGINT,
+  name        VARCHAR(65535),
+  directory   VARCHAR(65535),
+  meta        bytea,
+  PRIMARY KEY (dirhash, name)
+);
+```
+
+> Note: You need to substitute the placeholder `DATABASE_NAME` with the actual database name.
+
+You can also rely on a K8s job to create the table during the Helm chart installation. To do so, set the `externalDatabase.initDatabaseJob.enabled` parameter to `true`.
+
 ### Ingress
 
 This chart provides support for Ingress resources. If you have an ingress controller installed on your cluster, such as [nginx-ingress-controller](https://github.com/bitnami/charts/tree/main/bitnami/nginx-ingress-controller) or [contour](https://github.com/bitnami/charts/tree/main/bitnami/contour) you can utilize the ingress controller to serve your application.
@@ -165,6 +228,10 @@ This chart allows you to set your custom affinity using the `affinity` parameter
 
 As an alternative, use one of the preset configurations for pod affinity, pod anti-affinity, and node affinity available at the [bitnami/common](https://github.com/bitnami/charts/tree/main/bitnami/common#affinities) chart. To do so, set the `podAffinityPreset`, `podAntiAffinityPreset`, or `nodeAffinityPreset` parameters.
 
+### Backup and restore
+
+To back up and restore Helm chart deployments on Kubernetes, you need to back up the persistent volumes from the source deployment and attach them to a new deployment using [Velero](https://velero.io/), a Kubernetes backup/restore tool. Find the instructions for using Velero in [this guide](https://techdocs.broadcom.com/us/en/vmware-tanzu/application-catalog/tanzu-application-catalog/services/tac-doc/apps-tutorials-backup-restore-deployments-velero-index.html).
+
 ## Persistence
 
 The [Bitnami SeaweedFS](https://github.com/bitnami/containers/tree/main/bitnami/seaweedfs) image stores the data and configurations at the `/bitnami` path of the container. Persistent Volume Claims are used to keep the data across deployments.
@@ -175,13 +242,13 @@ If you encounter errors when working with persistent volumes, refer to our [trou
 
 ### Global parameters
 
-| Name                                                  | Description                                                                                                                                                                                                                                                                                                                                                         | Value  |
-| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
-| `global.imageRegistry`                                | Global Docker image registry                                                                                                                                                                                                                                                                                                                                        | `""`   |
-| `global.imagePullSecrets`                             | Global Docker registry secret names as an array                                                                                                                                                                                                                                                                                                                     | `[]`   |
-| `global.defaultStorageClass`                          | Global default StorageClass for Persistent Volume(s)                                                                                                                                                                                                                                                                                                                | `""`   |
-| `global.storageClass`                                 | DEPRECATED: use global.defaultStorageClass instead                                                                                                                                                                                                                                                                                                                  | `""`   |
-| `global.compatibility.openshift.adaptSecurityContext` | Adapt the securityContext sections of the deployment to make them compatible with Openshift restricted-v2 SCC: remove runAsUser, runAsGroup and fsGroup and let the platform use their allowed default IDs. Possible values: auto (apply if the detected running cluster is Openshift), force (perform the adaptation always), disabled (do not perform adaptation) | `auto` |
+| Name                                                  | Description                                                                                                                                                                                                                                                                                                                                                         | Value   |
+| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
+| `global.imageRegistry`                                | Global Docker image registry                                                                                                                                                                                                                                                                                                                                        | `""`    |
+| `global.imagePullSecrets`                             | Global Docker registry secret names as an array                                                                                                                                                                                                                                                                                                                     | `[]`    |
+| `global.defaultStorageClass`                          | Global default StorageClass for Persistent Volume(s)                                                                                                                                                                                                                                                                                                                | `""`    |
+| `global.security.allowInsecureImages`                 | Allows skipping image verification                                                                                                                                                                                                                                                                                                                                  | `false` |
+| `global.compatibility.openshift.adaptSecurityContext` | Adapt the securityContext sections of the deployment to make them compatible with Openshift restricted-v2 SCC: remove runAsUser, runAsGroup and fsGroup and let the platform use their allowed default IDs. Possible values: auto (apply if the detected running cluster is Openshift), force (perform the adaptation always), disabled (do not perform adaptation) | `auto`  |
 
 ### Common parameters
 
@@ -284,13 +351,14 @@ If you encounter errors when working with persistent volumes, refer to our [trou
 | `master.containerSecurityContext.seccompProfile.type`      | Set seccomp profile in Master Server container                                                                                                                                                                                         | `RuntimeDefault` |
 | `master.logLevel`                                          | Master Server log level [0|1|2|3|4]                                                                                                                                                                                                    | `1`              |
 | `master.bindAddress`                                       | Master Server bind address                                                                                                                                                                                                             | `0.0.0.0`        |
+| `master.volumeSizeLimitMB`                                 | Limit (in MB) to stop directing writes to oversized volumes                                                                                                                                                                            | `1000`           |
 | `master.config`                                            | Master Server configuration                                                                                                                                                                                                            | `""`             |
 | `master.existingConfigmap`                                 | The name of an existing ConfigMap with your custom configuration for Master Server                                                                                                                                                     | `""`             |
 | `master.command`                                           | Override default Master Server container command (useful when using custom images)                                                                                                                                                     | `[]`             |
 | `master.args`                                              | Override default Master Server container args (useful when using custom images)                                                                                                                                                        | `[]`             |
 | `master.automountServiceAccountToken`                      | Mount Service Account token in Master Server pods                                                                                                                                                                                      | `false`          |
 | `master.hostAliases`                                       | Master Server pods host aliases                                                                                                                                                                                                        | `[]`             |
-| `master.statefulsetAnnotations`                            | Annotations for Master Server statefulset                                                                                                                                                                                              | `{}`             |
+| `master.statefulsetAnnotations`                            | Annotations for Master Server StatefulSet                                                                                                                                                                                              | `{}`             |
 | `master.podLabels`                                         | Extra labels for Master Server pods                                                                                                                                                                                                    | `{}`             |
 | `master.podAnnotations`                                    | Annotations for Master Server pods                                                                                                                                                                                                     | `{}`             |
 | `master.podAffinityPreset`                                 | Pod affinity preset. Ignored if `master.affinity` is set. Allowed values: `soft` or `hard`                                                                                                                                             | `""`             |
@@ -301,8 +369,8 @@ If you encounter errors when working with persistent volumes, refer to our [trou
 | `master.affinity`                                          | Affinity for Master Server pods assignment                                                                                                                                                                                             | `{}`             |
 | `master.nodeSelector`                                      | Node labels for Master Server pods assignment                                                                                                                                                                                          | `{}`             |
 | `master.tolerations`                                       | Tolerations for Master Server pods assignment                                                                                                                                                                                          | `[]`             |
-| `master.updateStrategy.type`                               | Master Server statefulset strategy type                                                                                                                                                                                                | `RollingUpdate`  |
-| `master.podManagementPolicy`                               | Pod management policy for Master Server statefulset                                                                                                                                                                                    | `Parallel`       |
+| `master.updateStrategy.type`                               | Master Server StatefulSet strategy type                                                                                                                                                                                                | `RollingUpdate`  |
+| `master.podManagementPolicy`                               | Pod management policy for Master Server StatefulSet                                                                                                                                                                                    | `Parallel`       |
 | `master.priorityClassName`                                 | Master Server pods' priorityClassName                                                                                                                                                                                                  | `""`             |
 | `master.topologySpreadConstraints`                         | Topology Spread Constraints for Master Server pod assignment spread across your cluster among failure-domains                                                                                                                          | `[]`             |
 | `master.schedulerName`                                     | Name of the k8s scheduler (other than default) for Master Server pods                                                                                                                                                                  | `""`             |
@@ -366,18 +434,21 @@ If you encounter errors when working with persistent volumes, refer to our [trou
 
 ### Master Server Persistence Parameters
 
-| Name                               | Description                                                                                             | Value               |
-| ---------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------- |
-| `master.persistence.enabled`       | Enable persistence on Master Server using Persistent Volume Claims                                      | `true`              |
-| `master.persistence.mountPath`     | Path to mount the volume at.                                                                            | `/data`             |
-| `master.persistence.subPath`       | The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services | `""`                |
-| `master.persistence.storageClass`  | Storage class of backing PVC                                                                            | `""`                |
-| `master.persistence.annotations`   | Persistent Volume Claim annotations                                                                     | `{}`                |
-| `master.persistence.accessModes`   | Persistent Volume Access Modes                                                                          | `["ReadWriteOnce"]` |
-| `master.persistence.size`          | Size of data volume                                                                                     | `8Gi`               |
-| `master.persistence.existingClaim` | The name of an existing PVC to use for persistence                                                      | `""`                |
-| `master.persistence.selector`      | Selector to match an existing Persistent Volume for data PVC                                            | `{}`                |
-| `master.persistence.dataSource`    | Custom PVC data source                                                                                  | `{}`                |
+| Name                                                      | Description                                                                                             | Value               |
+| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------- |
+| `master.persistence.enabled`                              | Enable persistence on Master Server using Persistent Volume Claims                                      | `true`              |
+| `master.persistence.mountPath`                            | Path to mount the volume at.                                                                            | `/data`             |
+| `master.persistence.subPath`                              | The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services | `""`                |
+| `master.persistence.storageClass`                         | Storage class of backing PVC                                                                            | `""`                |
+| `master.persistence.annotations`                          | Persistent Volume Claim annotations                                                                     | `{}`                |
+| `master.persistence.accessModes`                          | Persistent Volume Access Modes                                                                          | `["ReadWriteOnce"]` |
+| `master.persistence.size`                                 | Size of data volume                                                                                     | `8Gi`               |
+| `master.persistence.existingClaim`                        | The name of an existing PVC to use for persistence                                                      | `""`                |
+| `master.persistence.selector`                             | Selector to match an existing Persistent Volume for data PVC                                            | `{}`                |
+| `master.persistence.dataSource`                           | Custom PVC data source                                                                                  | `{}`                |
+| `master.persistentVolumeClaimRetentionPolicy.enabled`     | Controls if and how PVCs are deleted during the lifecycle of the Master Server StatefulSet              | `false`             |
+| `master.persistentVolumeClaimRetentionPolicy.whenScaled`  | Volume retention behavior when the replica count of the StatefulSet is reduced                          | `Retain`            |
+| `master.persistentVolumeClaimRetentionPolicy.whenDeleted` | Volume retention behavior that applies when the StatefulSet is deleted                                  | `Retain`            |
 
 ### Master Server Metrics Parameters
 
@@ -454,7 +525,7 @@ If you encounter errors when working with persistent volumes, refer to our [trou
 | `volume.args`                                              | Override default Volume Server container args (useful when using custom images)                                                                                                                                                        | `[]`             |
 | `volume.automountServiceAccountToken`                      | Mount Service Account token in Volume Server pods                                                                                                                                                                                      | `false`          |
 | `volume.hostAliases`                                       | Volume Server pods host aliases                                                                                                                                                                                                        | `[]`             |
-| `volume.statefulsetAnnotations`                            | Annotations for Volume Server statefulset                                                                                                                                                                                              | `{}`             |
+| `volume.statefulsetAnnotations`                            | Annotations for Volume Server StatefulSet                                                                                                                                                                                              | `{}`             |
 | `volume.podLabels`                                         | Extra labels for Volume Server pods                                                                                                                                                                                                    | `{}`             |
 | `volume.podAnnotations`                                    | Annotations for Volume Server pods                                                                                                                                                                                                     | `{}`             |
 | `volume.podAffinityPreset`                                 | Pod affinity preset. Ignored if `volume.affinity` is set. Allowed values: `soft` or `hard`                                                                                                                                             | `""`             |
@@ -465,8 +536,8 @@ If you encounter errors when working with persistent volumes, refer to our [trou
 | `volume.affinity`                                          | Affinity for Volume Server pods assignment                                                                                                                                                                                             | `{}`             |
 | `volume.nodeSelector`                                      | Node labels for Volume Server pods assignment                                                                                                                                                                                          | `{}`             |
 | `volume.tolerations`                                       | Tolerations for Volume Server pods assignment                                                                                                                                                                                          | `[]`             |
-| `volume.updateStrategy.type`                               | Volume Server statefulset strategy type                                                                                                                                                                                                | `RollingUpdate`  |
-| `volume.podManagementPolicy`                               | Pod management policy for Volume Server statefulset                                                                                                                                                                                    | `Parallel`       |
+| `volume.updateStrategy.type`                               | Volume Server StatefulSet strategy type                                                                                                                                                                                                | `RollingUpdate`  |
+| `volume.podManagementPolicy`                               | Pod management policy for Volume Server StatefulSet                                                                                                                                                                                    | `Parallel`       |
 | `volume.priorityClassName`                                 | Volume Server pods' priorityClassName                                                                                                                                                                                                  | `""`             |
 | `volume.topologySpreadConstraints`                         | Topology Spread Constraints for Volume Server pod assignment spread across your cluster among failure-domains                                                                                                                          | `[]`             |
 | `volume.schedulerName`                                     | Name of the k8s scheduler (other than default) for Volume Server pods                                                                                                                                                                  | `""`             |
@@ -530,19 +601,23 @@ If you encounter errors when working with persistent volumes, refer to our [trou
 
 ### Volume Server Persistence Parameters
 
-| Name                                              | Description                                                                                             | Value               |
-| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------- |
-| `volume.dataVolumes[0].name`                      | Name of the data volume                                                                                 | `data-0`            |
-| `volume.dataVolumes[0].mountPath`                 | Path to mount the volume at.                                                                            | `/data-0`           |
-| `volume.dataVolumes[0].subPath`                   | The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services | `""`                |
-| `volume.dataVolumes[0].persistence.enabled`       | Enable persistence on Volume Server using Persistent Volume Claims                                      | `true`              |
-| `volume.dataVolumes[0].persistence.storageClass`  | Storage class of backing PVC                                                                            | `""`                |
-| `volume.dataVolumes[0].persistence.annotations`   | Persistent Volume Claim annotations                                                                     | `{}`                |
-| `volume.dataVolumes[0].persistence.accessModes`   | Persistent Volume Access Modes                                                                          | `["ReadWriteOnce"]` |
-| `volume.dataVolumes[0].persistence.size`          | Size of data volume                                                                                     | `8Gi`               |
-| `volume.dataVolumes[0].persistence.existingClaim` | The name of an existing PVC to use for persistence                                                      | `""`                |
-| `volume.dataVolumes[0].persistence.selector`      | Selector to match an existing Persistent Volume for data PVC                                            | `{}`                |
-| `volume.dataVolumes[0].persistence.dataSource`    | Custom PVC data source                                                                                  | `{}`                |
+| Name                                                      | Description                                                                                                                                                                   | Value               |
+| --------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
+| `volume.dataVolumes[0].name`                              | Name of the data volume                                                                                                                                                       | `data-0`            |
+| `volume.dataVolumes[0].mountPath`                         | Path to mount the volume at.                                                                                                                                                  | `/data-0`           |
+| `volume.dataVolumes[0].subPath`                           | The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services                                                                       | `""`                |
+| `volume.dataVolumes[0].maxVolumes`                        | Max number of SeaweedFS volumes this data volume can be divided into. If set to 0, the limit will be auto configured as free disk space divided by default volume size (30GB) | `8`                 |
+| `volume.dataVolumes[0].persistence.enabled`               | Enable persistence on Volume Server using Persistent Volume Claims                                                                                                            | `true`              |
+| `volume.dataVolumes[0].persistence.storageClass`          | Storage class of backing PVC                                                                                                                                                  | `""`                |
+| `volume.dataVolumes[0].persistence.annotations`           | Persistent Volume Claim annotations                                                                                                                                           | `{}`                |
+| `volume.dataVolumes[0].persistence.accessModes`           | Persistent Volume Access Modes                                                                                                                                                | `["ReadWriteOnce"]` |
+| `volume.dataVolumes[0].persistence.size`                  | Size of data volume                                                                                                                                                           | `8Gi`               |
+| `volume.dataVolumes[0].persistence.existingClaim`         | The name of an existing PVC to use for persistence                                                                                                                            | `""`                |
+| `volume.dataVolumes[0].persistence.selector`              | Selector to match an existing Persistent Volume for data PVC                                                                                                                  | `{}`                |
+| `volume.dataVolumes[0].persistence.dataSource`            | Custom PVC data source                                                                                                                                                        | `{}`                |
+| `volume.persistentVolumeClaimRetentionPolicy.enabled`     | Controls if and how PVCs are deleted during the lifecycle of the Volume Server StatefulSet                                                                                    | `false`             |
+| `volume.persistentVolumeClaimRetentionPolicy.whenScaled`  | Volume retention behavior when the replica count of the StatefulSet is reduced                                                                                                | `Retain`            |
+| `volume.persistentVolumeClaimRetentionPolicy.whenDeleted` | Volume retention behavior that applies when the StatefulSet is deleted                                                                                                        | `Retain`            |
 
 ### Volume Server Metrics Parameters
 
@@ -621,7 +696,7 @@ enabled = false
 | `filer.args`                                              | Override default Filer Server container args (useful when using custom images)                                                                                                                                                      | `[]`                          |
 | `filer.automountServiceAccountToken`                      | Mount Service Account token in Filer Server pods                                                                                                                                                                                    | `false`                       |
 | `filer.hostAliases`                                       | Filer Server pods host aliases                                                                                                                                                                                                      | `[]`                          |
-| `filer.statefulsetAnnotations`                            | Annotations for Filer Server statefulset                                                                                                                                                                                            | `{}`                          |
+| `filer.statefulsetAnnotations`                            | Annotations for Filer Server StatefulSet                                                                                                                                                                                            | `{}`                          |
 | `filer.podLabels`                                         | Extra labels for Filer Server pods                                                                                                                                                                                                  | `{}`                          |
 | `filer.podAnnotations`                                    | Annotations for Filer Server pods                                                                                                                                                                                                   | `{}`                          |
 | `filer.podAffinityPreset`                                 | Pod affinity preset. Ignored if `filer.affinity` is set. Allowed values: `soft` or `hard`                                                                                                                                           | `""`                          |
@@ -632,8 +707,8 @@ enabled = false
 | `filer.affinity`                                          | Affinity for Filer Server pods assignment                                                                                                                                                                                           | `{}`                          |
 | `filer.nodeSelector`                                      | Node labels for Filer Server pods assignment                                                                                                                                                                                        | `{}`                          |
 | `filer.tolerations`                                       | Tolerations for Filer Server pods assignment                                                                                                                                                                                        | `[]`                          |
-| `filer.updateStrategy.type`                               | Filer Server statefulset strategy type                                                                                                                                                                                              | `RollingUpdate`               |
-| `filer.podManagementPolicy`                               | Pod management policy for Filer Server statefulset                                                                                                                                                                                  | `Parallel`                    |
+| `filer.updateStrategy.type`                               | Filer Server StatefulSet strategy type                                                                                                                                                                                              | `RollingUpdate`               |
+| `filer.podManagementPolicy`                               | Pod management policy for Filer Server StatefulSet                                                                                                                                                                                  | `Parallel`                    |
 | `filer.priorityClassName`                                 | Filer Server pods' priorityClassName                                                                                                                                                                                                | `""`                          |
 | `filer.topologySpreadConstraints`                         | Topology Spread Constraints for Filer Server pod assignment spread across your cluster among failure-domains                                                                                                                        | `[]`                          |
 | `filer.schedulerName`                                     | Name of the k8s scheduler (other than default) for Filer Server pods                                                                                                                                                                | `""`                          |
@@ -1018,38 +1093,86 @@ enabled = false
 
 ### Other Parameters
 
-| Name                                          | Description                                                      | Value  |
-| --------------------------------------------- | ---------------------------------------------------------------- | ------ |
-| `serviceAccount.create`                       | Specifies whether a ServiceAccount should be created             | `true` |
-| `serviceAccount.name`                         | The name of the ServiceAccount to use.                           | `""`   |
-| `serviceAccount.annotations`                  | Additional Service Account annotations (evaluated as a template) | `{}`   |
-| `serviceAccount.automountServiceAccountToken` | Automount service account token for the server service account   | `true` |
+| Name                                          | Description                                                      | Value   |
+| --------------------------------------------- | ---------------------------------------------------------------- | ------- |
+| `serviceAccount.create`                       | Specifies whether a ServiceAccount should be created             | `true`  |
+| `serviceAccount.name`                         | The name of the ServiceAccount to use.                           | `""`    |
+| `serviceAccount.annotations`                  | Additional Service Account annotations (evaluated as a template) | `{}`    |
+| `serviceAccount.automountServiceAccountToken` | Automount service account token for the server service account   | `false` |
 
 ### Database Parameters
 
-| Name                                       | Description                                                                                                                                                                                                                | Value               |
-| ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- |
-| `mariadb.enabled`                          | Deploy a MariaDB server to satisfy the Filer server database requirements                                                                                                                                                  | `true`              |
-| `mariadb.architecture`                     | MariaDB architecture. Allowed values: `standalone` or `replication`                                                                                                                                                        | `standalone`        |
-| `mariadb.auth.rootPassword`                | MariaDB root password                                                                                                                                                                                                      | `""`                |
-| `mariadb.auth.database`                    | MariaDB custom database                                                                                                                                                                                                    | `bitnami_seaweedfs` |
-| `mariadb.auth.username`                    | MariaDB custom user name                                                                                                                                                                                                   | `bn_seaweedfs`      |
-| `mariadb.auth.password`                    | MariaDB custom user password                                                                                                                                                                                               | `""`                |
-| `mariadb.auth.usePasswordFiles`            | Mount credentials as a file instead of using an environment variable                                                                                                                                                       | `false`             |
-| `mariadb.initdbScripts`                    | Specify dictionary of scripts to be run at first boot                                                                                                                                                                      | `{}`                |
-| `mariadb.primary.persistence.enabled`      | Enable persistence on MariaDB using PVC(s)                                                                                                                                                                                 | `true`              |
-| `mariadb.primary.persistence.storageClass` | Persistent Volume storage class                                                                                                                                                                                            | `""`                |
-| `mariadb.primary.persistence.accessModes`  | Persistent Volume access modes                                                                                                                                                                                             | `[]`                |
-| `mariadb.primary.persistence.size`         | Persistent Volume size                                                                                                                                                                                                     | `8Gi`               |
-| `mariadb.primary.resourcesPreset`          | Set container resources according to one common preset (allowed values: none, nano, small, medium, large, xlarge, 2xlarge). This is ignored if primary.resources is set (primary.resources is recommended for production). | `micro`             |
-| `mariadb.primary.resources`                | Set container requests and limits for different resources like CPU or memory (essential for production workloads)                                                                                                          | `{}`                |
-| `externalDatabase.enabled`                 | Enable secret with external mariadb database credentials                                                                                                                                                                   | `false`             |
-| `externalDatabase.host`                    | External Database server host                                                                                                                                                                                              | `localhost`         |
-| `externalDatabase.port`                    | External Database server port                                                                                                                                                                                              | `3306`              |
-| `externalDatabase.user`                    | External Database username                                                                                                                                                                                                 | `bn_seaweedfs`      |
-| `externalDatabase.password`                | External Database user password                                                                                                                                                                                            | `""`                |
-| `externalDatabase.database`                | External Database database name                                                                                                                                                                                            | `bitnami_seaweedfs` |
-| `externalDatabase.existingSecret`          | The name of an existing secret with database credentials. Evaluated as a template                                                                                                                                          | `""`                |
+| Name                                                                                 | Description                                                                                                                                                                                                                                                                                                    | Value                        |
+| ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |
+| `mariadb.enabled`                                                                    | Deploy a MariaDB server to satisfy the Filer server database requirements                                                                                                                                                                                                                                      | `true`                       |
+| `mariadb.image.registry`                                                             | MariaDB image registry                                                                                                                                                                                                                                                                                         | `REGISTRY_NAME`              |
+| `mariadb.image.repository`                                                           | MariaDB image repository                                                                                                                                                                                                                                                                                       | `REPOSITORY_NAME/mariadb`    |
+| `mariadb.image.digest`                                                               | MariaDB image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag                                                                                                                                                                                                        | `""`                         |
+| `mariadb.image.pullPolicy`                                                           | MariaDB image pull policy                                                                                                                                                                                                                                                                                      | `IfNotPresent`               |
+| `mariadb.image.pullSecrets`                                                          | Specify docker-registry secret names as an array                                                                                                                                                                                                                                                               | `[]`                         |
+| `mariadb.architecture`                                                               | MariaDB architecture. Allowed values: `standalone` or `replication`                                                                                                                                                                                                                                            | `standalone`                 |
+| `mariadb.auth.rootPassword`                                                          | MariaDB root password                                                                                                                                                                                                                                                                                          | `""`                         |
+| `mariadb.auth.database`                                                              | MariaDB custom database                                                                                                                                                                                                                                                                                        | `bitnami_seaweedfs`          |
+| `mariadb.auth.username`                                                              | MariaDB custom user name                                                                                                                                                                                                                                                                                       | `bn_seaweedfs`               |
+| `mariadb.auth.password`                                                              | MariaDB custom user password                                                                                                                                                                                                                                                                                   | `""`                         |
+| `mariadb.auth.usePasswordFiles`                                                      | Mount credentials as a file instead of using an environment variable                                                                                                                                                                                                                                           | `false`                      |
+| `mariadb.initdbScripts`                                                              | Specify dictionary of scripts to be run at first boot                                                                                                                                                                                                                                                          | `{}`                         |
+| `mariadb.primary.persistence.enabled`                                                | Enable persistence on MariaDB using PVC(s)                                                                                                                                                                                                                                                                     | `true`                       |
+| `mariadb.primary.persistence.storageClass`                                           | Persistent Volume storage class                                                                                                                                                                                                                                                                                | `""`                         |
+| `mariadb.primary.persistence.accessModes`                                            | Persistent Volume access modes                                                                                                                                                                                                                                                                                 | `[]`                         |
+| `mariadb.primary.persistence.size`                                                   | Persistent Volume size                                                                                                                                                                                                                                                                                         | `8Gi`                        |
+| `mariadb.primary.resourcesPreset`                                                    | Set container resources according to one common preset (allowed values: none, nano, small, medium, large, xlarge, 2xlarge). This is ignored if primary.resources is set (primary.resources is recommended for production).                                                                                     | `micro`                      |
+| `mariadb.primary.resources`                                                          | Set container requests and limits for different resources like CPU or memory (essential for production workloads)                                                                                                                                                                                              | `{}`                         |
+| `postgresql.enabled`                                                                 | Deploy a PostgresSQL server to satisfy the Filer server database requirements                                                                                                                                                                                                                                  | `false`                      |
+| `postgresql.image.registry`                                                          | PostgreSQL image registry                                                                                                                                                                                                                                                                                      | `REGISTRY_NAME`              |
+| `postgresql.image.repository`                                                        | PostgreSQL image repository                                                                                                                                                                                                                                                                                    | `REPOSITORY_NAME/postgresql` |
+| `postgresql.image.digest`                                                            | PostgreSQL image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag                                                                                                                                                                                                     | `""`                         |
+| `postgresql.image.pullPolicy`                                                        | PostgreSQL image pull policy                                                                                                                                                                                                                                                                                   | `IfNotPresent`               |
+| `postgresql.image.pullSecrets`                                                       | Specify image pull secrets                                                                                                                                                                                                                                                                                     | `[]`                         |
+| `postgresql.architecture`                                                            | PostgreSQL architecture (`standalone` or `replication`)                                                                                                                                                                                                                                                        | `standalone`                 |
+| `postgresql.auth.postgresPassword`                                                   | Password for the "postgres" admin user. Ignored if `auth.existingSecret` with key `postgres-password` is provided                                                                                                                                                                                              | `""`                         |
+| `postgresql.auth.database`                                                           | Name for a custom database to create                                                                                                                                                                                                                                                                           | `bitnami_seaweedfs`          |
+| `postgresql.auth.username`                                                           | Name for a custom user to create                                                                                                                                                                                                                                                                               | `bn_seaweedfs`               |
+| `postgresql.auth.password`                                                           | Password for the custom user to create                                                                                                                                                                                                                                                                         | `some-password`              |
+| `postgresql.auth.existingSecret`                                                     | Name of existing secret to use for PostgreSQL credentials                                                                                                                                                                                                                                                      | `""`                         |
+| `postgresql.auth.secretKeys.userPasswordKey`                                         | Name of key in existing secret to use for PostgreSQL credentials. Only used when `auth.existingSecret` is set.                                                                                                                                                                                                 | `password`                   |
+| `postgresql.primary.resourcesPreset`                                                 | Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if postgresql.primary.resources is set (postgresql.primary.resources is recommended for production).                                                        | `nano`                       |
+| `postgresql.primary.resources`                                                       | Set container requests and limits for different resources like CPU or memory (essential for production workloads)                                                                                                                                                                                              | `{}`                         |
+| `postgresql.primary.initdb.scripts`                                                  | Dictionary of initdb scripts                                                                                                                                                                                                                                                                                   | `{}`                         |
+| `postgresql.primary.persistence.enabled`                                             | Enable PostgreSQL Primary data persistence using PVC(s)                                                                                                                                                                                                                                                        | `true`                       |
+| `postgresql.primary.persistence.storageClass`                                        | Persistent Volume storage class                                                                                                                                                                                                                                                                                | `""`                         |
+| `postgresql.primary.persistence.accessModes`                                         | Persistent Volume access modes                                                                                                                                                                                                                                                                                 | `[]`                         |
+| `postgresql.primary.persistence.size`                                                | Persistent Volume size                                                                                                                                                                                                                                                                                         | `8Gi`                        |
+| `externalDatabase.enabled`                                                           | Enable external database support                                                                                                                                                                                                                                                                               | `false`                      |
+| `externalDatabase.store`                                                             | Database store (mariadb, postgresql)                                                                                                                                                                                                                                                                           | `mariadb`                    |
+| `externalDatabase.host`                                                              | External Database server host                                                                                                                                                                                                                                                                                  | `localhost`                  |
+| `externalDatabase.port`                                                              | External Database server port                                                                                                                                                                                                                                                                                  | `3306`                       |
+| `externalDatabase.user`                                                              | External Database username                                                                                                                                                                                                                                                                                     | `bn_seaweedfs`               |
+| `externalDatabase.password`                                                          | External Database user password                                                                                                                                                                                                                                                                                | `""`                         |
+| `externalDatabase.database`                                                          | External Database database name                                                                                                                                                                                                                                                                                | `bitnami_seaweedfs`          |
+| `externalDatabase.existingSecret`                                                    | The name of an existing secret with database credentials. Evaluated as a template                                                                                                                                                                                                                              | `""`                         |
+| `externalDatabase.initDatabaseJob.enabled`                                           | Enable the init external database job                                                                                                                                                                                                                                                                          | `false`                      |
+| `externalDatabase.initDatabaseJob.labels`                                            | Extra labels for the init external database job                                                                                                                                                                                                                                                                | `{}`                         |
+| `externalDatabase.initDatabaseJob.annotations`                                       | Extra annotations for the init external database job                                                                                                                                                                                                                                                           | `{}`                         |
+| `externalDatabase.initDatabaseJob.backoffLimit`                                      | Set backoff limit of the init external database job                                                                                                                                                                                                                                                            | `10`                         |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.enabled`                  | Enabled init external database job containers' Security Context                                                                                                                                                                                                                                                | `true`                       |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.seLinuxOptions`           | Set SELinux options in container                                                                                                                                                                                                                                                                               | `{}`                         |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.runAsUser`                | Set init external database job containers' Security Context runAsUser                                                                                                                                                                                                                                          | `1001`                       |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.runAsGroup`               | Set init external database job containers' Security Context runAsGroup                                                                                                                                                                                                                                         | `1001`                       |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.runAsNonRoot`             | Set init external database job containers' Security Context runAsNonRoot                                                                                                                                                                                                                                       | `true`                       |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.privileged`               | Set init external database job containers' Security Context privileged                                                                                                                                                                                                                                         | `false`                      |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.readOnlyRootFilesystem`   | Set init external database job containers' Security Context readOnlyRootFilesystem                                                                                                                                                                                                                             | `true`                       |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.allowPrivilegeEscalation` | Set init external database job containers' Security Context allowPrivilegeEscalation                                                                                                                                                                                                                           | `false`                      |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.capabilities.drop`        | List of capabilities to be dropped                                                                                                                                                                                                                                                                             | `["ALL"]`                    |
+| `externalDatabase.initDatabaseJob.containerSecurityContext.seccompProfile.type`      | Set init external database job containers' Security Context seccomp profile                                                                                                                                                                                                                                    | `RuntimeDefault`             |
+| `externalDatabase.initDatabaseJob.podSecurityContext.enabled`                        | Enabled init external database job pods' Security Context                                                                                                                                                                                                                                                      | `true`                       |
+| `externalDatabase.initDatabaseJob.podSecurityContext.fsGroupChangePolicy`            | Set filesystem group change policy                                                                                                                                                                                                                                                                             | `Always`                     |
+| `externalDatabase.initDatabaseJob.podSecurityContext.sysctls`                        | Set kernel settings using the sysctl interface                                                                                                                                                                                                                                                                 | `[]`                         |
+| `externalDatabase.initDatabaseJob.podSecurityContext.supplementalGroups`             | Set filesystem extra groups                                                                                                                                                                                                                                                                                    | `[]`                         |
+| `externalDatabase.initDatabaseJob.podSecurityContext.fsGroup`                        | Set init external database job pod's Security Context fsGroup                                                                                                                                                                                                                                                  | `1001`                       |
+| `externalDatabase.initDatabaseJob.resourcesPreset`                                   | Set init external database job container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if externalDatabase.initDatabaseJob.resources is set (externalDatabase.initDatabaseJob.resources is recommended for production). | `micro`                      |
+| `externalDatabase.initDatabaseJob.resources`                                         | Set init external database job container requests and limits for different resources like CPU or memory (essential for production workloads)                                                                                                                                                                   | `{}`                         |
+| `externalDatabase.initDatabaseJob.automountServiceAccountToken`                      | Mount Service Account token in external database job pod                                                                                                                                                                                                                                                       | `false`                      |
 
 The above parameters map to the env variables defined in [bitnami/seaweedfs](https://github.com/bitnami/containers/tree/main/bitnami/seaweedfs). For more information please refer to the [bitnami/seaweedfs](https://github.com/bitnami/containers/tree/main/bitnami/seaweedfs) image documentation.
 
@@ -1077,6 +1200,28 @@ helm install my-release -f values.yaml oci://REGISTRY_NAME/REPOSITORY_NAME/seawe
 
 ## Upgrading
 
+### To 4.2.0
+
+This version introduces image verification for security purposes. To disable it, set `global.security.allowInsecureImages` to `true`. More details at [GitHub issue](https://github.com/bitnami/charts/issues/30850).
+
+### To 4.0.0
+
+This major bump updates the MariaDB subchart to version 20.0.0. This subchart updates the StatefulSet objects `serviceName` to use a headless service, as the current non-headless service attached to it was not providing DNS entries. This will cause an upgrade issue because it changes "immutable fields". To workaround it, delete the StatefulSet objects as follows (replace the RELEASE_NAME placeholder):
+
+```shell
+kubectl delete sts RELEASE_NAME-mariadb --cascade=false
+```
+
+Then execute `helm upgrade` as usual.
+
+### To 3.0.0
+
+This major updates the PostgreSQL subchart to its newest major, 16.0.0, which uses PostgreSQL 17.x.  Follow the [official instructions](https://www.postgresql.org/docs/17/upgrading.html) to upgrade to 17.x.
+
+### To 2.0.0
+
+This major version adds support for using PostgreSQL as an alternative for MariaDB to comply with Filer database requirements. No breaking changes are expected when upgrading to this version if MariaDB is used.
+
 ### To 1.0.0
 
 This major release bumps the MariaDB version to 11.4. Follow the [upstream instructions](https://mariadb.com/kb/en/upgrading-from-mariadb-11-3-to-mariadb-11-4/) for upgrading from MariaDB 11.3 to 11.4. No major issues are expected during the upgrade.
diff --git a/helm/seaweedfs/charts/mariadb-19.1.2.tgz b/helm/seaweedfs/charts/mariadb-19.1.2.tgz
deleted file mode 100644
index 29320d7eda1da61e741e37bf561d470589afffb1..0000000000000000000000000000000000000000
Binary files a/helm/seaweedfs/charts/mariadb-19.1.2.tgz and /dev/null differ
diff --git a/helm/seaweedfs/charts/mariadb-20.2.1.tgz b/helm/seaweedfs/charts/mariadb-20.2.1.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..2f55cc750ba3907eebca3545636e8f9c8afd19d2
Binary files /dev/null and b/helm/seaweedfs/charts/mariadb-20.2.1.tgz differ
diff --git a/helm/seaweedfs/charts/postgresql-16.3.4.tgz b/helm/seaweedfs/charts/postgresql-16.3.4.tgz
new file mode 100644
index 0000000000000000000000000000000000000000..66db70566af3bfd481f39e80e83ff61e22b9d493
Binary files /dev/null and b/helm/seaweedfs/charts/postgresql-16.3.4.tgz differ
diff --git a/helm/seaweedfs/templates/NOTES.txt b/helm/seaweedfs/templates/NOTES.txt
index df098c41a1045331e3113ee269601e5efa72281c..341587f4d2e23e967b69ae0f81c2849fec8fb90d 100644
--- a/helm/seaweedfs/templates/NOTES.txt
+++ b/helm/seaweedfs/templates/NOTES.txt
@@ -1,6 +1,8 @@
-CHART NAME: {{ .Chart.Name  }}
-CHART VERSION: {{ .Chart.Version  }}
-APP VERSION: {{ .Chart.AppVersion  }}
+CHART NAME: {{ .Chart.Name }}
+CHART VERSION: {{ .Chart.Version }}
+APP VERSION: {{ .Chart.AppVersion }}
+
+Did you know there are enterprise versions of the Bitnami catalog? For enhanced secure software supply chain features, unlimited pulls from Docker, LTS support, or application customization, see Bitnami Premium or Tanzu Application Catalog. See https://www.arrow.com/globalecs/na/vendors/bitnami for more information.
 
 ** Please be patient while the chart is being deployed **
 
@@ -166,5 +168,8 @@ The chart was deployed enabling WebDAV, to access it from outside the cluster fo
 
 {{- include "common.warnings.rollingTag" .Values.image }}
 {{- include "common.warnings.rollingTag" .Values.volumePermissions.image }}
+{{- include "common.warnings.rollingTag" .Values.mariadb.image }}
+{{- include "common.warnings.rollingTag" .Values.postgresql.image }}
 {{- include "seaweedfs.validateValues" . }}
-{{- include "common.warnings.modifiedImages" (dict "images" (list .Values.image .Values.volumePermissions.image) "context" $) }}
\ No newline at end of file
+{{- include "common.warnings.modifiedImages" (dict "images" (list .Values.image .Values.volumePermissions.image .Values.mariadb.image .Values.postgresql.image) "context" $) }}
+{{- include "common.errors.insecureImages" (dict "images" (list .Values.image .Values.volumePermissions.image .Values.mariadb.image .Values.postgresql.image) "context" $) }}
diff --git a/helm/seaweedfs/templates/_helpers.tpl b/helm/seaweedfs/templates/_helpers.tpl
index 0c7e2361b969c13395a8187437455b243939db69..9f76dc6966ce3d40ec3337b4822f67a55702f52e 100644
--- a/helm/seaweedfs/templates/_helpers.tpl
+++ b/helm/seaweedfs/templates/_helpers.tpl
@@ -45,6 +45,13 @@ Return the proper SeaweedFS MariaDB database fullname
 {{- include "common.names.dependency.fullname" (dict "chartName" "mariadb" "chartValues" .Values.mariadb "context" $) -}}
 {{- end -}}
 
+{{/*
+Return the proper SeaweedFS PostgreSQL database fullname
+*/}}
+{{- define "seaweedfs.postgresql.fullname" -}}
+{{- include "common.names.dependency.fullname" (dict "chartName" "postgresql" "chartValues" .Values.postgresql "context" $) -}}
+{{- end -}}
+
 {{/*
 Return the proper SeaweedFS image name
 */}}
@@ -59,11 +66,22 @@ Return the proper image name (for the init container volume-permissions image)
 {{- include "common.images.image" ( dict "imageRoot" .Values.volumePermissions.image "global" .Values.global ) -}}
 {{- end -}}
 
+{{/*
+Return the proper init external database job image name
+*/}}
+{{- define "seaweedfs.initDatabaseJob.image" -}}
+{{- if or .Values.mariadb.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "mariadb") ) }}
+    {{- include "common.images.image" (dict "imageRoot" .Values.mariadb.image "global" .Values.global) -}}
+  {{- else if or .Values.postgresql.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "postgresql") ) }}
+    {{- include "common.images.image" (dict "imageRoot" .Values.postgresql.image "global" .Values.global) -}}
+{{- end -}}
+{{- end -}}
+
 {{/*
 Return the proper Docker Image Registry Secret Names
 */}}
 {{- define "seaweedfs.imagePullSecrets" -}}
-{{- include "common.images.renderPullSecrets" (dict "images" (list .Values.image .Values.volumePermissions.image) "context" $) -}}
+{{- include "common.images.renderPullSecrets" (dict "images" (list .Values.image .Values.volumePermissions.image .Values.mariadb.image .Values.postgresql.image) "context" $) -}}
 {{- end -}}
 
 {{/*
@@ -223,11 +241,17 @@ Return the database hostname
 */}}
 {{- define "seaweedfs.database.host" -}}
 {{- if .Values.mariadb.enabled }}
-    {{- if eq .Values.mariadb.architecture "replication" }}
+    {{- if eq .Values.mariadb.architecture "replication" -}}
         {{- printf "%s-primary" (include "seaweedfs.mariadb.fullname" .) | trunc 63 | trimSuffix "-" -}}
     {{- else -}}
         {{- print (include "seaweedfs.mariadb.fullname" .) -}}
     {{- end -}}
+{{- else if .Values.postgresql.enabled -}}
+    {{- if eq .Values.postgresql.architecture "replication" -}}
+        {{- printf "%s-primary" (include "seaweedfs.postgresql.fullname" .) | trunc 63 | trimSuffix "-" -}}
+    {{- else -}}
+        {{- print (include "seaweedfs.postgresql.fullname" .) -}}
+    {{- end -}}
 {{- else -}}
     {{- print .Values.externalDatabase.host -}}
 {{- end -}}
@@ -239,6 +263,8 @@ Return the database port
 {{- define "seaweedfs.database.port" -}}
 {{- if .Values.mariadb.enabled }}
     {{- print "3306" -}}
+{{- else if .Values.postgresql.enabled -}}
+    {{- print "5432" -}}
 {{- else -}}
     {{- printf "%d" (.Values.externalDatabase.port | int ) -}}
 {{- end -}}
@@ -250,6 +276,8 @@ Return the database name
 {{- define "seaweedfs.database.name" -}}
 {{- if .Values.mariadb.enabled }}
     {{- print .Values.mariadb.auth.database -}}
+{{- else if .Values.postgresql.enabled -}}
+    {{- coalesce (((.Values.global.postgresql).auth).database) .Values.postgresql.auth.database -}}
 {{- else -}}
     {{- print .Values.externalDatabase.database -}}
 {{- end -}}
@@ -261,6 +289,8 @@ Return the database user
 {{- define "seaweedfs.database.user" -}}
 {{- if .Values.mariadb.enabled }}
     {{- print .Values.mariadb.auth.username -}}
+{{- else if .Values.postgresql.enabled -}}
+    {{- coalesce (((.Values.global.postgresql).auth).username) .Values.postgresql.auth.username -}}
 {{- else -}}
     {{- print .Values.externalDatabase.user -}}
 {{- end -}}
@@ -276,6 +306,13 @@ Return the database secret name
     {{- else -}}
         {{- print (include "seaweedfs.mariadb.fullname" .) -}}
     {{- end -}}
+{{- else if .Values.postgresql.enabled -}}
+    {{- $existingSecret := coalesce (((.Values.global.postgresql).auth).existingSecret) .Values.postgresql.auth.existingSecret -}}
+    {{- if $existingSecret -}}
+        {{- print (tpl $existingSecret .) -}}
+    {{- else -}}
+        {{- print (include "seaweedfs.postgresql.fullname" .) -}}
+    {{- end -}}
 {{- else if .Values.externalDatabase.existingSecret -}}
     {{- print (tpl .Values.externalDatabase.existingSecret .) -}}
 {{- else -}}
@@ -283,13 +320,32 @@ Return the database secret name
 {{- end -}}
 {{- end -}}
 
+{{/*
+Return the database secret key name
+*/}}
+{{- define "seaweedfs.database.keyName" -}}
+{{- if .Values.mariadb.enabled }}
+    {{- print "mariadb-password" -}}
+{{- else if .Values.postgresql.enabled -}}
+    {{- print .Values.postgresql.auth.secretKeys.userPasswordKey -}}
+{{- else if .Values.externalDatabase.existingSecret -}}
+    {{- printf "%s-password" .Values.externalDatabase.store -}}
+{{- else -}}
+    {{- print "password" -}}
+{{- end -}}
+{{- end -}}
+
 {{/*
 Returns an init-container that waits for the database to be ready
 */}}
 {{- define "seaweedfs.filer.waitForDBInitContainer" -}}
 - name: wait-for-db
-  image: {{ include "common.images.image" (dict "imageRoot" .Values.mariadb.image "global" .Values.global) }}
+  image: {{ include "seaweedfs.initDatabaseJob.image" . }}
+  {{- if or .Values.mariadb.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "mariadb") ) }}
   imagePullPolicy: {{ .Values.mariadb.image.pullPolicy }}
+  {{- else if or .Values.postgresql.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "postgresql") ) }}
+  imagePullPolicy: {{ .Values.postgresql.image.pullPolicy }}
+  {{- end }}
   {{- if .Values.filer.containerSecurityContext.enabled }}
   securityContext: {{- include "common.compatibility.renderSecurityContext" (dict "secContext" .Values.filer.containerSecurityContext "context" $) | nindent 4 }}
   {{- end }}
@@ -298,21 +354,20 @@ Returns an init-container that waits for the database to be ready
   args:
     - -ec
     - |
-      #!/bin/bash
-
       set -o errexit
       set -o nounset
       set -o pipefail
 
       . /opt/bitnami/scripts/liblog.sh
-      . /opt/bitnami/scripts/libvalidations.sh
+      [[ -f $DATABASE_PASSWORD_FILE ]] && export DATABASE_PASSWORD="$(< "${DATABASE_PASSWORD_FILE}")"
+  {{- if or .Values.mariadb.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "mariadb") ) }}
       . /opt/bitnami/scripts/libmariadb.sh
       . /opt/bitnami/scripts/mariadb-env.sh
 
       info "Waiting for host $DATABASE_HOST"
       mariadb_is_ready() {
           if ! echo "select 1" | mysql_remote_execute "$DATABASE_HOST" "$DATABASE_PORT_NUMBER" "$DATABASE_NAME" "$DATABASE_USER" "$DATABASE_PASSWORD"; then
-             return 1
+              return 1
           fi
           return 0
       }
@@ -320,10 +375,24 @@ Returns an init-container that waits for the database to be ready
           error "Database not ready"
           exit 1
       fi
+  {{- else if or .Values.postgresql.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "postgresql") ) }}
+      . /opt/bitnami/scripts/libpostgresql.sh
+      . /opt/bitnami/scripts/postgresql-env.sh
+
+      info "Waiting for host $DATABASE_HOST"
+      postgresql_is_ready() {
+          if ! echo "SELECT 1" | postgresql_remote_execute "$DATABASE_HOST" "$DATABASE_PORT_NUMBER" "$DATABASE_NAME" "$DATABASE_USER" "$DATABASE_PASSWORD"; then
+              return 1
+          fi
+          return 0
+      }
+      if ! retry_while "postgresql_is_ready"; then
+          error "Database not ready"
+          exit 1
+      fi
+  {{- end }}
       info "Database is ready"
   env:
-    - name: BITNAMI_DEBUG
-      value: {{ ternary "true" "false" (or .Values.mariadb.image.debug .Values.diagnosticMode.enabled) | quote }}
     - name: DATABASE_HOST
       value: {{ include "seaweedfs.database.host" . | quote }}
     - name: DATABASE_PORT_NUMBER
@@ -332,24 +401,19 @@ Returns an init-container that waits for the database to be ready
       value: {{ include "seaweedfs.database.name" . | quote }}
     - name: DATABASE_USER
       value: {{ include "seaweedfs.database.user" . | quote }}
-    - name: DATABASE_PASSWORD
-      valueFrom:
-        secretKeyRef:
-          name: {{ include "seaweedfs.database.secretName" . }}
-          key: mariadb-password
-  resources:
-    requests:
-      cpu: 100m
-      memory: 128Mi
-      ephemeral-storage: 50Mi
-    limits:
-      cpu: 150m
-      memory: 192Mi
-      ephemeral-storage: 2Gi
+    - name: DATABASE_PASSWORD_FILE
+      value: "/secrets/password"
+  {{- if .Values.filer.resources }}
+  resources: {{- toYaml .Values.filer.resources | nindent 12 }}
+  {{- else if ne .Values.filer.resourcesPreset "none" }}
+  resources: {{- include "common.resources.preset" (dict "type" .Values.filer.resourcesPreset) | nindent 12 }}
+  {{- end }}
   volumeMounts:
     - name: empty-dir
       mountPath: /tmp
       subPath: tmp-dir
+    - name: db-credentials
+      mountPath: /secrets
 {{- end -}}
 
 {{/*
@@ -424,15 +488,11 @@ Returns an init-container that generates auth configuration for the Amazon S3 AP
         secretKeyRef:
           name: {{ printf "%s-auth" (include "seaweedfs.s3.fullname" .) }}
           key: read_secret_access_key
-  resources:
-    requests:
-      cpu: 100m
-      memory: 128Mi
-      ephemeral-storage: 50Mi
-    limits:
-      cpu: 150m
-      memory: 192Mi
-      ephemeral-storage: 2Gi
+  {{- if .Values.s3.resources }}
+  resources: {{- toYaml .Values.s3.resources | nindent 12 }}
+  {{- else if ne .Values.s3.resourcesPreset "none" }}
+  resources: {{- include "common.resources.preset" (dict "type" .Values.s3.resourcesPreset) | nindent 12 }}
+  {{- end }}
   volumeMounts:
     - name: empty-dir
       mountPath: /auth
@@ -555,11 +615,29 @@ volume.dataVolumes[]
 Validate values of SeaweedFS - Filer server database
 */}}
 {{- define "seaweedfs.validateValues.filer.database" -}}
-{{- if and (not .Values.filer.enabled) .Values.mariadb.enabled -}}
+{{- if not .Values.filer.enabled -}}
+  {{- if .Values.mariadb.enabled -}}
 mariadb.enabled
     The Filer Server is disabled, but the MariaDB dependency is enabled.
     Please enable the Filer Server (--set filer.enabled=true) or
     disable the MariaDB dependency (--set mariadb.enabled=false).
+  {{- end -}}
+  {{- if .Values.postgresql.enabled -}}
+postgresql.enabled
+    The Filer Server is disabled, but the PostgreSQL dependency is enabled.
+    Please enable the Filer Server (--set filer.enabled=true) or
+    disable the PostgreSQL dependency (--set postgresql.enabled=false).
+  {{- end -}}
+{{- else -}}
+  {{- if and .Values.mariadb.enabled .Values.postgresql.enabled -}}
+mariadb.enabled, postgresql.enabled
+    Both MariaDB and PostgreSQL dependencies are enabled. Only one database dependency can be enabled.
+    Please disable one of them (--set mariadb.enabled=false) or (--set postgresql.enabled=false).
+  {{- else if and (not .Values.mariadb.enabled) (not .Values.postgresql.enabled) (not .Values.externalDatabase.enabled) -}}
+mariadb.enabled, postgresql.enabled, externalDatabase.enabled
+    No database for Filer Server. Please provide a database dependency (--set mariadb.enabled=true),
+    (--set postgresql.enabled=true) or (--set externalDatabase.enabled=true).
+  {{- end -}}
 {{- end -}}
 {{- end -}}
 
diff --git a/helm/seaweedfs/templates/externaldb-secrets.yaml b/helm/seaweedfs/templates/externaldb-secrets.yaml
index 9c8c53bc2c3244c7df7633772979b23989270f04..e319218e0a7f458eb2410a26119aa96959fd0cb4 100644
--- a/helm/seaweedfs/templates/externaldb-secrets.yaml
+++ b/helm/seaweedfs/templates/externaldb-secrets.yaml
@@ -15,5 +15,5 @@ metadata:
   {{- end }}
 type: Opaque
 data:
-  mariadb-password: {{ .Values.externalDatabase.password | b64enc | quote }}
+  password: {{ .Values.externalDatabase.password | b64enc | quote }}
 {{- end }}
diff --git a/helm/seaweedfs/templates/filer/statefulset.yaml b/helm/seaweedfs/templates/filer/statefulset.yaml
index d1ddf3809a912854c970b99d56d76a23be2d7029..8a9c8b442a0dc5b4a2a5f400669d02469d92a7f9 100644
--- a/helm/seaweedfs/templates/filer/statefulset.yaml
+++ b/helm/seaweedfs/templates/filer/statefulset.yaml
@@ -34,9 +34,7 @@ spec:
         {{- if and .Values.filer.config (empty .Values.filer.existingConfigmap) }}
         checksum/config: {{ include (print $.Template.BasePath "/filer/configmap.yaml") . | sha256sum }}
         {{- end }}
-        {{- if .Values.security.enabled }}
         checksum/security-config: {{ include (print $.Template.BasePath "/security-configmap.yaml") . | sha256sum }}
-        {{- end }}
         {{- if .Values.filer.podAnnotations }}
         {{- include "common.tplvalues.render" (dict "value" .Values.filer.podAnnotations "context" $) | nindent 8 }}
         {{- end }}
@@ -85,9 +83,7 @@ spec:
       terminationGracePeriodSeconds: {{ .Values.filer.terminationGracePeriodSeconds }}
       {{- end }}
       initContainers:
-        {{- if .Values.mariadb.enabled }}
         {{- include "seaweedfs.filer.waitForDBInitContainer" . | nindent 8 }}
-        {{- end }}
         {{- if .Values.filer.initContainers }}
         {{- include "common.tplvalues.render" (dict "value" .Values.filer.initContainers "context" $) | nindent 8 }}
         {{- end }}
@@ -111,9 +107,7 @@ spec:
           args:
             - -logtostderr=true
             - -v={{ .Values.filer.logLevel }}
-            {{- if or .Values.security.enabled .Values.filer.config .Values.filer.existingConfigmap }}
             - -config_dir=/etc/seaweedfs
-            {{- end }}
             - filer
             - -ip.bind={{ .Values.filer.bindAddress }}
             - -ip=$(POD_NAME).{{ printf "%s-headless" (include "seaweedfs.filer.fullname" .) }}.$(NAMESPACE).svc.{{ .Values.clusterDomain }}
@@ -137,7 +131,7 @@ spec:
                   fieldPath: metadata.namespace
             - name: WEED_CLUSTER_DEFAULT
               value: {{ .Values.clusterDefault | quote }}
-            {{- if .Values.mariadb.enabled }}
+            {{- if or .Values.mariadb.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "mariadb") ) }}
             - name: WEED_MYSQL_ENABLED
               value: "true"
             - name: WEED_MYSQL_HOSTNAME
@@ -152,7 +146,7 @@ spec:
               valueFrom:
                 secretKeyRef:
                   name: {{ include "seaweedfs.database.secretName" . }}
-                  key: mariadb-password
+                  key: {{ include "seaweedfs.database.keyName" . }}
             - name: WEED_MYSQL_CONNECTION_MAX_IDLE
               value: "5"
             - name: WEED_MYSQL_CONNECTION_MAX_OPEN
@@ -162,6 +156,25 @@ spec:
             - name: WEED_MYSQL_INTERPOLATEPARAMS
               value: "true"
             {{- end }}
+            {{- if or .Values.postgresql.enabled (and .Values.externalDatabase.enabled (eq .Values.externalDatabase.store "postgresql") ) }}
+            - name: WEED_POSTGRES_ENABLED
+              value: "true"
+            - name: WEED_POSTGRES_HOSTNAME
+              value: {{ include "seaweedfs.database.host" . | quote }}
+            - name: WEED_POSTGRES_PORT
+              value: {{ include "seaweedfs.database.port" . | quote }}
+            - name: WEED_POSTGRES_DATABASE
+              value: {{ include "seaweedfs.database.name" . | quote }}
+            - name: WEED_POSTGRES_USERNAME
+              value: {{ include "seaweedfs.database.user" . | quote }}
+            - name: WEED_POSTGRES_PASSWORD
+              valueFrom:
+                secretKeyRef:
+                  name: {{ include "seaweedfs.database.secretName" . }}
+                  key: {{ include "seaweedfs.database.keyName" . }}
+            - name: WEED_POSTGRES_SSLMODE
+              value: "disable"
+            {{- end }}
             {{- if .Values.filer.extraEnvVars }}
             {{- include "common.tplvalues.render" (dict "value" .Values.filer.extraEnvVars "context" $) | nindent 12 }}
             {{- end }}
@@ -231,7 +244,6 @@ spec:
               subPath: filer.toml
               readOnly: true
             {{- end }}
-            {{- if .Values.security.enabled }}
             - name: security-config
               mountPath: /etc/seaweedfs/security.toml
               subPath: security.toml
@@ -253,7 +265,6 @@ spec:
               readOnly: true
               mountPath: /certs/client
             {{- end }}
-            {{- end }}
           {{- if .Values.filer.extraVolumeMounts }}
           {{- include "common.tplvalues.render" (dict "value" .Values.filer.extraVolumeMounts "context" $) | nindent 12 }}
           {{- end }}
@@ -263,12 +274,17 @@ spec:
       volumes:
         - name: empty-dir
           emptyDir: {}
+        - name: db-credentials
+          secret:
+            secretName: {{ include "seaweedfs.database.secretName" . }}
+            items:
+            - key: {{ include "seaweedfs.database.keyName" . }}
+              path: password
         {{- if or .Values.filer.config .Values.filer.existingConfigmap }}
         - name: config
           configMap:
             name: {{ template "seaweedfs.filer.configmapName" . }}
         {{- end }}
-        {{- if .Values.security.enabled }}
         - name: security-config
           configMap:
             name: {{ printf "%s-security" (include "common.names.fullname" .) }}
@@ -292,7 +308,6 @@ spec:
           secret:
             secretName: {{ template "seaweedfs.security.mTLS.client.secretName" . }}
         {{- end }}
-        {{- end }}
         {{- if .Values.filer.extraVolumes }}
         {{- include "common.tplvalues.render" (dict "value" .Values.filer.extraVolumes "context" $) | nindent 8 }}
         {{- end }}
diff --git a/helm/seaweedfs/templates/master/statefulset.yaml b/helm/seaweedfs/templates/master/statefulset.yaml
index c7e5a02e6804ac3304f17ab327d4ed70fe0e2859..22aa1180e8a0757bb55c4a63c52dfcb8f00e4284 100644
--- a/helm/seaweedfs/templates/master/statefulset.yaml
+++ b/helm/seaweedfs/templates/master/statefulset.yaml
@@ -33,9 +33,7 @@ spec:
         {{- if and .Values.master.config (empty .Values.master.existingConfigmap) }}
         checksum/config: {{ include (print $.Template.BasePath "/master/configmap.yaml") . | sha256sum }}
         {{- end }}
-        {{- if .Values.security.enabled }}
         checksum/security-config: {{ include (print $.Template.BasePath "/security-configmap.yaml") . | sha256sum }}
-        {{- end }}
         {{- if .Values.master.podAnnotations }}
         {{- include "common.tplvalues.render" (dict "value" .Values.master.podAnnotations "context" $) | nindent 8 }}
         {{- end }}
@@ -134,9 +132,7 @@ spec:
           args:
             - -logtostderr=true
             - -v={{ .Values.master.logLevel }}
-            {{- if or .Values.security.enabled .Values.master.config .Values.master.existingConfigmap }}
             - -config_dir=/etc/seaweedfs
-            {{- end }}
             - master
             - -mdir={{ .Values.master.persistence.mountPath }}
             - -ip.bind={{ .Values.master.bindAddress }}
@@ -147,6 +143,7 @@ spec:
             {{- if .Values.master.metrics.enabled }}
             - -metricsPort={{ .Values.master.containerPorts.metrics }}
             {{- end }}
+            - -volumeSizeLimitMB={{ .Values.master.volumeSizeLimitMB }}
           {{- end }}
           env:
             - name: BITNAMI_DEBUG
@@ -235,7 +232,6 @@ spec:
               subPath: master.toml
               readOnly: true
             {{- end }}
-            {{- if .Values.security.enabled }}
             - name: security-config
               mountPath: /etc/seaweedfs/security.toml
               subPath: security.toml
@@ -259,7 +255,6 @@ spec:
               readOnly: true
               mountPath: /certs/client
             {{- end }}
-            {{- end }}
           {{- if .Values.master.extraVolumeMounts }}
           {{- include "common.tplvalues.render" (dict "value" .Values.master.extraVolumeMounts "context" $) | nindent 12 }}
           {{- end }}
@@ -274,7 +269,6 @@ spec:
           configMap:
             name: {{ template "seaweedfs.master.configmapName" . }}
         {{- end }}
-        {{- if .Values.security.enabled }}
         - name: security-config
           configMap:
             name: {{ printf "%s-security" (include "common.names.fullname" .) }}
@@ -300,7 +294,6 @@ spec:
           secret:
             secretName: {{ template "seaweedfs.security.mTLS.client.secretName" . }}
         {{- end }}
-        {{- end }}
         {{- if .Values.master.extraVolumes }}
         {{- include "common.tplvalues.render" (dict "value" .Values.master.extraVolumes "context" $) | nindent 8 }}
         {{- end }}
@@ -312,8 +305,15 @@ spec:
           persistentVolumeClaim:
             claimName: {{ .Values.master.persistence.existingClaim }}
   {{- else }}
+  {{- if .Values.master.persistentVolumeClaimRetentionPolicy.enabled }}
+  persistentVolumeClaimRetentionPolicy:
+    whenDeleted: {{ .Values.master.persistentVolumeClaimRetentionPolicy.whenDeleted }}
+    whenScaled: {{ .Values.master.persistentVolumeClaimRetentionPolicy.whenScaled }}
+  {{- end }}
   volumeClaimTemplates:
-    - metadata:
+    - apiVersion: v1
+      kind: PersistentVolumeClaim
+      metadata:
         name: data
         {{- if or .Values.master.persistence.annotations .Values.commonAnnotations }}
         {{- $claimAnnotations := include "common.tplvalues.merge" (dict "values" .Values.master.persistence.annotations .Values.commonAnnotations "context" .) | fromYaml }}
diff --git a/helm/seaweedfs/templates/s3/deployment.yaml b/helm/seaweedfs/templates/s3/deployment.yaml
index 7d3888720085c9cdf7409724cb24c44f19ed38d6..94bdbe54fab4adc521c59352652da45eb1f35e00 100644
--- a/helm/seaweedfs/templates/s3/deployment.yaml
+++ b/helm/seaweedfs/templates/s3/deployment.yaml
@@ -32,9 +32,7 @@ spec:
         {{- if and .Values.s3.auth.enabled (not .Values.s3.auth.existingSecret) }}
         checksum/auth-secret: {{ include (print $.Template.BasePath "/s3/auth-secret.yaml") . | sha256sum }}
         {{- end }}
-        {{- if .Values.security.enabled }}
         checksum/security-config: {{ include (print $.Template.BasePath "/security-configmap.yaml") . | sha256sum }}
-        {{- end }}
         {{- if .Values.s3.podAnnotations }}
         {{- include "common.tplvalues.render" (dict "value" .Values.s3.podAnnotations "context" $) | nindent 8 }}
         {{- end }}
@@ -190,17 +188,18 @@ spec:
               mountPath: /tmp
               subPath: tmp-dir
             {{- if .Values.s3.auth.enabled }}
-            - mountPath: /auth
-              readOnly: true
             {{- if .Values.s3.auth.existingSecret }}
+            - mountPath: {{ printf "/auth/%s" (default "config.json" .Values.s3.auth.existingSecretConfigKey) }}
+              readOnly: true
               name: auth
               subPath: {{ default "config.json" .Values.s3.auth.existingSecretConfigKey }}
             {{- else }}
+            - mountPath: /auth
+              readOnly: true
               name: empty-dir
               subPath: auth-dir
             {{- end }}
             {{- end }}
-            {{- if .Values.security.enabled }}
             - name: security-config
               mountPath: /etc/seaweedfs/security.toml
               subPath: security.toml
@@ -222,7 +221,6 @@ spec:
               readOnly: true
               mountPath: /certs/client
             {{- end }}
-            {{- end }}
           {{- if .Values.s3.extraVolumeMounts }}
           {{- include "common.tplvalues.render" (dict "value" .Values.s3.extraVolumeMounts "context" $) | nindent 12 }}
           {{- end }}
@@ -237,7 +235,6 @@ spec:
           secret:
             secretName: {{ print (tpl .Values.s3.auth.existingSecret .) }}
         {{- end }}
-        {{- if .Values.security.enabled }}
         - name: security-config
           configMap:
             name: {{ printf "%s-security" (include "common.names.fullname" .) }}
@@ -261,7 +258,6 @@ spec:
           secret:
             secretName: {{ template "seaweedfs.security.mTLS.client.secretName" . }}
         {{- end }}
-        {{- end }}
         {{- if .Values.s3.extraVolumes }}
         {{- include "common.tplvalues.render" (dict "value" .Values.s3.extraVolumes "context" $) | nindent 8 }}
         {{- end }}
diff --git a/helm/seaweedfs/templates/security-configmap.yaml b/helm/seaweedfs/templates/security-configmap.yaml
index bc3fa2e1ad57e2912acf5bd536539ca6427a5170..9c6d1bcc1d98444d9e6c63802d13c1752530d246 100644
--- a/helm/seaweedfs/templates/security-configmap.yaml
+++ b/helm/seaweedfs/templates/security-configmap.yaml
@@ -3,7 +3,6 @@ Copyright Broadcom, Inc. All Rights Reserved.
 SPDX-License-Identifier: APACHE-2.0
 */}}
 
-{{- if .Values.security.enabled }}
 apiVersion: v1
 kind: ConfigMap
 metadata:
@@ -17,7 +16,7 @@ data:
   security.toml: |-
     # Security configuration
     # Shared between master, volume and filer servers
-
+  {{- if .Values.security.enabled }}
     # comma separated origins allowed to make requests to the filer and s3 gateway. 
     # enter in this format: https://domain.com, or http://localhost:port
     [cors.allowed_origins]
@@ -86,4 +85,9 @@ data:
     cert = "/certs/client/tls.crt"
     key  = "/certs/client/tls.key"
     {{- end }}
-{{- end }}
+  {{- else }}
+    # comma separated origins allowed to make requests to the filer and s3 gateway. 
+    # enter in this format: https://domain.com, or http://localhost:port
+    [cors.allowed_origins]
+    values = "*"
+  {{- end }}
diff --git a/helm/seaweedfs/templates/volume/statefulset.yaml b/helm/seaweedfs/templates/volume/statefulset.yaml
index 42c268d2f3f3c1a38fc98c2295ad76c6a4c07605..3ba977a7724c8c8c460f7dee623a906b72bf5695 100644
--- a/helm/seaweedfs/templates/volume/statefulset.yaml
+++ b/helm/seaweedfs/templates/volume/statefulset.yaml
@@ -33,9 +33,7 @@ spec:
         {{- if and .Values.volume.config (empty .Values.volume.existingConfigmap) }}
         checksum/config: {{ include (print $.Template.BasePath "/volume/configmap.yaml") . | sha256sum }}
         {{- end }}
-        {{- if .Values.security.enabled }}
         checksum/security-config: {{ include (print $.Template.BasePath "/security-configmap.yaml") . | sha256sum }}
-        {{- end }}
         {{- if .Values.volume.podAnnotations }}
         {{- include "common.tplvalues.render" (dict "value" .Values.volume.podAnnotations "context" $) | nindent 8 }}
         {{- end }}
@@ -139,15 +137,20 @@ spec:
           args:
             - -logtostderr=true
             - -v={{ .Values.volume.logLevel }}
-            {{- if or .Values.security.enabled .Values.volume.config .Values.volume.existingConfigmap }}
             - -config_dir=/etc/seaweedfs
-            {{- end }}
             - volume
             {{- $dataDirs := list }}
+            {{- $maxVolumes := list }}
             {{- range .Values.volume.dataVolumes }}
             {{- $dataDirs = append $dataDirs .mountPath }}
+            {{- if eq (.maxVolumes | toString) "0" }}
+            {{- $maxVolumes = append $maxVolumes 0 }}
+            {{- else }}
+            {{- $maxVolumes = append $maxVolumes (default 8 .maxVolumes) }}
+            {{- end }}
             {{- end }}
             - -dir={{ join "," $dataDirs }}
+            - -max={{ join "," $maxVolumes }}
             - -ip.bind={{ .Values.volume.bindAddress }}
             - -ip=$(POD_NAME).{{ printf "%s-headless" (include "seaweedfs.volume.fullname" .) }}.$(NAMESPACE).svc.{{ .Values.clusterDomain }}
             - -port={{ .Values.volume.containerPorts.http }}
@@ -248,7 +251,6 @@ spec:
               subPath: volume.toml
               readOnly: true
             {{- end }}
-            {{- if .Values.security.enabled }}
             - name: security-config
               mountPath: /etc/seaweedfs/security.toml
               subPath: security.toml
@@ -272,7 +274,6 @@ spec:
               readOnly: true
               mountPath: /certs/client
             {{- end }}
-            {{- end }}
           {{- if .Values.volume.extraVolumeMounts }}
           {{- include "common.tplvalues.render" (dict "value" .Values.volume.extraVolumeMounts "context" $) | nindent 12 }}
           {{- end }}
@@ -287,7 +288,6 @@ spec:
           configMap:
             name: {{ template "seaweedfs.volume.configmapName" . }}
         {{- end }}
-        {{- if .Values.security.enabled }}
         - name: security-config
           configMap:
             name: {{ printf "%s-security" (include "common.names.fullname" .) }}
@@ -313,7 +313,6 @@ spec:
           secret:
             secretName: {{ template "seaweedfs.security.mTLS.client.secretName" . }}
         {{- end }}
-        {{- end }}
         {{- if .Values.volume.extraVolumes }}
         {{- include "common.tplvalues.render" (dict "value" .Values.volume.extraVolumes "context" $) | nindent 8 }}
         {{- end }}
@@ -327,10 +326,17 @@ spec:
             claimName: {{ .persistence.existingClaim }}
         {{- end }}
         {{- end }}
+  {{- if .Values.volume.persistentVolumeClaimRetentionPolicy.enabled }}
+  persistentVolumeClaimRetentionPolicy:
+    whenDeleted: {{ .Values.volume.persistentVolumeClaimRetentionPolicy.whenDeleted }}
+    whenScaled: {{ .Values.volume.persistentVolumeClaimRetentionPolicy.whenScaled }}
+  {{- end }}
   volumeClaimTemplates:
   {{- range .Values.volume.dataVolumes }}
   {{- if and .persistence.enabled (not .persistence.existingClaim) }}
-    - metadata:
+    - apiVersion: v1
+      kind: PersistentVolumeClaim
+      metadata:
         name: {{ .name }}
         {{- if or .persistence.annotations $.Values.commonAnnotations }}
         {{- $claimAnnotations := include "common.tplvalues.merge" (dict "values" .persistence.annotations $.Values.commonAnnotations "context" $) | fromYaml }}
diff --git a/helm/seaweedfs/templates/webadv/deployment.yaml b/helm/seaweedfs/templates/webadv/deployment.yaml
index aec31081bf24fe9a0f35439b8aea090aa515b972..f698cef1641b21391df33354ef35e4ff6b9b237d 100644
--- a/helm/seaweedfs/templates/webadv/deployment.yaml
+++ b/helm/seaweedfs/templates/webadv/deployment.yaml
@@ -29,9 +29,7 @@ spec:
   template:
     metadata:
       annotations:
-        {{- if .Values.security.enabled }}
         checksum/security-config: {{ include (print $.Template.BasePath "/security-configmap.yaml") . | sha256sum }}
-        {{- end }}
         {{- if .Values.webdav.podAnnotations }}
         {{- include "common.tplvalues.render" (dict "value" .Values.webdav.podAnnotations "context" $) | nindent 8 }}
         {{- end }}
@@ -183,7 +181,6 @@ spec:
               mountPath: /certs/tls
               readOnly: true
             {{- end }}
-            {{- if .Values.security.enabled }}
             - name: security-config
               mountPath: /etc/seaweedfs/security.toml
               subPath: security.toml
@@ -205,7 +202,6 @@ spec:
               readOnly: true
               mountPath: /certs/client
             {{- end }}
-            {{- end }}
           {{- if .Values.webdav.extraVolumeMounts }}
           {{- include "common.tplvalues.render" (dict "value" .Values.webdav.extraVolumeMounts "context" $) | nindent 12 }}
           {{- end }}
@@ -220,7 +216,6 @@ spec:
           secret:
             secretName: {{ template "seaweedfs.webdav.tls.secretName" . }}
         {{- end }}
-        {{- if .Values.security.enabled }}
         - name: security-config
           configMap:
             name: {{ printf "%s-security" (include "common.names.fullname" .) }}
@@ -244,7 +239,6 @@ spec:
           secret:
             secretName: {{ template "seaweedfs.security.mTLS.client.secretName" . }}
         {{- end }}
-        {{- end }}
         {{- if .Values.webdav.extraVolumes }}
         {{- include "common.tplvalues.render" (dict "value" .Values.webdav.extraVolumes "context" $) | nindent 8 }}
         {{- end }}
diff --git a/helm/seaweedfs/values.yaml b/helm/seaweedfs/values.yaml
index 1b03bda9907ecf3a2a5d97f5b6c1f8483d8f540b..cbe833459d19a54b31f90cbfe31fc1e7569f695e 100644
--- a/helm/seaweedfs/values.yaml
+++ b/helm/seaweedfs/values.yaml
@@ -10,7 +10,6 @@
 ## @param global.imageRegistry Global Docker image registry
 ## @param global.imagePullSecrets Global Docker registry secret names as an array
 ## @param global.defaultStorageClass Global default StorageClass for Persistent Volume(s)
-## @param global.storageClass DEPRECATED: use global.defaultStorageClass instead
 ##
 global:
   imageRegistry: ""
@@ -20,7 +19,11 @@ global:
   ##
   imagePullSecrets: []
   defaultStorageClass: ""
-  storageClass: ""
+  ## Security parameters
+  ##
+  security:
+    ## @param global.security.allowInsecureImages Allows skipping image verification
+    allowInsecureImages: false
   ## Compatibility adaptations for Kubernetes platforms
   ##
   compatibility:
@@ -82,10 +85,9 @@ diagnosticMode:
 image:
   registry: docker.io
   repository: bitnami/seaweedfs
-  tag: 3.71.0-debian-12-r0
+  tag: 3.80.0-debian-12-r1
   digest: ""
   ## Specify a imagePullPolicy
-  ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent'
   ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images
   ##
   pullPolicy: IfNotPresent
@@ -318,6 +320,9 @@ master:
   ## @param master.bindAddress Master Server bind address
   ##
   bindAddress: 0.0.0.0
+  ## @param master.volumeSizeLimitMB Limit (in MB) to stop directing writes to oversized volumes
+  ##
+  volumeSizeLimitMB: 1000
   ## @param master.config Master Server configuration
   ## Specify content for master.yml
   ##
@@ -338,7 +343,7 @@ master:
   ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
   ##
   hostAliases: []
-  ## @param master.statefulsetAnnotations Annotations for Master Server statefulset
+  ## @param master.statefulsetAnnotations Annotations for Master Server StatefulSet
   ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
   ##
   statefulsetAnnotations: {}
@@ -388,14 +393,14 @@ master:
   ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
   ##
   tolerations: []
-  ## @param master.updateStrategy.type Master Server statefulset strategy type
+  ## @param master.updateStrategy.type Master Server StatefulSet strategy type
   ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies
   ##
   updateStrategy:
     ## Can be set to RollingUpdate or OnDelete
     ##
     type: RollingUpdate
-  ## @param master.podManagementPolicy Pod management policy for Master Server statefulset
+  ## @param master.podManagementPolicy Pod management policy for Master Server StatefulSet
   ## Ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies
   ##
   podManagementPolicy: Parallel
@@ -756,6 +761,16 @@ master:
     ## @param master.persistence.dataSource Custom PVC data source
     ##
     dataSource: {}
+  ## persistentVolumeClaimRetentionPolicy
+  ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention
+  ## @param master.persistentVolumeClaimRetentionPolicy.enabled Controls if and how PVCs are deleted during the lifecycle of the Master Server StatefulSet
+  ## @param master.persistentVolumeClaimRetentionPolicy.whenScaled Volume retention behavior when the replica count of the StatefulSet is reduced
+  ## @param master.persistentVolumeClaimRetentionPolicy.whenDeleted Volume retention behavior that applies when the StatefulSet is deleted
+  ##
+  persistentVolumeClaimRetentionPolicy:
+    enabled: false
+    whenScaled: Retain
+    whenDeleted: Retain
 
   ## @section Master Server Metrics Parameters
   ##
@@ -978,7 +993,7 @@ volume:
   ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
   ##
   hostAliases: []
-  ## @param volume.statefulsetAnnotations Annotations for Volume Server statefulset
+  ## @param volume.statefulsetAnnotations Annotations for Volume Server StatefulSet
   ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
   ##
   statefulsetAnnotations: {}
@@ -1028,14 +1043,14 @@ volume:
   ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
   ##
   tolerations: []
-  ## @param volume.updateStrategy.type Volume Server statefulset strategy type
+  ## @param volume.updateStrategy.type Volume Server StatefulSet strategy type
   ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies
   ##
   updateStrategy:
     ## Can be set to RollingUpdate or OnDelete
     ##
     type: RollingUpdate
-  ## @param volume.podManagementPolicy Pod management policy for Volume Server statefulset
+  ## @param volume.podManagementPolicy Pod management policy for Volume Server StatefulSet
   ## Ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies
   ##
   podManagementPolicy: Parallel
@@ -1362,6 +1377,11 @@ volume:
       ## @param volume.dataVolumes[0].subPath The subdirectory of the volume to mount to, useful in dev environments and one PV for multiple services
       ##
       subPath: ""
+      ## @param volume.dataVolumes[0].maxVolumes Max number of SeaweedFS volumes this data volume can be divided into. If set to 0, the limit will be auto configured as free disk space divided by default volume size (30GB)
+      ## ref: https://github.com/seaweedfs/seaweedfs/wiki/FAQ#how-many-volumes-do-i-need
+      ## ref: https://github.com/seaweedfs/seaweedfs/blob/master/weed/util/constants_4bytes.go#L8
+      ##
+      maxVolumes: 8
       ## Enable persistence using Persistent Volume Claims
       ## ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
       ##
@@ -1401,6 +1421,16 @@ volume:
         ## @param volume.dataVolumes[0].persistence.dataSource Custom PVC data source
         ##
         dataSource: {}
+  ## persistentVolumeClaimRetentionPolicy
+  ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#persistentvolumeclaim-retention
+  ## @param volume.persistentVolumeClaimRetentionPolicy.enabled Controls if and how PVCs are deleted during the lifecycle of the Volume Server StatefulSet
+  ## @param volume.persistentVolumeClaimRetentionPolicy.whenScaled Volume retention behavior when the replica count of the StatefulSet is reduced
+  ## @param volume.persistentVolumeClaimRetentionPolicy.whenDeleted Volume retention behavior that applies when the StatefulSet is deleted
+  ##
+  persistentVolumeClaimRetentionPolicy:
+    enabled: false
+    whenScaled: Retain
+    whenDeleted: Retain
 
   ## @section Volume Server Metrics Parameters
   ##
@@ -1625,7 +1655,7 @@ filer:
   ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/
   ##
   hostAliases: []
-  ## @param filer.statefulsetAnnotations Annotations for Filer Server statefulset
+  ## @param filer.statefulsetAnnotations Annotations for Filer Server StatefulSet
   ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/
   ##
   statefulsetAnnotations: {}
@@ -1675,14 +1705,14 @@ filer:
   ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/
   ##
   tolerations: []
-  ## @param filer.updateStrategy.type Filer Server statefulset strategy type
+  ## @param filer.updateStrategy.type Filer Server StatefulSet strategy type
   ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies
   ##
   updateStrategy:
     ## Can be set to RollingUpdate or OnDelete
     ##
     type: RollingUpdate
-  ## @param filer.podManagementPolicy Pod management policy for Filer Server statefulset
+  ## @param filer.podManagementPolicy Pod management policy for Filer Server StatefulSet
   ## Ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#pod-management-policies
   ##
   podManagementPolicy: Parallel
@@ -3215,7 +3245,7 @@ volumePermissions:
   image:
     registry: docker.io
     repository: bitnami/os-shell
-    tag: 12-debian-12-r25
+    tag: 12-debian-12-r33
     pullPolicy: IfNotPresent
     ## Optionally specify an array of imagePullSecrets.
     ## Secrets must be manually created in the namespace.
@@ -3274,7 +3304,7 @@ serviceAccount:
   annotations: {}
   ## @param serviceAccount.automountServiceAccountToken Automount service account token for the server service account
   ##
-  automountServiceAccountToken: true
+  automountServiceAccountToken: false
 
 ## @section Database Parameters
 ##
@@ -3287,6 +3317,31 @@ mariadb:
   ## To use an external database set this to false and configure the `externalDatabase.*` parameters
   ##
   enabled: true
+  ## Bitnami MariaDB image
+  ## ref: https://github.com/bitnami/containers/tree/main/bitnami/mariadb
+  ## @param mariadb.image.registry [default: REGISTRY_NAME] MariaDB image registry
+  ## @param mariadb.image.repository [default: REPOSITORY_NAME/mariadb] MariaDB image repository
+  ## @skip mariadb.image.tag MariaDB image tag (immutable tags are recommended)
+  ## @param mariadb.image.digest MariaDB image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
+  ## @param mariadb.image.pullPolicy MariaDB image pull policy
+  ## @param mariadb.image.pullSecrets Specify docker-registry secret names as an array
+  ##
+  image:
+    registry: docker.io
+    repository: bitnami/mariadb
+    tag: 11.4.4-debian-12-r1
+    digest: ""
+    ## Specify a imagePullPolicy
+    ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images
+    ##
+    pullPolicy: IfNotPresent
+    ## Optionally specify an array of imagePullSecrets (secrets must be manually created in the namespace)
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+    ## Example:
+    ## pullSecrets:
+    ##   - myRegistryKeySecretName
+    ##
+    pullSecrets: []
   ## @param mariadb.architecture MariaDB architecture. Allowed values: `standalone` or `replication`
   ##
   architecture: standalone
@@ -3311,7 +3366,7 @@ mariadb:
   initdbScripts:
     create_table.sql: |
       USE bitnami_seaweedfs;
-      CREATE TABLE IF NOT EXISTS `filemeta` (
+      CREATE TABLE IF NOT EXISTS filemeta (
         `dirhash`   BIGINT NOT NULL       COMMENT 'first 64 bits of MD5 hash value of directory field',
         `name`      VARCHAR(766) NOT NULL COMMENT 'directory or file name',
         `directory` TEXT NOT NULL         COMMENT 'full path to parent directory',
@@ -3355,13 +3410,114 @@ mariadb:
     ##     memory: 1024Mi
     ##
     resources: {}
+## PostgresSQL chart configuration
+## ref: https://github.com/bitnami/charts/blob/main/bitnami/postgresql/values.yaml
+##
+postgresql:
+  ## @param postgresql.enabled Deploy a PostgresSQL server to satisfy the Filer server database requirements
+  ## To use an external database set this to false and configure the `externalDatabase.*` parameters
+  ##
+  enabled: false
+  ## Bitnami PostgreSQL image version
+  ## ref: https://github.com/bitnami/containers/tree/main/bitnami/postgresql
+  ## @param postgresql.image.registry [default: REGISTRY_NAME] PostgreSQL image registry
+  ## @param postgresql.image.repository [default: REPOSITORY_NAME/postgresql] PostgreSQL image repository
+  ## @skip postgresql.image.tag PostgreSQL image tag (immutable tags are recommended)
+  ## @param postgresql.image.digest PostgreSQL image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag
+  ## @param postgresql.image.pullPolicy PostgreSQL image pull policy
+  ## @param postgresql.image.pullSecrets Specify image pull secrets
+  ##
+  image:
+    registry: docker.io
+    repository: bitnami/postgresql
+    tag: 17.2.0-debian-12-r2
+    digest: ""
+    ## Specify a imagePullPolicy
+    ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images
+    ##
+    pullPolicy: IfNotPresent
+    ## Optionally specify an array of imagePullSecrets.
+    ## Secrets must be manually created in the namespace.
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
+    ## Example:
+    ## pullSecrets:
+    ##   - myRegistryKeySecretName
+    ##
+    pullSecrets: []
+  ## @param postgresql.architecture PostgreSQL architecture (`standalone` or `replication`)
+  ##
+  architecture: standalone
+  ## @param postgresql.auth.postgresPassword Password for the "postgres" admin user. Ignored if `auth.existingSecret` with key `postgres-password` is provided
+  ## @param postgresql.auth.database Name for a custom database to create
+  ## @param postgresql.auth.username Name for a custom user to create
+  ## @param postgresql.auth.password Password for the custom user to create
+  ## @param postgresql.auth.existingSecret Name of existing secret to use for PostgreSQL credentials
+  ## @param postgresql.auth.secretKeys.userPasswordKey Name of key in existing secret to use for PostgreSQL credentials. Only used when `auth.existingSecret` is set.
+  auth:
+    postgresPassword: ""
+    database: bitnami_seaweedfs
+    username: bn_seaweedfs
+    password: some-password
+    existingSecret: ""
+    secretKeys:
+      userPasswordKey: password
+  ## PostgreSQL Primary configuration
+  ##
+  primary:
+    ## PostgreSQL Primary resource requests and limits
+    ## ref: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
+    ## @param postgresql.primary.resourcesPreset Set container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if postgresql.primary.resources is set (postgresql.primary.resources is recommended for production).
+    ## More information: https://github.com/bitnami/charts/blob/main/bitnami/common/templates/_resources.tpl#L15
+    ##
+    resourcesPreset: "nano"
+    ## @param postgresql.primary.resources Set container requests and limits for different resources like CPU or memory (essential for production workloads)
+    ## Example:
+    ## resources:
+    ##   requests:
+    ##     cpu: 2
+    ##     memory: 512Mi
+    ##   limits:
+    ##     cpu: 3
+    ##     memory: 1024Mi
+    ##
+    resources: {}
+    ## @param postgresql.primary.initdb.scripts [object] Dictionary of initdb scripts
+    ##
+    initdb:
+      scripts:
+        create_table.sql: |
+          \c bitnami_seaweedfs;
+          CREATE TABLE IF NOT EXISTS filemeta (
+            dirhash     BIGINT,
+            name        VARCHAR(65535),
+            directory   VARCHAR(65535),
+            meta        bytea,
+            PRIMARY KEY (dirhash, name)
+          );
+    ## PostgreSQL Primary Persistence parameters
+    ## ref: https://kubernetes.io/docs/concepts/storage/persistent-volumes/
+    ## @param postgresql.primary.persistence.enabled Enable PostgreSQL Primary data persistence using PVC(s)
+    ## @param postgresql.primary.persistence.storageClass Persistent Volume storage class
+    ## @param postgresql.primary.persistence.accessModes [array] Persistent Volume access modes
+    ## @param postgresql.primary.persistence.size Persistent Volume size
+    ##
+    persistence:
+      enabled: true
+      storageClass: ""
+      accessModes:
+        - ReadWriteOnce
+      size: 8Gi
+
 ## External Database Configuration
-## All of these values are only used if `mariadb.enabled=false`
+## All of these values are only used if `mariadb.enabled=false` and `externalDatabase.enabled=true`.
 ##
 externalDatabase:
-  ## @param externalDatabase.enabled Enable secret with external mariadb database credentials
+  ## @param externalDatabase.enabled Enable external database support
   ##
   enabled: false
+  ## @param externalDatabase.store Database store (mariadb, postgresql)
+  ##
+  store: mariadb
   ## @param externalDatabase.host External Database server host
   ##
   host: localhost
@@ -3378,7 +3534,84 @@ externalDatabase:
   ##
   database: bitnami_seaweedfs
   ## @param externalDatabase.existingSecret The name of an existing secret with database credentials. Evaluated as a template
-  ## NOTE: Must contain key `mariadb-password`
+  ## NOTE: Must contain key `mariadb-password` for mariadb or 'postgres-password' for postgres
   ## NOTE: When it's set, the `externalDatabase.password` parameter is ignored
   ##
   existingSecret: ""
+  ## Init external database job
+  ##
+  initDatabaseJob:
+    ## @param externalDatabase.initDatabaseJob.enabled Enable the init external database job
+    ##
+    enabled: false
+    ## @param externalDatabase.initDatabaseJob.labels Extra labels for the init external database job
+    ##
+    labels: {}
+    ## @param externalDatabase.initDatabaseJob.annotations [object] Extra annotations for the init external database job
+    ##
+    annotations:
+      helm.sh/hook: post-install
+      helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
+    ## @param externalDatabase.initDatabaseJob.backoffLimit Set backoff limit of the init external database job
+    ##
+    backoffLimit: 10
+    ## Configure Container Security Context
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.enabled Enabled init external database job containers' Security Context
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in container
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.runAsUser Set init external database job containers' Security Context runAsUser
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.runAsGroup Set init external database job containers' Security Context runAsGroup
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.runAsNonRoot Set init external database job containers' Security Context runAsNonRoot
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.privileged Set init external database job containers' Security Context privileged
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.readOnlyRootFilesystem Set init external database job containers' Security Context readOnlyRootFilesystem
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.allowPrivilegeEscalation Set init external database job containers' Security Context allowPrivilegeEscalation
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.capabilities.drop List of capabilities to be dropped
+    ## @param externalDatabase.initDatabaseJob.containerSecurityContext.seccompProfile.type Set init external database job containers' Security Context seccomp profile
+    ##
+    containerSecurityContext:
+      enabled: true
+      seLinuxOptions: {}
+      runAsUser: 1001
+      runAsGroup: 1001
+      runAsNonRoot: true
+      privileged: false
+      readOnlyRootFilesystem: true
+      allowPrivilegeEscalation: false
+      capabilities:
+        drop: ["ALL"]
+      seccompProfile:
+        type: "RuntimeDefault"
+    ## Configure Pods Security Context
+    ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod
+    ## @param externalDatabase.initDatabaseJob.podSecurityContext.enabled Enabled init external database job pods' Security Context
+    ## @param externalDatabase.initDatabaseJob.podSecurityContext.fsGroupChangePolicy Set filesystem group change policy
+    ## @param externalDatabase.initDatabaseJob.podSecurityContext.sysctls Set kernel settings using the sysctl interface
+    ## @param externalDatabase.initDatabaseJob.podSecurityContext.supplementalGroups Set filesystem extra groups
+    ## @param externalDatabase.initDatabaseJob.podSecurityContext.fsGroup Set init external database job pod's Security Context fsGroup
+    ##
+    podSecurityContext:
+      enabled: true
+      fsGroupChangePolicy: Always
+      sysctls: []
+      supplementalGroups: []
+      fsGroup: 1001
+    ## Container resource requests and limits
+    ## ref: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
+    ## @param externalDatabase.initDatabaseJob.resourcesPreset Set init external database job container resources according to one common preset (allowed values: none, nano, micro, small, medium, large, xlarge, 2xlarge). This is ignored if externalDatabase.initDatabaseJob.resources is set (externalDatabase.initDatabaseJob.resources is recommended for production).
+    ## More information: https://github.com/bitnami/charts/blob/main/bitnami/common/templates/_resources.tpl#L15
+    ##
+    resourcesPreset: "micro"
+    ## @param externalDatabase.initDatabaseJob.resources Set init external database job container requests and limits for different resources like CPU or memory (essential for production workloads)
+    ## Example:
+    ## resources:
+    ##   requests:
+    ##     cpu: 2
+    ##     memory: 512Mi
+    ##   limits:
+    ##     cpu: 3
+    ##     memory: 1024Mi
+    ##
+    resources: {}
+    ## @param externalDatabase.initDatabaseJob.automountServiceAccountToken Mount Service Account token in external database job pod
+    ##
+    automountServiceAccountToken: false
diff --git a/make/dev.mk b/make/dev.mk
index 1d9b179df8adc4fe69e811e336f651da69a28480..0282dbbce287356e207822fdc9dbf1be7e26e0b8 100644
--- a/make/dev.mk
+++ b/make/dev.mk
@@ -32,3 +32,9 @@ package-config: ## Package the config files
 	cp ./dbrepo-storage-service/s3_config.json ./.docker/config
 	cp ./dbrepo-upload-service/pre-create.sh ./.docker/config
 	cd ./.docker && tar czf ./dist.tar.gz ./docker-compose.yml ./.env ./config
+
+.PHONY: install-staging
+install-staging: build-helm ## Install on staging server
+	helm -n dbrepo uninstall dbrepo --ignore-not-found --wait
+	kubectl -n dbrepo delete pvc --all
+	helm -n dbrepo install dbrepo ./build/dbrepo-${CHART_VERSION}.tgz --create-namespace -f ./.gitlab/agents/dev/values.yaml