لدى الجميع نسخ احتياطية إلى أن يحاولوا استعادة واحدة. يتبيّن أن المجلد فارغ، أو أن مهمة cron ماتت في مارس، أو أن الأرشيف موجود على القرص نفسه الذي تعطّل للتو. يحل restic معظم ذلك: يشفّر من جهتك، ويخزّن كل جزء من البيانات مرة واحدة، ويجعل استعادة ملف واحد بسهولة نسخ الخادم بأكمله.
إليك إعدادًا نثق به فعلًا، على Ubuntu أو Debian.
1. ثبّت restic
apt update && apt install -y restic
restic self-update
حزم التوزيعة تتأخر؛ وself-update يجلب الإصدار الحالي.
2. اختر مكانًا للمستودع
يجب ألا يكون المستودع على الخادم الذي تحميه. خياران شائعان:
- خادم آخر عبر SFTP:
sftp:backup@203.0.113.20:/srv/restic/web1 - تخزين كائنات متوافق مع S3:
s3:https://s3.example.com/my-bucket/web1
3. احفظ بيانات الاعتماد
أبقِ كل شيء في ملف واحد لا يقرؤه إلا 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 إلى مدير كلمات المرور. من دونه لا يمكن فك تشفير النسخ — لا منك ولا من أي أحد آخر.
4. هيّئ المستودع وشغّل أول نسخة
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.
5. قواعد البيانات: التفريغ أولًا ثم النسخ
لا تنسخ الملفات الخام لقاعدة بيانات قيد التشغيل. خذ تفريغًا قبل النسخ مباشرةً:
mkdir -p /var/backups/db
sudo -u postgres pg_dump -Fc mydb > /var/backups/db/mydb.dump
أضف /var/backups/db إلى مسارات النسخ. في دليل PostgreSQL المزيد عن التفريغ.
6. جدوله باستخدام systemd
المؤقّت هنا أفضل من cron: يكتب في الـjournal ويعوّض التشغيل الفائت إن كان الخادم مطفأً في الموعد.
# /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 يحتفظ بـ7 لقطات يومية و4 أسبوعية و6 شهرية ويحذف الباقي. إن كانت لديك خطوة تفريغ لقاعدة البيانات، فضعها في سطر ExecStartPre=.
7. استعد شيئًا فعلًا
هذه هي الخطوة التي تحوّل "لدينا نسخ احتياطية" إلى حقيقة. استرجع مجلدًا واحدًا إلى مجلد مؤقت وانظر إليه:
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 كل يوم نقطة استعادة للخادم كله تسترجعها من اللوحة — الحل السريع بعد تحديث فاشل. تكلّف $2 شهريًا وهي مجانية مع أي خطة سنوية. أما restic فيمنحك نسخًا على مستوى الملفات خارج الخادم، في تخزين تتحكم به، وهذا مهم حين تكون المشكلة ملفًا حُذف الثلاثاء الماضي أو حين تريد نسخة خارج بنيتنا التحتية تمامًا.
إن كنت تخزّن بيانات حساسة، فاجمع ذلك مع تشفير القرص بالكامل، أو اطّلع على حالة استخدام التخزين المشفّر لتشغيل وجهة نسخ خاصة بك. خطة Micro تكفي لمعظم الخوادم الصغيرة مع مهام نسخها.
التعليقات
لا تعليقات بعد. كن الأول.