
Backup ที่เก็บบนเครื่องเดียวกับ Production ไม่ใช่ Backup จริง — ถ้า server พังหรือถูกแฮก backup ก็พังตามไปด้วย ทางที่ปลอดภัยที่สุดคือส่ง backup ออกไป Cloud Storage
rclone คือ "rsync สำหรับ cloud" รองรับ 70+ ผู้ให้บริการ: S3, Google Drive, OneDrive, Backblaze B2, Dropbox, Wasabi, ฯลฯ คู่มือนี้พาตั้งค่า rclone บน VPS Ubuntu + เขียน script + cron ส่ง backup ขึ้น S3 และ Google Drive อัตโนมัติทุกวัน
ต้องเตรียม: VPS Ubuntu, sudo access, บัญชี Cloud Storage (S3 / B2 / Google Drive / OneDrive) ที่ต้องการส่ง backup ขึ้น
ทำไมต้องใช้ rclone — ไม่ใช้ aws-cli หรือ gsutil
- One tool หลายผู้ให้บริการ — เรียนคำสั่งเดียวใช้ได้กับทุก backend
- Encryption ในตัว — backend ชื่อ
cryptเข้ารหัสไฟล์ก่อนส่งขึ้น cloud - Bandwidth limit — กัน rclone กิน internet ช่วงเวลาทำการ
- Resume — ส่งต่อจากที่ค้างไว้ได้ถ้าเน็ตหลุด
- Filters — ส่งเฉพาะไฟล์ที่ต้องการ (--exclude *.log)
ขั้นที่ 1 — ติดตั้ง rclone
วิธีที่ดีที่สุดคือ official installer เพราะ Ubuntu repo มักจะมีเวอร์ชันเก่า:
sudo -v ; curl https://rclone.org/install.sh | sudo bash rclone version
ควรเห็นเวอร์ชันใหม่กว่า 1.65
ขั้นที่ 2 — Configure Remote (กรณี S3)
เริ่ม wizard:
rclone config
ทำตาม prompt:
- เลือก
nสร้างใหม่ - ชื่อ:
s3backup - เลือก Storage:
4(Amazon S3 Compliant) - provider:
AWS(หรือWasabi,Backblaze) - access_key_id: ใส่ AWS Access Key
- secret_access_key: ใส่ Secret Key
- region:
ap-southeast-1(Singapore) - endpoint: ปล่อยว่างถ้า AWS
- acl:
private
เสร็จแล้วทดสอบ:
rclone lsd s3backup:
ขั้นที่ 3 — Configure Google Drive
Google Drive ต้องใช้ OAuth — แต่ถ้า VPS ไม่มี browser ให้รัน wizard บนเครื่อง local แล้วคัดลอก token มา
บนเครื่อง local (มี browser):
rclone config
เลือก Storage: Google Drive ปล่อย client_id/secret ว่าง (ใช้ default) แล้วเลือก y เปิด browser → ล็อกอินอนุญาต
จะได้ token JSON ที่ ~/.config/rclone/rclone.conf คัดลอกไปที่ VPS:
scp ~/.config/rclone/rclone.conf user@your-vps:/home/user/.config/rclone/rclone.conf
ขั้นที่ 4 — เปิด Encryption ก่อนส่งขึ้น Cloud (ทางเลือกที่แนะนำ)
rclone crypt เข้ารหัสชื่อไฟล์และเนื้อหาก่อนส่งขึ้น cloud — ผู้ให้บริการมองไม่เห็นข้อมูล
rclone config
เลือก n ตั้งชื่อ backup_enc เลือก crypt, remote: s3backup:bucket-name/encrypted, ตั้ง password (จดไว้! ลืมแล้วกู้ไม่ได้!)
⚠️ ห้ามลืม password ของ crypt remote — rclone ไม่มี recovery ถ้าลืมก็คือลืมตลอดไป เก็บใน password manager และมี backup ของ password เอง
ขั้นที่ 5 — Script Backup รายวัน
สร้างไฟล์ /usr/local/bin/backup-daily.sh:
sudo nano /usr/local/bin/backup-daily.sh
เนื้อหา (ตัวอย่าง backup MySQL + เว็บ + Cloud):
#!/bin/bash set -e DATE=$(date +%F-%H%M) BACKUP_DIR=/tmp/backup_$DATE mkdir -p $BACKUP_DIR # 1. Dump MySQL mysqldump --all-databases --single-transaction \ -u backup -p'BackupPassword!' > $BACKUP_DIR/mysql_all.sql # 2. Archive web folder tar -czf $BACKUP_DIR/www.tar.gz /var/www # 3. ส่งขึ้น S3 (encrypted) rclone copy $BACKUP_DIR backup_enc:daily/$DATE \ --transfers=4 --checkers=8 \ --bwlimit "08:00,2M 22:00,off" \ --log-file=/var/log/rclone-backup.log # 4. ลบ backup เก่ากว่า 30 วันบน cloud rclone delete backup_enc:daily --min-age 30d --log-file=/var/log/rclone-backup.log # 5. ลบไฟล์ชั่วคราว rm -rf $BACKUP_DIR echo "Backup completed: $DATE" >> /var/log/rclone-backup.log
ให้สิทธิ์ execute:
sudo chmod +x /usr/local/bin/backup-daily.sh
ขั้นที่ 6 — ตั้ง Cron Job รันตี 3 ทุกวัน
sudo crontab -e
เพิ่ม:
0 3 * * * /usr/local/bin/backup-daily.sh >> /var/log/cron-backup.log 2>&1
ขั้นที่ 7 — ทดสอบ Restore
Backup ที่ไม่เคย restore = ไม่มี backup ลองดึงไฟล์ลงมา:
rclone copy backup_enc:daily/2026-05-15-0300/www.tar.gz /tmp/test_restore/ ls -la /tmp/test_restore/
เคล็ดลับ: ทดสอบ restore เดือนละครั้ง — กัน script เสียโดยไม่รู้ตัว
คำสั่ง rclone ที่ใช้บ่อย
| คำสั่ง | คำอธิบาย |
|---|---|
rclone copy SRC REMOTE: | คัดลอก (ไม่ลบที่ปลายทาง) |
rclone sync SRC REMOTE: | sync แบบ mirror (ลบไฟล์ที่ไม่มี SRC) |
rclone ls REMOTE: | ดูไฟล์ทั้งหมด |
rclone lsd REMOTE: | ดูเฉพาะ directory |
rclone size REMOTE: | ดูขนาดรวม |
rclone check SRC REMOTE: | เช็คว่า file ตรงกัน |
rclone mount REMOTE: /mnt | mount cloud เป็น folder |
Checklist Backup Strategy 3-2-1
กลยุทธ์ 3-2-1 เป็นมาตรฐานสากลที่ผู้ดูแลระบบทั่วโลกใช้มาหลายสิบปี แนวคิดคือกระจาย Backup ออกหลายที่หลายรูปแบบเพื่อให้โอกาสสูญข้อมูลพร้อมกันทุกสำเนาในคราวเดียวนั้นน้อยที่สุดเท่าที่เป็นไปได้:
- 3 copies — ต้นฉบับ + backup ในเครื่อง + backup บน cloud
- 2 media — Disk + Cloud (ต่างประเภท)
- 1 off-site — อย่างน้อย 1 copy ออกนอกตึก (rclone ช่วยตรงนี้)
- เข้ารหัสด้วย crypt remote — ผู้ให้บริการมองไม่เห็นข้อมูล
- ตั้ง retention — ลบ backup เก่ากว่า X วันโดยอัตโนมัติ
- ทดสอบ restore เดือนละครั้ง — backup ที่ restore ไม่ได้ = ไม่มี backup
สำหรับ VPS ที่ใช้งาน WordPress หรือ E-Commerce แนะนำให้เพิ่ม Weekly Snapshot ของ Disk ไว้อีกชั้นหนึ่งนอกเหนือจาก Daily Backup ด้วย rclone เพราะ Snapshot สามารถ Restore ได้เร็วกว่าในกรณีที่ระบบปฏิบัติการเสียหายทั้งหมด ขณะที่ rclone Backup เหมาะกับการกู้ไฟล์หรือฐานข้อมูลเฉพาะส่วนได้อย่างยืดหยุ่น
เปรียบเทียบ Cloud Storage สำหรับ VPS Backup
rclone รองรับผู้ให้บริการหลายรายที่มีราคาและนโยบายต่างกัน การเลือกให้เหมาะสมช่วยประหยัดค่าใช้จ่ายและเพิ่มประสิทธิภาพ Backup ได้อย่างมาก
| ผู้ให้บริการ | ราคา Storage | Egress (ดึงข้อมูล) | เหมาะกับ |
|---|---|---|---|
| Amazon S3 Standard | ~$0.023/GB/เดือน | $0.09/GB | ทั่วไป, ต้องการ SLA สูง |
| Backblaze B2 | $0.006/GB/เดือน | $0.01/GB | งบน้อย, backup ขนาดใหญ่ |
| Wasabi | $0.0069/GB/เดือน | ฟรี | ต้องดึงข้อมูลบ่อย, S3-compatible |
| Google Drive (15 GB Free) | ฟรี 15 GB / $2.99/เดือน 100 GB | ฟรี | โปรเจกต์ขนาดเล็ก, งบน้อย |
| S3 Glacier Instant | $0.004/GB/เดือน | $0.03/GB | Archive ระยะยาว, restore ไม่บ่อย |
การตั้ง Notification เมื่อ Backup ล้มเหลว
Cron Job ที่เงียบเกินไปคือกับดักที่อันตราย — ถ้า backup script ล้มเหลวโดยไม่มีการแจ้งเตือน คุณจะรู้ตัวก็ต่อเมื่อต้องการ restore จริงๆ ซึ่งอาจสายเกินไป วิธีเพิ่ม Notification ด้วย curl ส่ง Email หรือ Webhook:
#!/bin/bash
# เพิ่มที่ท้าย backup-daily.sh
WEBHOOK_URL="https://hooks.yourservice.com/abc123"
LOG="/var/log/rclone-backup.log"
# ตรวจสอบ exit code ของ rclone
if [ $? -eq 0 ]; then
STATUS="✓ Backup สำเร็จ: $(date +%F)"
else
STATUS="✗ Backup ล้มเหลว: $(date +%F) — ดู $LOG"
fi
# ส่ง Webhook (Slack / Line Notify / Discord)
curl -s -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"$STATUS\"}" "$WEBHOOK_URL"อีกวิธีที่ง่ายกว่าคือใช้ healthchecks.io (มีบริการฟรี) — script ส่ง ping ไปทุกครั้งที่ backup สำเร็จ ถ้าไม่ได้รับ ping ตามเวลา ระบบจะส่ง Email แจ้งอัตโนมัติ:
# เพิ่มบรรทัดนี้ที่ท้าย script (แทน echo สุดท้าย) curl -fsS --retry 3 https://hc-ping.com/YOUR-UUID-HERE > /dev/null
ตรวจสอบขนาด Backup และติดตาม Trend ค่าใช้จ่าย
การรู้ว่า Backup ใช้พื้นที่เท่าไรในแต่ละวันช่วยให้วางแผนค่าใช้จ่าย Cloud Storage ได้แม่นยำขึ้น และยังช่วยตรวจจับความผิดปกติได้เร็ว เช่น ถ้าขนาด Backup เพิ่มขึ้นกะทันหันหลายเท่าอาจหมายถึง Log file วิ่งออกนอกควบคุมหรือฐานข้อมูลโตผิดปกติ ใช้คำสั่งเหล่านี้ติดตาม:
# ขนาดรวมทั้งหมดของ Backup บน Cloud rclone size backup_enc:daily # ขนาดของ Backup วันใดวันหนึ่ง rclone size backup_enc:daily/2026-06-01-0300 # รายการ 10 ไฟล์ใหญ่สุด rclone ls backup_enc:daily | sort -rn | head -10 # สรุปพื้นที่ที่ใช้ไปทั้งหมดบน remote rclone about backup_enc:
ตั้ง Cron เพิ่มเติมรายสัปดาห์ให้บันทึกผล rclone size ลง Log หรือส่ง Webhook ใช้เวลาตรวจสอบน้อยกว่า 2 นาทีต่อสัปดาห์แต่ช่วยจับปัญหาได้ก่อนที่ค่า Cloud Storage จะบวมเกินงบ
การเลือก Cloud Storage ให้เหมาะกับงบประมาณและขนาด Backup
rclone รองรับผู้ให้บริการหลายรายที่มีราคาและนโยบาย Egress ต่างกัน การเลือกให้เหมาะสมช่วยประหยัดค่าใช้จ่ายได้มาก โดยเฉพาะเมื่อขนาด Backup ใหญ่ขึ้นทุกเดือน ตารางต่อไปนี้เปรียบเทียบผู้ให้บริการหลักที่นิยมใช้กับ rclone:
| ผู้ให้บริการ | ค่า Storage | ค่า Egress | เหมาะกับ |
|---|---|---|---|
| Amazon S3 Standard | ~$0.023/GB/เดือน | $0.09/GB | ทั่วไป, ต้องการ SLA สูง |
| Backblaze B2 | $0.006/GB/เดือน | $0.01/GB | งบน้อย, backup ขนาดใหญ่ |
| Wasabi | $0.0069/GB/เดือน | ฟรี | ต้องดึงข้อมูลบ่อย |
| Google Drive (15 GB ฟรี) | ฟรี 15 GB / $2.99/เดือน 100 GB | ฟรี | โปรเจกต์เล็ก, งบจำกัด |
| S3 Glacier Instant | $0.004/GB/เดือน | $0.03/GB | Archive ระยะยาว, restore ไม่บ่อย |
หากต้องการประหยัดสุดและข้อมูลไม่ถึงระดับ Sensitive มาก Backblaze B2 มักคุ้มที่สุดสำหรับ VPS ทั่วไป ส่วนถ้าต้องการความสะดวกและ Egress ฟรี Wasabi เป็นตัวเลือกที่ดีสำหรับทีมที่ต้อง restore บ่อยระหว่าง Development และ Testing
การตั้ง Notification เมื่อ Backup ล้มเหลว
Cron Job ที่ทำงานเงียบๆ โดยไม่มีระบบแจ้งเตือนคืออันตรายที่แฝงตัวอยู่ในระบบ ถ้า Backup ล้มเหลวซ้ำๆ โดยที่คุณไม่รู้ตัว เมื่อถึงเวลา Restore จริงอาจพบว่าไม่มี Backup ที่ดีเลย วิธีเพิ่ม Notification ง่ายๆ ด้วย curl ส่ง Webhook:
#!/bin/bash
WEBHOOK_URL="https://hooks.yourservice.com/abc123"
LOG="/var/log/rclone-backup.log"
if [ $? -eq 0 ]; then
STATUS="Backup สำเร็จ: $(date +%F)"
else
STATUS="Backup ล้มเหลว: $(date +%F) — ดู $LOG"
fi
curl -s -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"$STATUS\"}" "$WEBHOOK_URL"อีกวิธีที่ง่ายและแนะนำคือ healthchecks.io (มี Free tier) — เพิ่มบรรทัดนี้ท้าย Script:
curl -fsS --retry 3 https://hc-ping.com/YOUR-UUID-HERE > /dev/null
ระบบจะส่ง Email แจ้งอัตโนมัติถ้าไม่ได้รับ Ping ตามเวลาที่ตั้งไว้ ไม่ต้องดูแล Script แจ้งเตือนเองให้ยุ่งยาก
rclone Filter — ส่งเฉพาะไฟล์ที่จำเป็น ลด Cloud Cost
การส่งไฟล์ทั้งหมดขึ้น Cloud อาจทำให้เสียค่าใช้จ่ายสูงโดยไม่จำเป็น rclone มี Filter ที่ยืดหยุ่นช่วยให้เลือกได้ว่าจะส่งไฟล์อะไรและละเว้นอะไร
ตัวอย่างไฟล์ /etc/rclone-backup.filter:
# รวม + /var/www/** + /etc/nginx/** + /home/*/public_html/** + *.sql + *.sql.gz # ละเว้น - *.log - *.tmp - /tmp/** - /var/cache/** - node_modules/** - .git/** - __pycache__/**
ใช้กับคำสั่ง rclone:
rclone copy /var/ backup_enc:daily/$DATE \ --filter-from /etc/rclone-backup.filter \ --transfers=4 \ --log-file=/var/log/rclone-backup.log
เคล็ดลับ: รัน rclone copy --dry-run --filter-from /etc/rclone-backup.filter /var/ backup_enc:daily/test ก่อน เพื่อดูว่าไฟล์ไหนจะถูกส่งโดยไม่ได้ส่งจริง
ต้องการ VPS สำหรับ backup ที่เสถียร?
AsiaGB VPS เริ่มต้น 500 บาท/เดือน SSD เร็ว Network Bandwidth สูง เหมาะกับการส่ง backup ขนาดใหญ่ขึ้น Cloud Storage อัตโนมัติ
ดูแพ็กเกจ VPS