ב-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 "=== עדכון שבועי של Discourse החל ==="
cd /var/discourse || { log "כשל במעבר לספריית /var/discourse"; exit 1; }
log "מפעיל מצב קריאה בלבד..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = true; puts 'Readonly mode enabled'" ">
log "מצב קריאה הופעל"
log "משבית העלאות S3..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = false" ">
log "מתחיל גיבוי..."
if ! sudo docker exec app discourse backup ">
log "הגיבוי נכשל"
exit 1
fi
log "הגיבוי הצליח."
log "מפעיל העלאות S3..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = true" ">
log "משבית מצב קריאה בלבד..."
sudo docker exec app rails runner "SiteSetting.readonly_mode = false; puts 'Readonly mode disabled'" ">
log "מצב קריאה הושבת"
log "מושך שינויי git אחרונים..."
git pull ">
log "בונה מחדש את הקונטיינר..."
./launcher rebuild app ">
log "העדכון השבועי הושלם."
exit 0