Skip to main content

Restore Procedures

Complete Restoration Guide

This guide provides step-by-step procedures for restoring your Docusaurus site from backups to a live server.

Pre-Restoration Checklist

Before starting any restore operation:

  • Identify which backup to restore from (date/snapshot ID)
  • Verify backup integrity
  • Ensure sufficient disk space on target server
  • Have access credentials ready (OneDrive, server SSH)
  • Know the Restic repository password
  • Create backup of current site (if exists)
  • Plan maintenance window (notify users if needed)

Scenario 1: Complete Site Recovery (New Server)

Use Case

  • Server crashed and needs complete rebuild
  • Migrating to new server
  • Disaster recovery

Prerequisites

# Install required tools
sudo apt-get update
sudo apt-get install -y restic rclone docker.io docker-compose git

Step 1: Configure Rclone

# Option A: Copy existing config
scp user@old-server:/home/rezriz/.config/rclone/rclone.conf ~/.config/rclone/

# Option B: Reconfigure from scratch
rclone config
# Follow prompts to add onedrive-donnyaw remote

Step 2: Verify OneDrive Access

# Test connection
rclone lsd onedrive-donnyaw:

# Verify backup location
rclone lsd onedrive-donnyaw:16.Docker-Backup/Docusaurus/

Step 3: Restore Using Restic

# Set environment variables
export RESTIC_PASSWORD="DocusaurusSecureBackup2026!"
export RESTIC_REPOSITORY="rclone:onedrive-donnyaw:16.Docker-Backup/Docusaurus/Restic-Rclone"

# List available snapshots
restic snapshots

# Restore latest snapshot
mkdir -p /opt/docker-data/apps/docusaurus/site
restic restore latest --target /opt/docker-data/apps/docusaurus/site

# Verify restoration
ls -la /opt/docker-data/apps/docusaurus/site

Step 4: Set Up Docker Environment

# Create docker-compose.yml (if not in backup)
cd /opt/docker-data/apps/docusaurus
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
docusaurus:
image: node:18-alpine
container_name: docusaurus
working_dir: /app
volumes:
- ./site:/app
ports:
- "3000:3000"
command: sh -c "npm install && npm run start -- --host 0.0.0.0"
restart: unless-stopped
EOF

Step 5: Install Dependencies and Start

# Set correct permissions
chown -R rezriz:rezriz /opt/docker-data/apps/docusaurus/site

# Start container
docker-compose up -d

# Monitor logs
docker-compose logs -f

Step 6: Verify Site

# Check container status
docker-compose ps

# Test local access
curl http://localhost:3000

# Test external access
curl https://brain.id86.net

Scenario 2: Restore Specific Files

Use Case

  • Accidentally deleted files
  • Need older version of specific document
  • Corrupted files

Using Restic

# Set environment
source /home/rezriz/github/01-production/vps-management/backup-scripts/docusaurus-restic-rclone/backup-config.sh

# Find file in snapshots
restic find "filename.md"

# Restore specific file from latest
restic restore latest --target /tmp/restore --include "docs/path/to/file.md"

# Copy to live location
cp /tmp/restore/docs/path/to/file.md /opt/docker-data/apps/docusaurus/site/docs/path/to/

Using Rclone Archive

# List archived versions
rclone lsd onedrive-donnyaw:16.Docker-Backup/Docusaurus/Incremental-Rclone/Archive/

# Download specific date
rclone copy onedrive-donnyaw:16.Docker-Backup/Docusaurus/Incremental-Rclone/Archive/2026-02-08_02-00-00/docs/path/to/file.md /tmp/

# Copy to live location
cp /tmp/file.md /opt/docker-data/apps/docusaurus/site/docs/path/to/

Scenario 3: Rollback to Previous Version

Use Case

  • Recent changes broke the site
  • Need to revert to known good state
  • Testing purposes

Step 1: Stop Current Site

cd /opt/docker-data/apps/docusaurus
docker-compose down

Step 2: Backup Current State

# Create safety backup
mv site site.backup.$(date +%Y%m%d_%H%M%S)

Step 3: Restore Specific Snapshot

# Source config
source /home/rezriz/github/01-production/vps-management/backup-scripts/docusaurus-restic-rclone/backup-config.sh

# List snapshots with dates
restic snapshots

# Restore specific snapshot
restic restore <snapshot-id> --target /opt/docker-data/apps/docusaurus/site

# Set permissions
chown -R rezriz:rezriz site/

Step 4: Restart Site

docker-compose up -d
docker-compose logs -f

Step 5: Verify and Cleanup

# If successful, remove backup
rm -rf site.backup.*

# If failed, restore original
# docker-compose down
# rm -rf site
# mv site.backup.YYYYMMDD_HHMMSS site
# docker-compose up -d

Scenario 4: Partial Restore (Specific Directory)

Use Case

  • Restore only /docs directory
  • Restore only /blog directory
  • Selective recovery

Restore Docs Only

source /home/rezriz/github/01-production/vps-management/backup-scripts/docusaurus-restic-rclone/backup-config.sh

# Restore to temporary location
restic restore latest --target /tmp/restore --path /docs

# Backup current docs
mv /opt/docker-data/apps/docusaurus/site/docs /opt/docker-data/apps/docusaurus/site/docs.backup

# Copy restored docs
cp -r /tmp/restore/docs /opt/docker-data/apps/docusaurus/site/

# Set permissions
chown -R rezriz:rezriz /opt/docker-data/apps/docusaurus/site/docs

Scenario 5: Cross-Server Migration

Use Case

  • Moving to new VPS
  • Changing hosting providers
  • Creating staging environment

On Source Server

