Backup VPS lên Google Drive với Rclone Mới Nhất

1. Tại sao cài Rclone?

  • Backup tự động VPS lên Google Drive, Cloud miễn phí với các site, file có dung lượng lớn. Mấy site nhỏ xài plugin wordpress cũng ok lắm rồi.
  • Download / Upload file lớn xuyên quốc gia cho lẹ.

2. Cấu hình login VPS Server trước khi cài đặt Rclone.

Các hướng dẫn trên mạng giờ cũ rích ngày xưa của mấy anh bán vps/hosting copy bài viết của nhau ở vn mình không còn xài được nữa nên mình update tip mới này nhé! Quan trọng là ở 2 cái hình dưới đây mới suôn sẻ nè. Bitvise SSH và các tool khác cũng tương tự như 2 tool dưới thôi nhé

Đối với SecureCRT thì cấu hình như hình dưới:

 

 

Đối với PuTTY thì cấu hình ở Connection – SSH – Tunnels như hình dưới

 

3. Cài đặt Rclone lên VPS

Xem thêm 2 link này nhé:

https://rclone.org/drive/

https://rclone.org/install/

Cài đặt bản mới nhất với hệ điều hành Linux 64bit  Ubuntu, CentOS, Amalinux….

curl https://rclone.org/install.sh | sudo bash  # cài bằng 1 dòng lệnh này là được.

(chạy xong lệnh trên báo kết quả cài ok thì qua mục 4 )

 

nếu bạn muốn cài = tay (copy lệnh cho vui) thì dưới đây:

cd /home/

wget https://downloads.rclone.org/rclone-current-linux-amd64.zip

unzip rclone-current-linux-amd64.zip

cp rclone-v*-linux-amd64/rclone /usr/sbin # dời file rclone ra ngoài thư mục

sudo chmod +x /usr/sbin/rclone # phân quyền 

rm -rf rclone-* # xóa hết mấy file có tên bắt đầu từ rclone-* 

 

Cài đặt bản mới nhất với hệ điều hành Linux 32bit

cd /home/

wget https://downloads.rclone.org/rclone-current-linux-386.zip

unzip rclone-current-linux-386.zip

cp rclone-v*-linux-386/rclone /usr/sbin/

rm -rf rclone-*

4. Cài đặt backup tự động lên Google Drive

Chạy lệnh tạo kết nối:

rclone config

Tóm tắt nhanh lệnh để các bạn sử dụng khi thành thạo, các bạn chú ý vào các dòng mình bôi đỏ nhé.

No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n 

 

Ấn n để tạo kết nối mới.

Dòng name, nhập remote để đặt tên kết nối.

remote

Một danh sách các lệnh kết nối xuất hiện, bạn cần gõ số là dòng tương ứng với Google Drive. Lưu ý, danh sách có thể thay đổi theo thời gian. Hiện tại đang là số 17 nên nhập vào 17 rồi nhấn Enter nha!

Bạn Enter bỏ qua khi gặp 2 dòng sau:

Client ID

Client Secret

Mục “Scope” các bạn chọn 1. Tức là Toàn bộ.

 

No remotes found, make a new one?
n) New remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
n/r/c/s/q> n
name> remote
Type of storage to configure.
Choose a number from below, or type in your own value
[snip]
XX / Google Drive
    "drive"
[snip]
Storage> drive
Google Application Client Id - leave blank normally.
client_id>
Google Application Client Secret - leave blank normally.
client_secret>
Scope that rclone should use when requesting access from drive.
Choose a number from below, or type in your own value
 1 / Full access all files, excluding Application Data Folder.
    "drive"
 2 / Read-only access to file metadata and file contents.
    "drive.readonly"
   / Access to files created by rclone only.
 3 | These are visible in the drive website.
   | File authorization is revoked when the user deauthorizes the app.
    "drive.file"
   / Allows read and write access to the Application Data folder.
 4 | This is not visible in the drive website.
    "drive.appfolder"
   / Allows read-only access to file metadata but
 5 | does not allow any access to read or download file content.
    "drive.metadata.readonly"
scope> 1
Service Account Credentials JSON file path - needed only if you want use SA instead of interactive login.
service_account_file>
Remote config
Use web browser to automatically authenticate rclone with remote?
 * Say Y if the machine running rclone has a web browser you can use
 * Say N if running rclone on a (remote) machine without web browser access
If not sure try Y. If Y failed, try N.
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
Configure this as a Shared Drive (Team Drive)?
y) Yes
n) No
y/n> n
--------------------
[remote]
client_id = 
client_secret = 
scope = drive
root_folder_id = 
service_account_file =
token = {"access_token":"XXX","token_type":"Bearer","refresh_token":"XXX","expiry":"2014-03-16T13:57:58.955387075Z"}
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

Copy link dán vào trình duyệt ra hình như dưới:

 

5. Tạo backup VPS lên Google Drive

Các bạn xong bước vừa nãy mới là tạo kết nối thôi, bây giờ các bạn cần tạo 1 thiết lập để backup lên google drive sau đó backup tự động bằng cron theo lịch của mình.

