إعداد PostgreSQL مع نسخ احتياطي تلقائي
دليل شامل لتثبيت PostgreSQL باستخدام Docker وإعداد نظام نسخ احتياطي تلقائي يومي مع استعادة البيانات.
أهمية حماية البيانات في قواعد البيانات
تعتبر 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، تمكنا من بناء نظام نسخ احتياطي آلي يتبع سياسات احتفاظ صارمة، مما يضمن استمرارية الأعمال وحماية جهود المؤسسة من أي كوارث تقنية محتملة.