همه پشتیبان دارند تا وقتی که بخواهند یکی را بازیابی کنند. پوشه خالی از آب درمیآید، کرونجاب در اسفند مرده، یا آرشیو روی همان دیسکی است که همین حالا خراب شد. restic بیشتر اینها را حل میکند: سمت شما رمزگذاری میکند، هر تکه داده را یک بار ذخیره میکند و بازیابی یک فایل را به سادگی پشتیبانگیری از کل سرور میکند.
این تنظیماتی است که واقعاً به آن اعتماد میکنیم، روی Ubuntu یا Debian.
۱. restic را نصب کنید
apt update && apt install -y restic
restic self-update
بستههای توزیع عقباند؛ self-update نسخهی فعلی را میگیرد.
۲. جایی برای مخزن انتخاب کنید
مخزن نباید روی سروری باشد که از آن محافظت میکنید. دو انتخاب رایج:
- سروری دیگر از طریق SFTP:
sftp:backup@203.0.113.20:/srv/restic/web1 - فضای ذخیرهسازی شیء سازگار با S3:
s3:https://s3.example.com/my-bucket/web1
۳. اطلاعات دسترسی را ذخیره کنید
همه چیز را در یک فایل که فقط root میخواند نگه دارید تا تایمر و shell شما از تنظیمات یکسان استفاده کنند:
cat > /root/.restic-env <<'EOF'
export RESTIC_REPOSITORY="s3:https://s3.example.com/my-bucket/web1"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
export AWS_ACCESS_KEY_ID="your-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret"
EOF
openssl rand -base64 32 > /root/.restic-pass
chmod 600 /root/.restic-env /root/.restic-pass
حالا محتوای /root/.restic-pass را در مدیر رمز عبورتان کپی کنید. بدون آن، پشتیبانها رمزگشایی نمیشوند — نه توسط شما، نه هیچکس دیگر.
۴. مخزن را راه بیندازید و اولین پشتیبان را بگیرید
source /root/.restic-env
restic init
restic backup /etc /home /root /srv /var/www \
--exclude-caches --exclude '/root/.cache'
restic snapshots
مسیرها را با جایی که دادههایتان واقعاً هست تطبیق دهید. ولومهای Docker در /var/lib/docker/volumes هستند؛ دادههای برنامهها اغلب در /srv یا /opt.
۵. پایگاه داده: اول دامپ، بعد پشتیبان
از فایلهای خام پایگاه دادهی در حال اجرا پشتیبان نگیرید. درست پیش از پشتیبانگیری دامپ بگیرید:
mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump
/var/backups/db را به مسیرهای پشتیبان اضافه کنید. راهنمای PostgreSQL دربارهی دامپها بیشتر توضیح میدهد.
۶. با systemd زمانبندی کنید
اینجا تایمر از کرون بهتر است: در ژورنال لاگ مینویسد و اگر سرور سر وقت خاموش بوده، اجرای جامانده را جبران میکند.
# /etc/systemd/system/restic-backup.service
[Unit]
Description=restic backup
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'source /root/.restic-env && restic backup /etc /home /root /srv /var/www /var/backups/db --exclude-caches && restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune'
# /etc/systemd/system/restic-backup.timer
[Unit]
Description=Daily restic backup
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now restic-backup.timer
systemctl list-timers restic-backup.timer
forget --prune هفت اسنپشات روزانه، چهار هفتگی و شش ماهانه نگه میدارد و بقیه را پاک میکند. اگر مرحلهی دامپ پایگاه داده دارید، آن را در یک خط ExecStartPre= بگذارید.
۷. واقعاً چیزی را بازیابی کنید
این مرحله است که «ما پشتیبان داریم» را به واقعیت تبدیل میکند. یک پوشه را به یک پوشهی موقت برگردانید و نگاهش کنید:
source /root/.restic-env
restic restore latest --target /tmp/restore-test --include /etc/nginx
ls -la /tmp/restore-test/etc/nginx
restic check
یک بار همین حالا و بعد هر چند ماه یک بار این کار را بکنید. restic check ساختار مخزن را بررسی میکند؛ بازیابی ثابت میکند داده واقعاً آنجاست.
restic و Managed Backups
این دو رقیب هم نیستند. Managed Backups هر روز یک نقطهی بازیابی از کل سرور میگیرد که از پنل برمیگردانید — راهحل سریع بعد از بهروزرسانیای که خراب شد. ماهی ۲ دلار هزینه دارد و در هر پلن سالانه رایگان است. restic کپیهای در سطح فایل و بیرون از سرور را روی فضایی که خودتان کنترل میکنید میدهد؛ این وقتی مهم است که مشکل فایلی است که سهشنبهی گذشته پاک شده یا میخواهید کپیای کاملاً بیرون از زیرساخت ما داشته باشید.
اگر دادهی حساس نگه میدارید، این را با رمزگذاری کامل دیسک ترکیب کنید، یا برای راهاندازی مقصد پشتیبان خودتان کاربرد فضای ذخیرهسازی رمزگذاریشده را ببینید. پلن Micro برای بیشتر سرورهای کوچک بههمراه کارهای پشتیبانگیریشان کافی است.
نظرات
هنوز نظری نیست. اولین نفر باشید.