Tạo file backup.sh ở thư mục root bằng lệnh:

nano /root/backup.sh

Copy toàn bộ nội dung dưới đây vào file:

# Script Plugin - Backup Server and Upload to Cloud
#!/bin/bash

SERVER_NAME=VPS_BACKUP

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 '';

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
# Clean up
rm -rf $BACKUP_DIR
/usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME" #Xoa tat ca ban cu hon 2 tuan
/usr/sbin/rclone -q --min-age 2w rmdirs "remote:$SERVER_NAME" #Xoa tat ca thu muc trong cu hon 2 tuan
/usr/sbin/rclone cleanup "remote:" #Cleanup Trash
echo "Finished";
echo '';

duration=$SECONDS
echo "Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed."
...
/usr/sbin/rclone -q --min-age 2w delete "remote:$SERVER_NAME" # Xoa tat ca ban cu hon 2 tuan
/usr/sbin/rclone -q --min-age 2w rmdirs "remote:$SERVER_NAME" # Xoa tat ca thu muc trong cu hon 2 tuan
...

Chú ý 2 chữ mình bôi đỏ nhé, là 2w. Ý nghĩa là xóa tất cả bản backup cũ hơn 2 tuần và các thư mục trống cũ hơn 2 tuần. (Tất nhiên là thư mục tài liệu sẽ vẫn còn nhé)

Các bạn có thể thay số 2w bằng 3M (3 tháng) để thời gian lưu trữ lâu hơn. Tức là bạn sẽ có những bản cũ hơn.

Ấn tiếp tổ hợp phím Ctrl + O 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:VPS_BACKUP

Nếu không có vấn đề gì sẽ thấy kết quả trả về có một thư mục là ngày hiện tại, bên trong có chứa file nén website (.zip), cấu hình Nginx (.conf) và database (.gz).

6. Tạo cronjob tự động backup VPS lên Google Drive

Mở file Cron:

EDITOR=nano crontab -e

Tạo file backup tự động hằng ngày lúc 2h sáng:

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

Tạo file backup tự động vào thứ 2 và thứ 6 lúc 2h sáng:

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

Bạn có thể thay đổi thứ 2, thứ 6 bằng cách thay đổi số 0 và 5. Tuần có 7 ngày từ thứ 2 đến chủ nhật, thì backup sẽ có 7 số từ 0 đến 7.

7. Lưu ý khi sử dụng Rclone backup

  • 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à VPS_BACKUP, nếu muốn thay đổi folder trên Cloud bạn hãy thay đổi tham số này.
  • Muốn điều chỉnh thời gian xóa file backup, bạn sửa thông số ở dòng delete và rmdirs. Hiện tại, tự động xóa file/folder cũ hơn 2 tuần.

8.Tải file backup từ Cloud 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ừ Cloud 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:

rclone copy "remote:/VPS_BACKUP/2017-11-01" /root/

Lệnh trên sẽ copy folder 2017-11-01 trong thư mục VPS_BACKUP trên Cloud về thư mục /root/ của VPS. Tốc độ upload và download từ Cloud đều rất nhanh.
Sau khi copy dữ liệu backup về VPS, bạn tiến hành giải nén file zip, copy thư mục web và nginx về đúng vị trí đồng thời tiến hành import database.

9. Lệnh Download Tệp từ Google Drive về Máy Chủ

  • Download một tệp cụ thể: Sử dụng lệnh copy để tải một tệp từ Google Drive về máy chủ của bạn. Cú pháp chung là:

rclone copy remote:/path/to/remote/file /path/to/local/destination

  • Ví dụ, nếu bạn muốn tải tệp example.txt từ thư mục backup trên Google Drive về thư mục hiện tại trên máy chủ của bạn:

rclone copy remote:/backup/example.txt .

  • Download một thư mục: Để tải một thư mục cùng toàn bộ nội dung về, cũng sử dụng lệnh copy. Cú pháp chung là:

rclone copy remote:/path/to/remote/folder /path/to/local/destination

  • Ví dụ, nếu bạn muốn tải toàn bộ thư mục backup từ Google Drive về thư mục local_backup trên máy chủ:

rclone copy remote:/backup /path/to/local_backup

Đồng bộ Thư mục từ Google Drive về Máy Chủ

  • Nếu bạn muốn đồng bộ thư mục từ Google Drive về máy chủ, bạn có thể sử dụng lệnh sync. Lệnh này sẽ đồng bộ hóa nội dung của thư mục trên Google Drive với thư mục trên máy chủ của bạn. Cú pháp chung là:

rclone sync remote:/path/to/remote/folder /path/to/local/destination

  • Ví dụ, để đồng bộ thư mục backup từ Google Drive về thư mục local_backup trên máy chủ:

rclone sync remote:/backup /path/to/local_backup

Thông tin Bổ Sung

  • Kiểm tra nội dung thư mục: Để liệt kê các tệp và thư mục trên Google Drive, bạn có thể sử dụng lệnh ls:

rclone ls remote:/path

  • Ví dụ, để liệt kê các tệp trong thư mục backup trên Google Drive:

rclone ls remote:/backup