Docs / Backup & Recovery / How to Set Up Automated Backups to S3-Compatible Storage

How to Set Up Automated Backups to S3-Compatible Storage

By Admin · Feb 25, 2026 · Updated Apr 24, 2026 · 76 views · 2 min read

Why S3-Compatible Storage?

S3-compatible storage services (AWS S3, Backblaze B2, Wasabi, MinIO) provide cheap, durable offsite storage. Many backup tools natively support the S3 API.

Install AWS CLI

sudo apt install -y awscli
# Or install the latest version
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip && sudo ./aws/install

Configure Credentials

aws configure
# Enter your access key, secret key, region

For non-AWS providers, set the endpoint:

# Backblaze B2
aws configure set default.s3.endpoint_url https://s3.us-west-004.backblazeb2.com

# Wasabi
aws configure set default.s3.endpoint_url https://s3.wasabisys.com

Backup Script

#!/bin/bash
BUCKET="s3://my-backups/$(hostname)"
DATE=$(date +%Y-%m-%d)

# Backup database
mysqldump -u root --single-transaction --all-databases | gzip > /tmp/db-$DATE.sql.gz
aws s3 cp /tmp/db-$DATE.sql.gz "$BUCKET/db/"
rm /tmp/db-$DATE.sql.gz

# Backup web files
tar czf /tmp/www-$DATE.tar.gz /var/www
aws s3 cp /tmp/www-$DATE.tar.gz "$BUCKET/www/"
rm /tmp/www-$DATE.tar.gz

# Backup config files
tar czf /tmp/etc-$DATE.tar.gz /etc/nginx /etc/php /etc/mysql
aws s3 cp /tmp/etc-$DATE.tar.gz "$BUCKET/config/"
rm /tmp/etc-$DATE.tar.gz

# Cleanup old remote backups (keep 30 days)
aws s3 ls "$BUCKET/db/" | awk '{print $4}' | sort | head -n -30 | xargs -I{} aws s3 rm "$BUCKET/db/{}"

echo "Backup completed: $DATE"

Schedule with Cron

0 3 * * * /usr/local/bin/s3-backup.sh >> /var/log/s3-backup.log 2>&1

Cost Comparison

ProviderStorageEgress
AWS S3$0.023/GB$0.09/GB
Backblaze B2$0.006/GB$0.01/GB
Wasabi$0.0069/GBFree

Was this article helpful?