Cara Backup & Restore Bot WhatsApp

Panduan backup dan restore bot WhatsApp. Session, database, settings. Jangan sampai data hilang! Tutorial lengkap!

Cara Backup & Restore Bot WhatsApp
Cara Backup & Restore Bot WhatsApp

Bot crash, data hilang? Jangan sampai!

Backup rutin memastikan bot kamu bisa pulih dengan cepat dari masalah apapun.


Apa yang Perlu Di-Backup?

📁 KOMPONEN PENTING:

1. Session/Auth Data
   → Supaya tidak perlu scan QR lagi

2. Database
   → Chat history, customer data, settings

3. Configuration
   → .env, config files, templates

4. Bot Code
   → Source code (harusnya di Git)

5. Media Files
   → Gambar katalog, dokumen, dll

1. Backup Session WhatsApp

whatsapp-web.js Session:

bash

# Lokasi default session
ls -la .wwebjs_auth/

# Output:
# session-client/
#   ├── Default/
#   │   ├── IndexedDB/
#   │   ├── Local Storage/
#   │   └── ... (banyak file)

Backup Session:

bash

# Cara 1: Compress folder
tar -czvf backup-session-$(date +%Y%m%d).tar.gz .wwebjs_auth/

# Cara 2: Copy ke backup folder
cp -r .wwebjs_auth/ /backup/wa-session-$(date +%Y%m%d)/

# Cara 3: Rsync (untuk remote backup)
rsync -avz .wwebjs_auth/ user@backup-server:/backups/wa-session/

Automated Session Backup:

bash

#!/bin/bash
# backup-session.sh

BACKUP_DIR="/backup/wa-sessions"
SESSION_DIR=".wwebjs_auth"
DATE=$(date +%Y%m%d_%H%M%S)

# Create backup
tar -czvf $BACKUP_DIR/session-$DATE.tar.gz $SESSION_DIR

# Keep only last 7 backups
cd $BACKUP_DIR
ls -t session-*.tar.gz | tail -n +8 | xargs -r rm

echo "Session backup completed: session-$DATE.tar.gz"

Cron untuk Auto Backup:

bash

# Backup setiap 6 jam
0 */6 * * * /path/to/backup-session.sh >> /var/log/wa-backup.log 2>&1

2. Backup Database

MongoDB:

bash

# Backup database
mongodump --db wabot --out /backup/mongo-$(date +%Y%m%d)

# Atau dengan compression
mongodump --db wabot --gzip --archive=/backup/wabot-$(date +%Y%m%d).gz

MySQL:

bash

# Backup database
mysqldump -u root -p wabot > /backup/wabot-$(date +%Y%m%d).sql

# Dengan compression
mysqldump -u root -p wabot | gzip > /backup/wabot-$(date +%Y%m%d).sql.gz

SQLite:

bash

# Simply copy the file
cp database.sqlite /backup/database-$(date +%Y%m%d).sqlite

JSON/File-based:

bash

# Backup data files
tar -czvf /backup/data-$(date +%Y%m%d).tar.gz data/ *.json

3. Backup Configuration

Environment & Config:

bash

# Backup .env (SENSITIF - simpan aman!)
cp .env /backup/env-$(date +%Y%m%d).env

# Backup config files
tar -czvf /backup/config-$(date +%Y%m%d).tar.gz config/ *.config.js

Template Messages:

bash

# Jika templates di file
cp -r templates/ /backup/templates-$(date +%Y%m%d)/

# Jika di database, sudah ter-backup bersama database

4. Full Backup Script

bash

#!/bin/bash
# full-backup.sh

# Variables
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/$DATE"
APP_DIR="/home/claude/wabot"

# Create backup directory
mkdir -p $BACKUP_DIR

echo "Starting full backup..."

# 1. Session
echo "Backing up session..."
tar -czvf $BACKUP_DIR/session.tar.gz -C $APP_DIR .wwebjs_auth/

# 2. Database (MongoDB example)
echo "Backing up database..."
mongodump --db wabot --gzip --archive=$BACKUP_DIR/database.gz

# 3. Configuration
echo "Backing up config..."
cp $APP_DIR/.env $BACKUP_DIR/
tar -czvf $BACKUP_DIR/config.tar.gz -C $APP_DIR config/

# 4. Media files
echo "Backing up media..."
tar -czvf $BACKUP_DIR/media.tar.gz -C $APP_DIR media/

# 5. Create manifest
echo "Creating manifest..."
cat > $BACKUP_DIR/manifest.txt << EOF
Backup Date: $(date)
Components:
- session.tar.gz (WhatsApp session)
- database.gz (MongoDB dump)
- .env (Environment variables)
- config.tar.gz (Configuration files)
- media.tar.gz (Media files)
EOF

# 6. Compress everything
echo "Creating final archive..."
tar -czvf /backup/full-backup-$DATE.tar.gz -C /backup $DATE

