تخطّ إلى المحتوى
AISI
𝕏
دليل إرشادي

إعداد PostgreSQL مع نسخ احتياطي تلقائي

دليل شامل لتثبيت PostgreSQL باستخدام Docker وإعداد نظام نسخ احتياطي تلقائي يومي مع استعادة البيانات.

18 دقائق قراءة DatabaseInfrastructure

أهمية حماية البيانات في قواعد البيانات

تعتبر PostgreSQL من أقوى قواعد البيانات المفتوحة المصدر وأكثرها استقراراً، وتعتمد عليها آلاف المنظمات (NGOs) والشركات لإدارة بياناتها الحساسة. ولكن، مهما كانت قاعدة البيانات قوية، فإن خطر فقدان البيانات (سواء بسبب خطأ بشري، هجوم سيبراني، أو تلف في العتاد) يظل قائماً. لذا، لا يمكن اعتبار بيئة التشغيل “إنتاجية” (Production-ready) دون وجود نظام نسخ احتياطي تلقائي (Automated Backup). في هذا الدليل، سنتعلم كيفية إعداد PostgreSQL وربطها بنظام نسخ احتياطي دوري باستخدام تقنية Docker.

الخطوة 1: تثبيت PostgreSQL باستخدام Docker

استخدام Docker لتثبيت قاعدة البيانات يعزز من الأمان ويسهل الإدارة. قم بإنشاء ملف docker-compose.yml وضع فيه الإعدادات الأساسية:


version: '3.8'
services:
  db:
    image: postgres:15
    restart: always
    environment:
      POSTGRES_USER: admin_user
      POSTGRES_PASSWORD: secure_password123
      POSTGRES_DB: main_database
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"

volumes:
  pgdata:

شغل الحاوية باستخدام docker-compose up -d. تنبيه أمني: في بيئة الإنتاج الحقيقية، يفضل عدم كشف المنفذ 5432 للإنترنت العام، بل حصره على الشبكة الداخلية للخادم.

الخطوة 2: إعداد حاوية النسخ الاحتياطي التلقائي

بدلاً من كتابة سكربتات Cron يدوية على الخادم المضيف، الأفضل استخدام حاوية Docker مخصصة للنسخ الاحتياطي مثل صورة prodrigestivill/postgres-backup-local. سنقوم بإضافة هذه الخدمة إلى نفس ملف الـ docker-compose.yml:


  pgbackups:
    image: prodrigestivill/postgres-backup-local
    restart: always
    volumes:
      - /opt/backups:/backups
    links:
      - db
    depends_on:
      - db
    environment:
      - POSTGRES_HOST=db
      - POSTGRES_DB=main_database
      - POSTGRES_USER=admin_user
      - POSTGRES_PASSWORD=secure_password123
      - SCHEDULE=@daily
      - BACKUP_KEEP_DAYS=7
      - BACKUP_KEEP_WEEKS=4
      - BACKUP_KEEP_MONTHS=6

كيف يعمل هذا الإعداد؟

  • SCHEDULE=@daily: يقوم بعمل نسخة احتياطية (Dump) لقاعدة البيانات كل يوم عند منتصف الليل.
  • سياسة الاحتفاظ (Retention Policy): النظام ذكي؛ سيحتفظ بالنسخ اليومية لآخر 7 أيام، وبنسخة أسبوعية لآخر 4 أسابيع، ونسخة شهرية لآخر 6 أشهر. ثم يقوم بحذف النسخ الأقدم تلقائياً لتوفير مساحة التخزين.
  • volumes: يتم حفظ ملفات النسخ الاحتياطي في المسار /opt/backups على جهازك المضيف لضمان عدم ضياعها إذا حُذفت الحاوية.

الخطوة 3: اختبار استعادة البيانات (Restore)

النسخ الاحتياطي لا فائدة منه إذا لم يتم اختباره. لضمان سلامة بياناتك، يجب عليك دورياً تجربة استعادة ملف (SQL Dump) من المجلد الاحتياطي.

لاستعادة قاعدة البيانات من ملف احتياطي مضغوط (مثلاً backup_20231010.sql.gz)، يمكنك استخدام الأمر التالي في سطر الأوامر:

gunzip -c /opt/backups/backup_20231010.sql.gz | docker exec -i [اسم_حاوية_قاعدة_البيانات] psql -U admin_user -d main_database

نصائح متقدمة

  • التخزين الخارجي (Off-site Backups): حفظ النسخة الاحتياطية على نفس الخادم ليس كافياً (ماذا لو احترق الخادم؟). يُنصح بربط مجلد النسخ الاحتياطي بأداة مثل rclone لرفع الملفات يومياً إلى سحابة خارجية (مثل AWS S3 أو Google Drive).
  • المراقبة (Monitoring): قم بربط حاوية النسخ الاحتياطي بخدمة تنبيه (مثل Healthchecks.io) لترسل لك رسالة على البريد أو تيليجرام إذا فشلت عملية النسخ في أي يوم.

الخلاصة

إعداد خادم PostgreSQL مستقر ليس نهاية المطاف. من خلال بضعة أسطر إضافية في ملف Docker Compose، تمكنا من بناء نظام نسخ احتياطي آلي يتبع سياسات احتفاظ صارمة، مما يضمن استمرارية الأعمال وحماية جهود المؤسسة من أي كوارث تقنية محتملة.