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/installConfigure Credentials
aws configure
# Enter your access key, secret key, regionFor 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.comBackup 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>&1Cost Comparison
| Provider | Storage | Egress |
|---|---|---|
| AWS S3 | $0.023/GB | $0.09/GB |
| Backblaze B2 | $0.006/GB | $0.01/GB |
| Wasabi | $0.0069/GB | Free |