# 7. Cleanup temp
rm -rf $BACKUP_DIR

# 8. Keep only last 7 full backups
cd /backup
ls -t full-backup-*.tar.gz | tail -n +8 | xargs -r rm

echo "Full backup completed: full-backup-$DATE.tar.gz"

Restore dari Backup

Restore Session:

bash

# Stop bot dulu!
pm2 stop wabot

# Extract session backup
tar -xzvf backup-session-20260217.tar.gz

# Restart bot (tidak perlu scan QR lagi)
pm2 start wabot

Restore Database:

bash

# MongoDB
mongorestore --db wabot --gzip --archive=/backup/wabot-20260217.gz

# MySQL
mysql -u root -p wabot < /backup/wabot-20260217.sql

# SQLite
cp /backup/database-20260217.sqlite database.sqlite

Full Restore:

bash

#!/bin/bash
# restore.sh

BACKUP_FILE=$1
APP_DIR="/home/claude/wabot"
TEMP_DIR="/tmp/restore-$$"

if [ -z "$BACKUP_FILE" ]; then
    echo "Usage: ./restore.sh <backup-file.tar.gz>"
    exit 1
fi

echo "Starting restore from $BACKUP_FILE..."

# Stop bot
pm2 stop wabot

# Extract backup
mkdir -p $TEMP_DIR
tar -xzvf $BACKUP_FILE -C $TEMP_DIR

# Find the backup folder
BACKUP_DIR=$(ls $TEMP_DIR)

# Restore session
echo "Restoring session..."
rm -rf $APP_DIR/.wwebjs_auth
tar -xzvf $TEMP_DIR/$BACKUP_DIR/session.tar.gz -C $APP_DIR

# Restore database
echo "Restoring database..."
mongorestore --db wabot --drop --gzip --archive=$TEMP_DIR/$BACKUP_DIR/database.gz

# Restore config
echo "Restoring config..."
cp $TEMP_DIR/$BACKUP_DIR/.env $APP_DIR/
tar -xzvf $TEMP_DIR/$BACKUP_DIR/config.tar.gz -C $APP_DIR

# Restore media
echo "Restoring media..."
tar -xzvf $TEMP_DIR/$BACKUP_DIR/media.tar.gz -C $APP_DIR

# Cleanup
rm -rf $TEMP_DIR

# Restart bot
pm2 start wabot

echo "Restore completed!"

Cloud Backup Options

Google Drive:

bash

# Install rclone
curl https://rclone.org/install.sh | sudo bash

# Configure (follow prompts)
rclone config

# Backup to Google Drive
rclone copy /backup/full-backup-latest.tar.gz gdrive:wa-backups/

AWS S3:

bash

# Install AWS CLI
pip install awscli

# Configure
aws configure

# Backup to S3
aws s3 cp /backup/full-backup-latest.tar.gz s3://my-bucket/wa-backups/

Dropbox:

bash

# Using rclone
rclone copy /backup/full-backup-latest.tar.gz dropbox:wa-backups/

Backup Best Practices

Frequency:

📅 JADWAL RECOMMENDED:

Session: Setiap 6 jam
Database: Setiap 24 jam (atau setelah changes besar)
Full backup: Setiap minggu
Retention: Simpan 7-30 hari backup

Untuk bisnis critical:
Session: Setiap 1 jam
Database: Setiap 6 jam

Storage Rules (3-2-1):

3️⃣ Simpan 3 copies
2️⃣ Di 2 media berbeda (lokal + cloud)
1️⃣ 1 copy di offsite (beda lokasi)

Contoh:
- Copy 1: Server lokal
- Copy 2: Google Drive
- Copy 3: External HD di rumah

Testing Restore:

⚠️ PENTING!

Backup yang tidak pernah di-test = Tidak ada backup!

Test restore setiap bulan:
1. Spin up test environment
2. Restore dari backup
3. Verify bot berjalan normal
4. Document any issues

Checklist Backup

✅ BACKUP CHECKLIST:

□ Session/auth data backed up
□ Database backed up
□ Config files backed up
□ Media files backed up
□ Automation script created
□ Cron job scheduled
□ Cloud backup configured
□ Restore tested
□ Documentation updated
□ Monitoring/alerts setup

FAQ

Session backup expired?

Session WhatsApp bisa expire jika tidak digunakan >14 hari. Backup yang lebih baru lebih safe.

Database backup besar banget?

Gunakan incremental backup untuk database besar, atau compress dengan gzip.

Apakah backup session bisa dipindah ke server lain?

Ya! Backup session bisa di-restore di server berbeda. Ini cara migrasi bot.


Kesimpulan

Backup = Insurance untuk bot kamu!

Tanpa BackupDengan Backup
Crash = Mulai dari nolRestore dalam menit
Scan QR lagiSession preserved
Data hilangData aman
Downtime lamaQuick recovery

Backup today, sleep well tonight!

Setup Auto-Backup →


Artikel Terkait