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
/docsdirectory - Restore only
/blogdirectory - 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
| Scenario | Estimated Time |
|---|---|
| Complete site restore (Restic) | 10-30 minutes |
| Complete site restore (Rclone tar) | 15-45 minutes |
| Specific file restore | 2-5 minutes |
| Directory restore | 5-15 minutes |
| Cross-server migration | 30-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
- Test Regularly - Practice restore procedures monthly
- Document Changes - Keep notes on custom configurations
- Multiple Backups - Don't rely on single backup method
- Verify Before Deleting - Always verify restore before removing old data
- Maintain Access - Keep credentials in secure password manager
- Monitor Logs - Check for errors during restore
- Plan Downtime - Schedule maintenance windows for major restores
- Keep Scripts Updated - Maintain backup scripts in version control
Emergency Contacts
If you need help with restoration:
- Documentation: https://brain.id86.net/docs/knowledge/docusaurus/09.Backup/
- GitHub: https://github.com/donnyaw/vps-management/tree/main/backup-scripts
- Restic Docs: https://restic.readthedocs.io/
- Rclone Docs: https://rclone.org/docs/