Advanced ConfigurationStorage
Object Storage (S3)
Configure external storage for your backups (MinIO, AWS, Scaleway...).
By default, Portabase stores backups on the Dashboard server's local disk. For production, we strongly recommend using S3-compatible object storage to:
- Separate compute (Dashboard) from storage.
- Benefit from virtually unlimited capacity.
- Protect data if the Dashboard server is lost.
This adds a MinIO service to your Docker Compose stack, typically behind Traefik.
Docker Compose changes
MinIO exposes two ports:
- 9000: S3 API (used by Portabase).
- 9001: Web Console (admin UI).
name: portabase-stack
services:
portabase:
image: solucetechnologies/portabase:latest
container_name: portabase-app
env_file: .env
volumes:
- portabase-private:/app/private
depends_on:
db:
condition: service_healthy
networks:
- traefik_network
- default
labels:
- "traefik.enable=true"
- "traefik.http.routers.portabase.rule=Host(`dashboard.example.com`)"
- "traefik.http.routers.portabase.entrypoints=websecure"
- "traefik.http.routers.portabase.tls.certresolver=myresolver"
# ... standard DB service ...
s3:
image: docker.io/bitnami/minio:latest
container_name: portabase-minio
expose:
- 9000
- 9001
volumes:
- minio-data:/data
environment:
- MINIO_ROOT_USER=${S3_ACCESS_KEY}
- MINIO_ROOT_PASSWORD=${S3_SECRET_KEY}
- MINIO_DEFAULT_BUCKETS=${S3_BUCKET_NAME}
networks:
- traefik_network
- default
labels:
- "traefik.enable=true"
- "traefik.http.routers.api-s3.rule=Host(`api.s3.example.com`)"
- "traefik.http.routers.api-s3.entrypoints=websecure"
- "traefik.http.routers.api-s3.tls.certresolver=myresolver"
- "traefik.http.services.api-s3.loadbalancer.server.port=9000"
- "traefik.http.routers.webui-s3.rule=Host(`console.s3.example.com`)"
- "traefik.http.routers.webui-s3.entrypoints=websecure"
- "traefik.http.services.webui-s3.loadbalancer.server.port=9001"
volumes:
portabase-private:
postgres-data:
minio-data:
networks:
traefik_network:
external: true.env configuration
Update .env to connect Portabase to MinIO.
# ... other configs ...
# Enable S3 mode
STORAGE_TYPE=s3
# MinIO credentials (change these!)
S3_ACCESS_KEY=admin_user
S3_SECRET_KEY=change_me_super_secret_password
S3_BUCKET_NAME=portabase-backups
# Connection settings
S3_ENDPOINT=api.s3.example.com
S3_PORT=443
S3_USE_SSL=trueIf you use a cloud provider (Scaleway Object Storage, AWS S3, DigitalOcean Spaces), you usually only need to set environment variables — no Docker changes.
.env example for Scaleway (Paris):
STORAGE_TYPE=s3
S3_ENDPOINT=s3.fr-par.scw.cloud
S3_PORT=443
S3_USE_SSL=true
S3_ACCESS_KEY=SCW_ACCESS_KEY_ID
S3_SECRET_KEY=SCW_SECRET_ACCESS_KEY
S3_BUCKET_NAME=my-backup-bucketFor AWS:
S3_ENDPOINT=s3.eu-west-3.amazonaws.com
# rest is identicalVerification
- Restart the dashboard:
portabase restart . docker-compose down && docker-compose up -d - Log into the web UI.
- Trigger a manual backup on an agent.
- Check your bucket (or MinIO console) to confirm the backup file exists.