پرش به محتوا

پشتیبان‌گیری رمزگذاری‌شده و افزایشی با restic

از پوشه‌ها و بکاپ پایگاه داده نسخه‌ی رمزگذاری‌شده روی سرور دیگر بگیرید، نسخه‌های قدیمی را خودکار پاک کنید و بازیابی را آزمایش کنید.

Ubuntu 24.04 LTSسطح: متوسطبرای: Ubuntu 24.04 LTS، Ubuntu 26.04 LTS، Ubuntu 22.04 LTSبه‌روزرسانی: ۱۶ آبان ۱۴۰۵

restic فقط تغییرات را ذخیره می‌کند (deduplication)، همه‌چیز را رمزگذاری می‌کند و مقصدهای مختلفی را پشتیبانی می‌کند: پوشه‌ی محلی، سرور SFTP یا فضای ذخیره‌سازی S3. در این مثال مقصد یک سرور بکاپ از طریق SFTP است.

۱. نصب و کلید SSH

bash
sudo apt update
sudo apt install -y restic
sudo ssh-keygen -t ed25519 -f /root/.ssh/backup -N ''
sudo ssh-copy-id -i /root/.ssh/backup.pub backup@192.168.10.40

در /root/.ssh/config:

ini
Host backupsrv
    HostName 192.168.10.40
    User backup
    IdentityFile /root/.ssh/backup

۲. مخزن و رمز

bash
sudo install -m 600 /dev/null /root/.restic-pass
openssl rand -base64 32 | sudo tee /root/.restic-pass > /dev/null
export RESTIC_REPOSITORY=sftp:backupsrv:/backups/web01
export RESTIC_PASSWORD_FILE=/root/.restic-pass
sudo -E restic init
رمز مخزن را جای امن دیگری هم نگه دارید. بدون آن، بکاپ‌ها قابل بازیابی نیستند.

۳. اسکریپت بکاپ

bash
#!/usr/bin/env bash
# /usr/local/sbin/backup.sh
set -euo pipefail
export RESTIC_REPOSITORY=sftp:backupsrv:/backups/web01
export RESTIC_PASSWORD_FILE=/root/.restic-pass

restic backup /etc /var/www /var/backups/pg --exclude-caches --tag nightly
restic forget --prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
restic check --read-data-subset=5%
bash
sudo chmod 700 /usr/local/sbin/backup.sh

۴. اجرای شبانه با systemd timer

ini
# /etc/systemd/system/backup.service
[Unit]
Description=Nightly restic backup
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/backup.sh
ini
# /etc/systemd/system/backup.timer
[Unit]
Description=Run backup nightly
[Timer]
OnCalendar=*-*-* 01:30
Persistent=true
[Install]
WantedBy=timers.target
bash
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
sudo systemctl start backup.service && journalctl -u backup -n 30 --no-pager

۵. بازیابی

bash
sudo -E restic snapshots
sudo -E restic restore latest --target /tmp/restore --include /etc/nginx

بازیابی را هر چند وقت یک بار واقعاً آزمایش کنید.