Tự động backup website trên Cyberpanel lên Google Drive sử dụng Rclone

Rclone là một công cụ đồng bộ hóa dữ liệu tương tự Rsync nhưng lại được tập trung phát triển chức năng kết nối với các dịch vụ lưu trữ đám mây.

Ưu điểm của việc sử dụng dịch vụ lưu trữ đám mây đó là tốc độ cao (do có server được đặt trên khắp thế giới), an toàn dữ liệu (không lo ngại các vấn đề phần cứng, network) và nhất là hầu hết đều Free. Mình đặc biệt thích những thứ Free!

Rclone hỗ trợ rất nhiều dịch vụ Cloud thông dụng như:

  • Google Drive
  • Amazon S3
  • Openstack Swift / Rackspace cloud files / Memset Memstore
  • Dropbox
  • Google Cloud Storage
  • Amazon Drive
  • Microsoft OneDrive
  • Hubic
  • Backblaze B2
  • Yandex Disk
  • SFTP
  • The local filesystem

Giờ thay vì backup đưa lên VPS khác để lưu trữ, mình chuyển sang sử dụng Google Drive, dung lượng miễn phí 15GB, mua thêm cũng khá rẻ, chỉ 45k/tháng là được 100GB rồi. Bạn nào có tài khoản Google Apps miễn phí nữa thì càng tuyệt vời.

1. Cài đặt Rclone

Cài đặt với hệ điều hành Linux 64bit

cd /root/
wget https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
\cp rclone-v*-linux-amd64/rclone /usr/sbin/
rm -rf rclone-*

2. Tạo kết nối với Goolge Drive

Quá trình cài đặt hoàn tất thì chạy lệnh
rclone config

Bạn sẽ nhận được thông báo: No remotes found - make a new one, nhập n rồi nhấn Enter để tạo kết nối mới.

Ở dòng name bạn nhập remote để đặt tên cho kết nối, bạn có thể chọn tên nào cũng được.

Một danh sách các dịch vụ cloud xuất hiện, hãy chọn số 13, Google Drive rồi nhấn Enter.

Ở 2 dòng tiếp theo Client IDClient Secret bạn hãy để trống nhấn Enter.

Mục Scope that rclone should use when requesting access from drive chọn 1 – drive

Tiếp theo, để trống với ID of the root folderService Account Credentials JSON file path

Khi được hỏi Use auto config? hãy nhập n rồi nhấn Enter. Ngay lập tức, Rclone sẽ đưa ra một đường link, bạn có thể click thẳng vào đó hoặc copy rồi paste vào trình duyệt


Giao diện sẽ xuất hiện như sau:

Nhấn nút Allow để đồng ý, sau đó bạn sẽ nhận được đoạn mã verification code như hình dưới:

Quay trở lại cửa sổ SSH, copy rồi paste code này vào dòng Enter verification code> rồi nhấn Enter.

Chọn n tức no đối với Configure this as a team drive?

Rclone cần xác nhận thông tin một lần nữa, bạn nhấn y để đồng ý rồi nhấn q để thoát khỏi giao diện cấu hình kết nối.

Vậy là xong, giờ bạn có thể test với lệnh liệt kê thư mục trong kết nối remote
# rclone lsd remote:

3. Tạo file script backup

Tạo file backup.sh ở thư mục /root/

nano /root/backup.sh

Copy toàn bộ nội dung script bên dưới rồi paste vào

# Partner - Tu dong backup website CyberPanel toi Google Drive

#!/bin/bash

SERVER_NAME=BACKUP_WEB_BY_PARTNER

TIMESTAMP=$(date +"%F")
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
SECONDS=0

mkdir -p "$BACKUP_DIR/mysql"

echo "Starting Backup Database";
databases=`$MYSQL -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`

for db in $databases; do
$MYSQLDUMP --force --opt $db | gzip > "$BACKUP_DIR/mysql/$db.gz"
done
echo "Finished";
echo '';

echo "Starting Backup Website";
# Loop through /home directory
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 "Finished";
echo '';

size=$(du -sh $BACKUP_DIR | awk '{ print $1}')

echo "Starting Uploading Backup";
/usr/sbin/rclone move $BACKUP_DIR "remote:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1
# Clean up
rm -rf $BACKUP_DIR
/usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME" #Remove all backups older than 2 week
/usr/sbin/rclone -q --min-age 2w rmdirs "remote:$SERVER_NAME" #Remove all empty folders older than 2 week
/usr/sbin/rclone cleanup "remote:" #Cleanup Trash
echo "Finished";
echo '';

duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."

Nhấn Ctrl+O, Enter để lưu và Ctrl+X để thoát.

Phân quyền cho script
chmod +x /root/backup.sh

Vậy là xong rồi đó, giờ bạn có thể test lại bằng cách chạy lệnh:
/root/backup.sh

Thử kiểm tra trên Cloud xem có thư mục mới với dữ liệu backup chưa nhé, hoặc test với lệnh:
rclone lsl remote:BACKUP_WEB_BY_PARTNER

4. Tạo cronjob tự động backup hàng ngày

Giờ mình sẽ cho script tự động chạy lúc 2h00 sáng.

EDITOR=nano crontab -e

Dán nội dung sau vào cửa sổ Terminal

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

Nhấn Ctrl+O, Enter để lưu và Ctrl+X để thoát

Vậy là xong, cứ 2h sáng hàng ngày script sẽ tự động chạy, backup toàn bộ dữ liệu của VPS rồi upload lên Google Drive. Đồng thời, dữ liệu backup trên VPS sẽ được xóa luôn sau khi upload xong.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *