في Discourse، غالبًا ما لا يمكن استخدام النسخ الاحتياطية التي تم إنشاؤها أثناء تمكين ميزة تحميل S3 بنجاح لاستعادة الموقع، مما يجعل النسخ الاحتياطية التلقائية غير صالحة فعليًا. لمعالجة هذه المشكلة، كتبت هذا البرنامج النصي الذي يعطل تحميلات S3 قبل بدء النسخ الاحتياطي، مما يضمن أن تكون ملفات النسخ الاحتياطي كاملة وقابلة للاستخدام. بعد انتهاء النسخ الاحتياطي، يعيد البرنامج النصي تمكين تحميلات S3 للحفاظ على عمليات الموقع الطبيعية وتخزين الملفات.
بالإضافة إلى ذلك، يقوم البرنامج النصي بتمكين وضع القراءة فقط (Read-Only Mode) أثناء عملية النسخ الاحتياطي والتحديث لمنع كتابة البيانات وضمان الاتساق. أخيرًا، يقوم بسحب آخر تحديثات التعليمات البرمجية تلقائيًا وإعادة بناء حاوية Docker لإكمال دورة الصيانة.
آمل أن يساعد هذا البرنامج النصي زملاء مديري Discourse. نرحب بالتعليقات والاقتراحات للتحسين!
#!/bin/bash
set -e
LOG_FILE="/var/discourse/scripts/weekly_update.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
log "=== Weekly Discourse Update Started ==="
cd /var/discourse || { log "Failed to cd /var/discourse"; exit 1; }
log "Enabling Read-Only Mode..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = true; puts 'Readonly mode enabled'"
log "Disabling S3 uploads..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = false"
log "Starting backup..."
if ! sudo docker exec app discourse backup ; then
log "Backup failed"
exit 1
fi
log "Backup succeeded."
log "Enabling S3 uploads..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = true"
log "Disabling Read-Only Mode..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = false; puts 'Readonly mode disabled'"
log "Pulling latest git changes..."
git pull
log "Rebuilding container..."
./launcher rebuild app
log "Weekly update complete."
exit 0