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_FILE"
}
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 "Discourse.enable_readonly_mode(Discourse::USER_READONLY_MODE_KEY); puts 'Readonly mode enabled'" >> "$LOG_FILE" 2>&1
log "Disabling S3 uploads..."
sudo docker exec app rails runner "SiteSetting.enable_s3_uploads = false" >> "$LOG_FILE" 2>&1
log "Starting backup..."
if ! sudo docker exec app discourse backup >> "$LOG_FILE" 2>&1; 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_FILE" 2>&1
log "Disabling Read-Only Mode..."
sudo docker exec app rails runner "Discourse.disable_readonly_mode(Discourse::USER_READONLY_MODE_KEY); puts 'Readonly mode disabled'" >> "$LOG_FILE" 2>&1
log "Pulling latest git changes..."
git pull >> "$LOG_FILE" 2>&1
log "Rebuilding container..."
./launcher rebuild app >> "$LOG_FILE" 2>&1
log "Weekly update complete."
exit 0