Sao lưu website lên Google Drive với Rclone

Xin chào tất cả các bạn đang xem bài viết của minh. Việc sao lưu dữ liệu luôn là giải pháp ưu tiên của ngươi quản trị web. Giúp dữ liệu của bạn luôn trong trạng thái an toàn, sẵn sàng, khi gặp sự cố.

Thông thường các nhà cung cấp dịch vụ lưu trữ có hỗ trợ bạn sao lưu dữ liệu và lưu trên hệ thống của họ, tuy nhiên sẽ bị giới hạn theo thời gian và số lượng. Vì vậy bạn hãy chủ động thay vì phó thác cho nhà cung cấp.

Mình có viết 2 bài sao lưu dữ liệu với rclone trên control là AApanel và CyberPanel. Vì nó tích hợp sẵn trên Control, nếu bạn đang dùng 2 control này có thể xem bài viết bên dưới. Nhưng nếu bạn chạy thuần script, dựng VPS thủ cộng, hoặc một số control panel chưa tích hợp sẵn thì bạn phải làm thế nào. Bài viết này sẽ hướng dẫn bạn setup thủ công cũng với Rclone.

  • Hướng dẫn cấu hình Backup aaPanel lên Google Drive
  • Hướng dẫn backup CyberPanel lên Google Drive
Sao lưu website lên Google Drive với  Rclone

Bước 1: Cài đặt Rclone

Việc cài đặt Rclone rất đơn giản, bạn chỉ cần copy lệnh bên dưới và dán vào cửa sổ SSH với quyền root là được.

cd /root/
wget https://downloads.rclone.org/v1.57.0/rclone-v1.57.0-linux-amd64.zip
unzip rclone-v*.zip
cp rclone-v*-linux-amd64/rclone /usr/bin/rclone

Bước 2: Cấu hình Rclone

Sau khi cài đặt xong Rclone thành công. Để cấu hình rclone, bạn thực hiện như sau. Tại cửa sổ SSH bạn nhập lệnh rclone config

Sau đó bạn hãy chọn các tuỳ chọn như ảnh bên dưới để cấu hình. Và mình sẽ chú thích tương ứng cho mỗi ảnh để bạn dễ nhận biết.

Chú thích:

  • name>: bạn đặt tên bất kỳ, tốt hơn hết bạn để là backup vì trong script ở Bước 3 mình đã gán sẵn rồi.
Sao lưu website lên Google Drive với  Rclone

Tiếp theo chọn nơi lưu trữ. Rclone hỗ trợ rất nhiều nơi lưu trữ và ở đây mình chọn Google Drive. Tuy phiên bản Rclone mà số thứ tự nó khác nhau. Với bản mình đang dùng thì là số 15.

Sao lưu website lên Google Drive với  Rclone

Sau đó bạn nhập vào số 15 ở mục Storage. Và ở client_id> client_secret> bạn nhận Enter trên bàn phím nhé.

Sao lưu website lên Google Drive với  Rclone

Tiếp theo bạn chọn dòng Full access all files, excluding Application Data Folder tương ứng số 1

  • scope: Nhập vào 1
  • root_folder_id> Nhấn Enter
  • Edit advanced config? (y/n): Chọn n
  • Use auto config?: Chọn n
  • Please go to the following link: Bạn hãy copy liên kết trên và dán vào thanh URL của trình duyệt. Sau đó thực hiện chọn tài khoản Google lưu trữ và làm theo. Khi hiện mã token bạn hãy copy lại.
  • Enter verification code>: Dán mã token vừa lấy xong vào.
Sao lưu website lên Google Drive với  Rclone

Sau đó bạn chọn như sau để tiếp tục.

  • Configure this as a Shared Drive (Team Drive): Chọn n
Sao lưu website lên Google Drive với  Rclone

Bước 3: Script backup lên Google Drive

Sau khi đã hoàn tất Bước 2. Bạn hãy tạo một script để backup website đây lên Google Drive. Mình sẽ tạo script như sau.

touch /root/auto-backup.sh
chmod +x /root/auto-backup.sh
vi /root/auto-backup.sh

