Rclone – Backup toàn bộ VPS lên Google Drive

Trước đây mình vẫn dùng VPS để chứa các bản backup sử dụng công cụ Duplicity hoặc Rsync. Tuy nhiên, hiện giờ đã có một phương pháp mới hiệu quả hơn, tiết kiệm hơn (Free), đó là sao lưu lên Cloud với Rclone.

backup-server-google-drive

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 Cloud Drive
  • Microsoft One Drive
  • Hubic
  • Backblaze B2
  • Yandex Disk

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.

Trong bài viết này sẽ có 2 phần chính, 1 là cài đặt Rclone trên VPS, 2 là sử dụng Rclone để upload file nén backup lên Google Drive. Với những cloud service khác các bạn làm tương tự.

Việc tạo file backup toàn bộ dữ liệu VPS mình đã hướng dẫn chi tiết trong bài viết Hướng dẫn tự động sao lưu toàn bộ VPS, bài viết này sẽ chỉ tập trung vào việc cài đặt tự động upload file nén lên Google Drive. Xem thêm hướng dẫn sử dụng Rclone với Google Drive và các dịch vụ cloud khác tại đây.

Kịch bản tự động backup như sau:

  • Sao lưu toàn bộ database MySQL ra file .SQL, mỗi database một file
  • Sao lưu toàn bộ code trong thư mục /home/domain.com/public_html/
  • Sao lưu toàn bộ cấu hình Nginx trong thư mục /etc/nginx/conf.d/
  • Nén tất cả dữ liệu vào file .ZIP
  • Upload file backup lên Google Drive vào lúc 2h00 sáng
  • Tự động xóa file backup trên VPS sau khi upload xong, xóa file backup trên Google Drive nếu quá 2 tuần

Giờ bắt đầu vào việc nhé.

I. Hướng dẫn cài đặt Rclone

1. Cài đặt Rclone

Rclone là một chương trình dòng lệnh nên mình sẽ down file xuống rồi di chuyển file chạy đến thư mục /usr/sbin/ của VPS để sử dụng sau này.

– Cài đặt với phiên bản hệ điều hành Linux 64bit

cd /root/
 wget http://downloads.rclone.org/rclone-v1.33-linux-amd64.zip
 unzip rclone-v1.33-linux-amd64.zip
 cp rclone-v*-linux-amd64/rclone /usr/sbin/
 rm -rf rclone-*

– Cài đặt với phiên bản hệ điều hành Linux 32bit

cd /root/
 wget http://downloads.rclone.org/rclone-v1.33-linux-386.zip
 unzip rclone-v1.33-linux-386.zip
 cp rclone-v*-linux-386/rclone /usr/sbin/
 rm -rf rclone-*

Link download trực tiếp ở đây.

Giờ bạn có thể sử dụng lệnh rclone để xem thêm thông tin sử dụng.

2. Một số câu lệnh thông dụng

Các câu lệnh sử dụng Rclone thường có dạng như sau:

rclone command  

Trong đó command là câu lệnh, parameters là các tham số.

Một số lệnh thông dụng khi dùng Rclone:

  • rclone config – Cấu hình kết nối đến dịch vụ cloud.
  • rclone copy – Copy files từ server đến cloud, skip nếu đã tồn tại dữ liệu.
  • rclone sync – Synchronize giữa server và cloud, chỉ update dữ liệu trên cloud mà thôi.
  • rclone move – Move files từ server lên cloud.
  • rclone delete – Xóa dữ liệu của folder.
  • rclone purge – Xóa dữ liệu của folder và toàn bộ nội dung bên trong.
  • rclone mkdir – Tạo folder.
  • rclone rmdir – Xóa folder.
  • rclone check – Kiểm tra dữ liệu server và cloud có đồng bộ hay không.
  • rclone ls – Liệt kê toàn bộ dữ liệu gồm size và path.
  • rclone lsd – Liệt kê toàn bộ thư mục.
  • rclone lsl – Liệt kê toàn bộ dữ liệu gồm modification time, size và path.
  • rclone size – Trả về kích thước thư mục.

Thông tin chi tiết từng lệnh bạn xem thêm ở đây.

II. Backup VPS lên Google Drive với Rclone

1. Tạo kết nối với Google Drive

Đầu tiên chúng ta sẽ cấu hình kết nối Rclone với Google Drive, việc này chỉ phải làm 1 lần duy nhất.

Kết nối SSH với VPS rồi 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ố 7, 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.

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.

tao-ket-noi-google-drive-2

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

cap-quyen-cho-rclone-truy-cap-google-drive

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

ma-verification-code

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.

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.

Toàn bộ quá trình cài đặt sẽ tương tự như sau:

