پشتیبانی که بتوانید بازیابی کنید تفاوت میان یک بعدازظهر آزاردهنده و از دست دادن یک پروژه است. راهنمای پایهی پشتیبانگیری از VPS ایده را پوشش میدهد. این یکی با restic و BorgBackup پیشتر میرود: دو ابزار که پشتیبانهای رمزگذاریشده و بدون تکرار را روی سرور دوم یا ذخیرهسازی شیء میگیرند.
چرا restic یا borg بهجای کپی ساده
- حذف تکرار. فقط دادههای تغییرکرده ذخیره میشوند، پس اسنپشاتهای روزانه کوچک میمانند.
- رمزگذاری. داده پیش از خروج از سرور شما رمزگذاری میشود.
- اسنپشاتها. میتوانید وضعیت هر روز گذشته را بازیابی کنید.
- راستیآزمایی. هر دو ابزار میتوانند یکپارچگی مخزن را بررسی کنند.
یکی را انتخاب کنید. Restic ساده است و با انواع ذخیرهسازی از جمله SFTP و ذخیرهسازی سازگار با S3 کار میکند. Borg بسیار کارآمد است و از طریق SSH با سروری کار میکند که borg روی آن نصب است.
پشتیبانها را کجا بفرستیم
هرگز تنها پشتیبان را روی همان سرور نگه ندارید. از یک VPS دوم در موقعیت دیگر، یک bucket سازگار با S3 یا یک storage box استفاده کنید. یک VPS کوچک با دیسک بزرگ مقصد پشتیبان ارزانی است. طرحهای VPS را ببینید.
Restic: راهاندازی
sudo apt install -y restic
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic/myserver"
export RESTIC_PASSWORD_FILE=/root/.restic-pass
restic init
فایل رمز عبور را با یک رمز طولانی تصادفی بسازید و یک نسخه از آن را آفلاین نگه دارید. بدون این رمز عبور پشتیبانها قابل بازیابی نیستند.
restic backup /etc /home /var/www --exclude-caches
restic snapshots
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check
Borg: راهاندازی
sudo apt install -y borgbackup
export BORG_REPO="ssh://backup@backup.example.com/srv/borg/myserver"
borg init --encryption=repokey-blake2
borg create --stats --compression zstd ::'{hostname}-{now:%Y-%m-%d}' /etc /home /var/www
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
borg check
کلید مخزن را با borg key export خروجی بگیرید و نگه دارید.
پایگاههای داده به دقت نیاز دارند
فایلهای پایگاه دادهی در حال اجرا را کپی نکنید. ابتدا از آنها dump بگیرید و از dump پشتیبان بگیرید:
mysqldump --single-transaction --all-databases | gzip > /var/backups/db.sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg.sql.gz
زمانبندی کنید
پشتیبانگیری را از یک systemd timer یا cron اجرا کنید. یک خط سادهی cron:
15 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
در صورت شکست به خودتان هشدار دهید، برای مثال با یک ping پایش در انتهای اسکریپت.
بازیابی را آزمایش کنید
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls /tmp/restore-test
هرازگاهی یک بازیابی واقعی را روی یک ماشین یدکی آزمایش کنید. پشتیبانی که هرگز آزمایش نکردهاید فقط یک امید است.