Restic للـ VM: النسخة الاحتياطية لا تكفي بدون Restore Drill
لو عندك VM عليها PostgreSQL وملفات uploads، هتخرج من المقال بخطة نسخ احتياطي قابلة للاسترجاع، مش مجرد فولدر محفوظ ومحدش جربه.
مستوى القارئ: متوسط
المشكلة باختصار
الطريقة الشائعة بتفشل في لحظة الحقيقة: سكربت يعمل backup كل ليلة، يرفع ملف إلى storage، وبعدين الفريق يكتشف وقت العطل إن الملف ناقص أو كلمة المرور مش متوثقة أو الاسترجاع بياخد 40 دقيقة بدل 10.
الافتراض هنا إن عندك VM واحدة أو اتنين، قاعدة PostgreSQL صغيرة إلى متوسطة، وملفات uploads أقل من 200GB. لو عندك Kubernetes كبير أو عشرات قواعد البيانات، هتحتاج orchestration أوسع.
ليه Restic مناسب للحالة دي
Restic بيعمل ثلاث حاجات مهمة: تشفير قبل الرفع، deduplication عشان مايرفعش نفس البيانات كل مرة، وsnapshots تقدر ترجع منها لنقطة زمنية محددة. ركز: قيمة الأداة مش في أمر backup فقط، القيمة في إن restore يبقى قابل للتكرار.
مثال بسيط: لو عندك فولدر uploads فيه 80GB، وأنت بتضيف 2GB يوميًا، أول نسخة ممكن تاخد وقتًا طويلًا. بعد كده Restic يرفع التغييرات فقط. المكسب إن التخزين والوقت يقلوا. الـ trade-off هنا إنك لازم تحافظ على password وrepository config، ولو ضاعوا فالنسخ المشفرة مش هتنفعك.
إعداد عملي قابل للنسخ
ثبت Restic على السيرفر، واستخدم S3-compatible storage مثل AWS S3 أو Backblaze B2 أو MinIO. المثال التالي مبني على S3. غيّر القيم حسب بيئتك.
# 1) متغيرات الاتصال
export AWS_ACCESS_KEY_ID="CHANGE_ME"
export AWS_SECRET_ACCESS_KEY="CHANGE_ME"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
export RESTIC_REPOSITORY="s3:s3.amazonaws.com/my-company-vm-backups/prod-vm-01"
# 2) أول تهيئة للـ repository
restic init
# 3) dump لقاعدة PostgreSQL قبل النسخ
mkdir -p /var/backups/app
sudo -u postgres pg_dump -Fc app_db > /var/backups/app/app_db.dump
# 4) نسخة للـ dump والـ uploads
restic backup /var/backups/app/app_db.dump /var/www/app/uploads
# 5) احتفاظ عملي: يومي 7 أيام، أسبوعي 4 أسابيع، شهري 6 شهور
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --pruneأفضل طريقة تشغّل ده بملف systemd timer بدل cron لو السيرفر عندك systemd. هتكسب logs أوضح وexit status ظاهر. هتخسر بس شوية إعدادات زيادة.
اختبار الاسترجاع هو الجزء المهم
النسخة الاحتياطية من غير restore drill هي وعد غير مختبر. اعمل test شهري على staging أو VM مؤقتة. الهدف مش إنك تسترجع كل شيء كل يوم، الهدف إنك تعرف RTO حقيقي: كام دقيقة لحد ما الخدمة ترجع.