Cara Backup & Restore Bot WhatsApp
Panduan backup dan restore bot WhatsApp. Session, database, settings. Jangan sampai data hilang! Tutorial lengkap!
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, dll1. 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>&12. 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).gzMySQL:
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.gzSQLite:
bash
# Simply copy the file
cp database.sqlite /backup/database-$(date +%Y%m%d).sqliteJSON/File-based:
bash
# Backup data files
tar -czvf /backup/data-$(date +%Y%m%d).tar.gz data/ *.json3. 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.jsTemplate Messages:
bash
# Jika templates di file
cp -r templates/ /backup/templates-$(date +%Y%m%d)/
# Jika di database, sudah ter-backup bersama database4. 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 wabotRestore 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.sqliteFull 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 jamStorage 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 rumahTesting 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 issuesChecklist 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 setupFAQ
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 Backup | Dengan Backup |
|---|---|
| Crash = Mulai dari nol | Restore dalam menit |
| Scan QR lagi | Session preserved |
| Data hilang | Data aman |
| Downtime lama | Quick recovery |
Backup today, sleep well tonight!