# Ensure latest backup exists
cd /home/rezriz/github/01-production/vps-management/backup-scripts/docusaurus-restic-rclone/
./incremental-backup.sh

# Verify backup
source backup-config.sh
restic snapshots --last 1

On Destination Server

# Install dependencies
sudo apt-get update
sudo apt-get install -y restic rclone docker.io docker-compose

# Configure rclone
rclone config
# Add onedrive-donnyaw remote

# Set Restic credentials
export RESTIC_PASSWORD="DocusaurusSecureBackup2026!"
export RESTIC_REPOSITORY="rclone:onedrive-donnyaw:16.Docker-Backup/Docusaurus/Restic-Rclone"

# Restore site
mkdir -p /opt/docker-data/apps/docusaurus/site
restic restore latest --target /opt/docker-data/apps/docusaurus/site

# Set up Docker
cd /opt/docker-data/apps/docusaurus
# Create docker-compose.yml
docker-compose up -d

Scenario 6: Emergency Recovery (No Scripts)

Use Case

  • Backup scripts lost
  • Need immediate recovery
  • Manual restoration required

Manual Restic Restore

# Install restic
sudo apt-get install -y restic rclone

# Configure rclone manually
rclone config

# Set credentials
export RESTIC_PASSWORD="DocusaurusSecureBackup2026!"
export RESTIC_REPOSITORY="rclone:onedrive-donnyaw:16.Docker-Backup/Docusaurus/Restic-Rclone"

# Check repository
restic snapshots

# Restore
mkdir -p /opt/docker-data/apps/docusaurus/site
restic restore latest --target /opt/docker-data/apps/docusaurus/site

Manual Rclone Restore

# Download full backup
rclone copy onedrive-donnyaw:16.Docker-Backup/Docusaurus/Full-Backup-Rclone/ /tmp/backups/

# Find latest backup
ls -lt /tmp/backups/

# Extract
mkdir -p /tmp/restore
tar -xzf /tmp/backups/docusaurus_full_YYYY-MM-DD_HH-MM-SS.tar.gz -C /tmp/restore

# Copy to destination
cp -r /tmp/restore/* /opt/docker-data/apps/docusaurus/site/

Post-Restoration Tasks

1. Verify File Integrity

# Check critical files exist
ls -la /opt/docker-data/apps/docusaurus/site/docusaurus.config.js
ls -la /opt/docker-data/apps/docusaurus/site/sidebars.js
ls -la /opt/docker-data/apps/docusaurus/site/package.json

# Check directories
ls -la /opt/docker-data/apps/docusaurus/site/docs/
ls -la /opt/docker-data/apps/docusaurus/site/blog/

2. Reinstall Dependencies

cd /opt/docker-data/apps/docusaurus/site
npm install

3. Test Build

# Test production build
npm run build

# Check for errors
echo $? # Should be 0

4. Verify Content

# Check document count
find /opt/docker-data/apps/docusaurus/site/docs -name "*.md" -o -name "*.mdx" | wc -l

# Check blog posts
find /opt/docker-data/apps/docusaurus/site/blog -name "*.md" | wc -l

5. Start Services

cd /opt/docker-data/apps/docusaurus
docker-compose up -d

6. Monitor Logs

docker-compose logs -f

7. Test Site Access

# Local test
curl http://localhost:3000

# External test
curl https://brain.id86.net

# Browser test
# Visit https://brain.id86.net

Troubleshooting Restore Issues

Issue: Repository Locked

source /home/rezriz/github/01-production/vps-management/backup-scripts/docusaurus-restic-rclone/backup-config.sh
restic unlock

Issue: Wrong Password

# Verify password
echo $RESTIC_PASSWORD

# Set correct password
export RESTIC_PASSWORD="DocusaurusSecureBackup2026!"

Issue: Rclone Connection Failed

# Test connection
rclone lsd onedrive-donnyaw:

# Reconfigure if needed
rclone config

Issue: Insufficient Disk Space

# Check available space
df -h /opt/docker-data/apps/docusaurus

# Clean up if needed
docker system prune -a

Issue: Permission Denied

# Fix ownership
sudo chown -R rezriz:rezriz /opt/docker-data/apps/docusaurus/site

# Fix permissions
sudo chmod -R 755 /opt/docker-data/apps/docusaurus/site

Issue: Node Modules Missing

cd /opt/docker-data/apps/docusaurus/site
npm install

Issue: Build Fails

# Clear cache
rm -rf .docusaurus
rm -rf build

# Reinstall
rm -rf node_modules
npm install

# Rebuild
npm run build

Recovery Time Estimates

ScenarioEstimated Time
Complete site restore (Restic)10-30 minutes
Complete site restore (Rclone tar)15-45 minutes
Specific file restore2-5 minutes
Directory restore5-15 minutes
Cross-server migration30-60 minutes

Times vary based on backup size and network speed


Validation Checklist

After any restore operation:

  • All critical files present
  • Docker container running
  • Site accessible on localhost
  • Site accessible externally
  • Navigation works correctly
  • Search functionality works
  • Images load correctly
  • No console errors
  • Build completes successfully
  • Backup scripts restored (if applicable)

Best Practices

  1. Test Regularly - Practice restore procedures monthly
  2. Document Changes - Keep notes on custom configurations
  3. Multiple Backups - Don't rely on single backup method
  4. Verify Before Deleting - Always verify restore before removing old data
  5. Maintain Access - Keep credentials in secure password manager
  6. Monitor Logs - Check for errors during restore
  7. Plan Downtime - Schedule maintenance windows for major restores
  8. Keep Scripts Updated - Maintain backup scripts in version control

Emergency Contacts

If you need help with restoration: