النسخ الاحتياطي والأمان: حماية بيانات المصنع من الضياع والاختراق
استراتيجيات النسخ الاحتياطي: 3-2-1
فقدان البيانات في بيئة صناعية يعني سجلات إنتاج مفقودة وانتهاكات امتثال وأسابيع من إعادة البناء اليدوي. قاعدة 3-2-1 هي المعيار الذهبي:
- 3 نسخ من بياناتك (الأصل + نسختان احتياطيتان)
- 2 وسائط تخزين مختلفة (قرص محلي + سحابي)
- 1 نسخة خارج الموقع (موقع فيزيائي مختلف)
| النوع | الوصف | التكرار |
|---|---|---|
| كامل | نسخة كاملة لجميع البيانات | أسبوعياً |
| تزايدي | التغييرات فقط منذ آخر نسخة | يومياً |
| سجل المعاملات | سجلات الكتابة المسبقة | مستمر |
نسخ قواعد البيانات: SurrealDB و PostgreSQL
SurrealDB
surreal export --conn http://localhost:8000 \
--user root --pass factory123 \
--ns factory --db production \
--output /backups/surrealdb/factory-$(date +%Y%m%d).surql
# الاستعادة
surreal import --conn http://localhost:8000 \
--user root --pass factory123 \
--ns factory --db production \
/backups/surrealdb/factory-20250415.surql
PostgreSQL
pg_dump -h localhost -U factory_user -Fc production_db > /backups/postgres/factory-$(date +%Y%m%d).dump
pg_restore -h localhost -U factory_user -d production_db /backups/postgres/factory-20250415.dump
نسخ أحجام Docker
docker compose stop surrealdb
docker run --rm -v factory-monitor_surreal-data:/data -v /backups:/backup \
alpine tar czf /backup/surreal-volume-$(date +%Y%m%d).tar.gz -C /data .
docker compose start surrealdb
تشفير النسخ الاحتياطية
النسخ الاحتياطية غير المشفرة ثغرة أمنية. شفّر كل نسخة قبل مغادرتها الخادم.
GPG
gpg --encrypt --recipient backup@drmachine.io /backups/factory-20250415.surql
gpg --decrypt /backups/factory-20250415.surql.gpg > /tmp/restore.surql
OpenSSL
openssl enc -aes-256-cbc -salt -pbkdf2 \
-in /backups/factory-20250415.tar.gz \
-out /backups/factory-20250415.tar.gz.enc
openssl enc -d -aes-256-cbc -pbkdf2 \
-in /backups/factory-20250415.tar.gz.enc \
-out /backups/factory-20250415.tar.gz
الرفع للسحابة
rclone copy /backups/factory-20250415.tar.gz.enc remote:factory-backups/daily/
إدارة المفاتيح والأسرار
ملفات البيئة بصلاحيات صارمة
cat > /opt/factory-monitor/.env << 'EOF'
DATABASE_URL=ws://localhost:8000
DB_USER=root
DB_PASS=secure_factory_password_2025
EOF
chmod 600 /opt/factory-monitor/.env
chown factory:factory /opt/factory-monitor/.env
أسرار Docker
services:
factory-app:
secrets: [db_password, api_key]
environment:
- DB_PASS_FILE=/run/secrets/db_password
secrets:
db_password:
file: ./secrets/db_password.txt
api_key:
file: ./secrets/api_key.txt
تدوير الأسرار
NEW_PASS=$(openssl rand -base64 32)
surreal sql --conn http://localhost:8000 --user root --pass "$OLD_PASS" \
"DEFINE USER root ON ROOT PASSWORD '$NEW_PASS'"
sed -i "s/DB_PASS=.*/DB_PASS=$NEW_PASS/" /opt/factory-monitor/.env
sudo systemctl restart factory-monitor
خطة التعافي من الكوارث
النسخة الاحتياطية عديمة الفائدة إذا لم تستطع الاستعادة منها. حدد RTO (سرعة عودة النظام) وRPO (كم من فقدان البيانات مقبول).
قائمة مرجعية للاستعادة
1. [ ] توفير خادم جديد أو استخدام الاحتياطي
2. [ ] تثبيت Docker و Docker Compose
3. [ ] استعادة آخر نسخة احتياطية
4. [ ] التحقق من سلامة البيانات
5. [ ] تحديث سجلات DNS إذا تغيّر العنوان
6. [ ] إعادة إنشاء أنفاق VPN
7. [ ] التحقق من المراقبة والإنذارات
8. [ ] إبلاغ فريق العمليات
اختبار الاستعادة ربع سنوياً
docker compose -f docker-compose.test.yml up -d
surreal import --conn http://localhost:9000 --user root --pass test123 \
--ns factory --db production /backups/latest/factory-latest.surql
surreal sql --conn http://localhost:9000 --user root --pass test123 \
"SELECT count() FROM sensor_readings GROUP ALL"
docker compose -f docker-compose.test.yml down -v
مثال عملي: نظام نسخ احتياطي تلقائي لبيانات المصنع
#!/bin/bash
# /opt/scripts/backup-factory.sh
set -euo pipefail
BACKUP_DIR="/backups/$(date +%Y%m%d)"
RETENTION_DAYS=30
mkdir -p "$BACKUP_DIR"
# 1. تصدير SurrealDB
surreal export --conn http://localhost:8000 --user root --pass "$DB_PASS" \
--ns factory --db production --output "$BACKUP_DIR/surrealdb.surql"
# 2. نسخ أحجام Docker
docker run --rm -v factory-monitor_surreal-data:/data -v "$BACKUP_DIR":/backup \
alpine tar czf /backup/volumes.tar.gz -C /data .
# 3. نسخ الإعدادات
tar czf "$BACKUP_DIR/configs.tar.gz" /opt/factory-monitor/docker-compose.yml \
/opt/factory-monitor/.env /etc/wireguard/wg0.conf
# 4. التشفير
tar czf - "$BACKUP_DIR" | openssl enc -aes-256-cbc -salt -pbkdf2 \
-pass file:/opt/secrets/backup-key -out "/backups/factory-$(date +%Y%m%d).tar.gz.enc"
# 5. الرفع للسحابة
rclone copy "/backups/factory-$(date +%Y%m%d).tar.gz.enc" remote:factory-backups/daily/
# 6. تنظيف النسخ القديمة
find /backups -name "*.enc" -mtime +$RETENTION_DAYS -delete
rm -rf "$BACKUP_DIR"
إدخال cron
0 2 * * * /opt/scripts/backup-factory.sh >> /var/log/backup.log 2>&1
الخلاصة
حماية البيانات تتطلب نهجاً متعدد الطبقات: قاعدة 3-2-1 تضمن بقاء النسخ بعد أي عطل منفرد، التشفير يحمي البيانات في السكون وأثناء النقل، إدارة الأسرار السليمة تمنع تسرب بيانات الاعتماد، وخطة تعافي مُختبرة تضمن قدرتك الفعلية على الاستعادة. هذا يختتم سلسلة Docker وDevOps التي غطت التغليف في حاويات والتنسيق وإدارة Linux وCI/CD والمراقبة والشبكات وحماية البيانات للبيئات الصناعية.