No remotes found - make a new one
 n) New remote
 s) Set configuration password
 q) Quit config
 n/s/q> n
 name> remote
 Type of storage to configure.
 Choose a number from below, or type in your own value
  1 / Amazon Drive
   "amazon cloud drive"
  2 / Amazon S3 (also Dreamhost, Ceph, Minio)
   "s3"
  3 / Backblaze B2
   "b2"
  4 / Dropbox
   "dropbox"
  5 / Encrypt/Decrypt a remote
   "crypt"
  6 / Google Cloud Storage (this is not Google Drive)
   "google cloud storage"
  7 / Google Drive
   "drive"
  8 / Hubic
   "hubic"
  9 / Local Disk
   "local"
 10 / Microsoft OneDrive
   "onedrive"
 11 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
   "swift"
 12 / Yandex Disk
   "yandex"
 Storage> 7
 Google Application Client Id - leave blank normally.
 client_id>
 Google Application Client Secret - leave blank normally.
 client_secret>
 Remote config
 Use auto config?
  * Say Y if not sure
  * Say N if you are working on a remote or headless machine or Y didn't work
 y) Yes
 n) No
 y/n> n
 If your browser doesn't open automatically go to the following link: https://accounts.google.com/o/oauth2/auth
 Log in and authorize rclone for access
 Enter verification code> x/xxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 --------------------
 [remote]
 client_id =
 client_secret =
 token = {"access_token":"xxxx.xxxxx-xxxxxxxxxxxxxxx_xxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","token_type":"Bearer","refresh_token":"1/xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxx","expiry":"2016-09-12T00:12:53.66619724-04:00"}
 --------------------
 y) Yes this is OK
 e) Edit this remote
 d) Delete this remote
 y/e/d> y
 Current remotes:
 
 Name Type
 ==== ====
 remote drive
 
 e) Edit existing remote
 n) New remote
 d) Delete remote
 s) Set configuration password
 q) Quit config
 e/n/d/s/q> q

Đoạn nào bôi đỏ là cần nhập input

Vậy là xong, giờ bạn có thể test thử kết nối với lệnh: rclone lsd remote:

Nếu không có vấn đề gì sẽ có output tương tự như bên dưới:

test-thu-rclone

Tài khoản Google Drive này của mình mới tạo, chưa upload gì lên, chỉ có file mặc định Getting started.

2. Script backup toàn bộ VPS và upload lên Google Drive

Trong bài Hướng dẫn tự động sao lưu toàn bộ VPS mình đã chia sẻ script tự động backup VPS, tuy nhiên trong bài này mình sẽ chỉnh sửa lại một chút, để script tự động upload lên Google sau khi tạo xong file nén.

Script này mình viết theo cấu trúc folder trên server do HocVPS Script quản lý. Với những server khác, các bạn cần điều chỉnh lại một chút thì mới hoạt động được.

– 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:

# HocVPS Script Plugin - Backup Server and Upload to Google Drive
 
 #!/bin/bash
 
 . /etc/hocvps/scripts.conf
 
 SERVER_NAME=HOCVPS_BACKUP
 
 TIMESTAMP=$(date +"%F")
 BACKUP_DIR="/root/backup/$TIMESTAMP"
 MYSQL_USER="root"
 MYSQL=/usr/bin/mysql
 MYSQL_PASSWORD=$mariadbpass
 MYSQLDUMP=/usr/bin/mysqldump
 SECONDS=0
 
 mkdir -p "$BACKUP_DIR/mysql"
 
 echo "Starting Backup Database";
 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 --databases $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 '';
 
 echo "Starting Backup Nginx Configuration";
 cp -r /etc/nginx/conf.d/ $BACKUP_DIR/nginx/
 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
 /usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME" #Remove all backups older than 2 week
 echo "Finished";
 echo '';
 
 duration=$SECONDS
 echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."

Lưu ý:

  • Script trên sẽ back up toàn bộ database, mỗi database nén thành một file .gz, lưu trong thư mục mysql
  • Mỗi thư mục chứa website được nén lại thành 1 file .zip
  • Toàn bộ cấu hình Nginx của các website được lưu trong thư mục nginx
  • SERVER_NAME mặc định là HOCVPS_BACKUP, nếu muốn thay đổi folder trên Drive bạn hãy thay đổi tham số này
  • Nếu muốn điều chỉnh thời gian xóa file backup, bạn chỉnh thông số ở dòng /usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME" #Remove all backups older than 2 week,  chuyển 2w thành 5d (5 days) hoặc 30d (30 days) tùy theo nhu cầu.

– 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 Google Drive xem có thư mục mới với dữ liệu backup chưa nhé, hoặc test với lệnh rclone lsd remote:

3. 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.

Xem thêm hướng dẫn sử dụng cronjob.

III. Tải file backup từ Google Drive xuống VPS

Cách đơn giản nhất để bạn khôi phục lại dữ liệu đó là tải file backup từ Google Drive xuống máy tính, rồi tùy theo nhu cầu mà up trở lại lên VPS.

Tuy nhiên, nếu muốn tải trực tiếp file backup về VPS, bạn có thể sử dụng luôn Rclone với câu lệnh copy.

Ví dụ tham khảo:

rclone copy "remote:/VPS/VPS-2016-11-02_02-00.zip" /root/

Lệnh trên sẽ copy file VPS-2016-11-02_02-00.zip trong thư mục VPS trên Google Drive về thư mục /root/ của VPS. Tốc độ upload và download từ Google Drive cũng đều rất nhanh.

IV. Tổng kết

Công việc backup VPS/Server là việc vô cùng quan trọng, mình đã từng mất toàn bộ dữ liệu không khôi phục được do ấn nhầm Rebuild và chủ quan không backup. Hi vọng với bài hướng dẫn chi tiết này, các bạn sẽ có thêm phương pháp mới tiết kiệm và hiệu quả hơn.

Giờ đến lượt các bạn làm theo đó, cần hỗ trợ gì thêm hoặc góp ý gì cứ comment bên dưới nhé.

Nguồn: http://hocvps.com/rclone/

Add Comment