Sau đó bạn copy toàn bộ script bên dưới. Và dán vào file auto-backup.sh vừa tạo. Nhưng lưu ý cho mình bạn cần thay đổi một số thông tin sau. Trong đó các thông tin bạn cần thay là:

  • MYSQL_USER= Ở đây mình backup Database với user root. Nếu bạn sử dụng user root thì giữ nguyên, nếu backup duy nhất 1 Database thì nhập vào user của database cần backup
  • MYSQL_PASSWORD= Bạn hãy nhập vào mật khẩu ROOT MYSQL hoặc mật khẩu của Database nếu sử dụng user
  • THƯ MỤC CHÍNH CỦA WEB: Nếu mã nguồn web bạn nằm ở /home/ thì bạn để nguyên script bên dưới. Nhưng nếu mã nguồn nằm thư mục khác như thì bạn hãy thay đổi lại.
#!/bin/bash
 
SERVER_NAME=backup-all ## Tên thư mục trong Google Drive 
 
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL_USER="root"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="PmHmPkOqPPG4" ## Nhap Pass Root MYSQL cua ban vao
MYSQLDUMP=/usr/bin/mysqldump
SECONDS=0
 
mkdir -p "$BACKUP_DIR/mysql"

echo "Backup Database In Process";
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`
 
for db in $databases; do
	$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done
echo "Backup Database Successful";
echo '';
 
echo "Backup Website In Process";
# THƯ MỤC CHÍNH CỦA WEB
for D in /home/*; do
	if [ -d "${D}" ]; then #If a directory
		domain=${D##*/} # Domain name
		echo "- "$domain;
		zip -r $BACKUP_DIR/$domain.zip /home/$domain/public_html/ -q -x /home/$domain/public_html/wp-content/cache/*** #Exclude cache
	fi
done
echo "Backup Website Successful";
echo '';

echo "Dang tien hanh Backup len Google Drive";
/usr/bin/rclone move $BACKUP_DIR "backup:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1  #backup: remote config name created in previous step.
# Clean up
rm -rf $BACKUP_DIR  #Delete backup directory on VPS
/usr/bin/rclone -q --min-age 1w delete "backup:$SERVER_NAME" #Remove all backups older than 1 week on Google Drive Backup Directory
/usr/bin/rclone -q --min-age 1w rmdirs "backup:$SERVER_NAME" #Remove all empty folders older than 1 week Google Drive Backup Directory
/usr/bin/rclone cleanup "backup:" #Cleanup Trash , Delete all files in trash directory
echo "Da dua tat ca du lieu len Gooogle Drive hoan tat";
echo '';
 
duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."

Lưu ý: Trong script trên mình đang setup cố định sao lưu 7 ngày liên tục. Bản sao lưu thứ 8 sẽ bị đè và thay thế bản cũ. Các bản sao lưu sẽ tự động xoá trên Google Drive. Cụ thể bạn sẽ thấy ở phần min-age 1w. Nếu bạn muốn giữ lâu hơn hãy thay đổi số này theo tuần hoặc ngày.

Ví dụ:

  • 2w: Tương ứng 2 tuần
  • 10d: Tương ứng 10 ngày

Bước 4: Tạo cron sao lưu tự động và xoá

Mình sẽ tạo một cron để tự động sao lưu định kỳ. Ở cửa sổ SSH bạn nhập lệnh crontab -e sau đó nhấn phím i hoặc Insert và nhập vào lịch sau

0 1 * * *  /root/auto-backup.sh > /dev/null 2>&1

Lịch này là cứ đúng 1 giờ sáng hằng ngày sẽ tự động chạy Backup move Google Drive.

Như vậy đã hoàn tất các bước cấu hình tự động sao lưu website lên Google Drive với Rclone. Bên dưới là một ảnh mình thực hiện trên một số VPS.

Sao lưu website lên Google Drive với  Rclone
Sao lưu website lên Google Drive với  Rclone

Bước 5: Tải file backup từ Cloud xuống VPS

Trường hợp bạn muốn tải trực tiếp file từ Google Drive xuống VPS. Bạn sử dụng lệnh sau

rclone copy "backup:/backup-all/file-can-tai" /thu-muc-luu-file

Ví dụ: rclone copy "backup:/backup-all/2021-08-29" /home/dotrungquan.info/public_html

Trong đó:

  • rclone copy: Lệnh copy file về
  • backup: tên cấu hình rclone mà bạn đặt ở Bước 2
  • backup-all: Tên thư mục lưu ở Google Drive
  • 2021-08-29: File cần tải về
  • /home/dotrungquan.info/public_html: Thư mục lưu file tải về ở VPS

Chúc bạn thực hiện thành công.

Bài liên quan