Hướng dẫn cài đặt tự động backup VPS lên Google Drive cho HocVPS, VPSSIM

5/5 - (10 đánh giá)

Việc backup dữ liệu website là điều mà các webmaster thường xuyên phải làm để đảm bảo an toàn dữ liệu nếu chẳng may hệ thống bị tấn công. Nếu trước đây bạn quen sử dụng share hosting thì việc backup (sao lưu) đã có nhà cung cấp hosting lo cho rồi. Giờ chuyển sang dùng VPS thì bạn phải là người chủ động backup dữ liệu cho VPS của mình.

backup-vps-len-google-drive

Trong bài viết trước mình có hướng dẫn bạn cách cài HocVPS và cài VPSSIM để chạy web trên VPS rồi, bài này mình sẽ hướng dẫn bạn cách cài đặt tự động backup VPS lên Google Drive cho HocVPS và VPSSIM để bạn không còn phải thường xuyên backup dữ liệu thủ công bằng tay nữa. Để làm được việc này chúng ta sẽ sử dụng công cụ có tên Rclone – công cụ giúp đồng bộ hóa dữ liệu có khả năng kết nối với các dịch vụ lưu trữ đám mây.

Rclone là gì?

Như đã nói ở trên Rclone là công cụ giúp đồng bộ hóa dữ liệu với ưu điểm là nó có khả năng kết nối với các dịch vụ lưu trữ đám mây. Điều này đảm bảo cho dữ liệu được an toàn (không lo các vấn đề lỗi phần cứng), sao lưu nhanh chóng với tốc độ cao (hầu hết các dịch vụ lưu trữ hiện nay đều có server ở khắp nơi). Điều đặc biệt nhất là nó miễn phí!

Rclone hiện tại hỗ trợ kết nối tới hầu hết các cloud server phổ biến hiện nay như:

  • Amazon Drive
  • Amazon S3
  • DigitalOcean Spaces
  • Dropbox
  • Google Cloud Storage
  • Google Drive
  • Mega
  • Microsoft Azure Blob Storage
  • Microsoft OneDrive

Ngoài ra còn nhiều cloud khác được hỗ trợ bạn có thể xem thêm ở đây. Trong bài này mình sẽ hướng dẫn bạn cài đặt tự động backup VPS lên Google Drive. Vì Google Drive cho dung lượng miễn phí 15Gb, tốc độ rất nhanh. Bạn chỉ cần đăng ký Gmail là có luôn tài khoản Google Drive. Bây giờ bắt tay vào thực hiện thôi.

Cài đặt Rclone lên VPS

Trước hết chúng ta cần download Rclone về VPS sau đó di chuyển sang thư mục /usr/sbin/ để sử dụng.

– Cài đặt Rclone v1.41 trên hệ điều hành 64bit

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

– Cài đặt Rclone v1.41 trên hệ điều hành 32bit

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

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

Lưu ý: Nếu trên VPS của bạn đã cài đặt phiên bản cũ thì bạn chỉ cần chạy chuỗi lệnh trên để update. Tham khảo Changelog các phiên bản Rclone.

Hướng dẫn tạo kết nối VPS với Google Drive

Trước khi cài đặt tự động backup VPS lên Google Drive thì việc cần làm đó là kết nối VPS với Google Drive. Việc này bạn chỉ cần làm 1 lần và bạn làm như sau.

Đăng nhập VPS qua SSH rồi chạy lệnh:

rclone config

Nếu trên VPS của bạn chưa tạo kết nối nào thì sẽ nhận được thông báo No remotes found - make a new one

Nhập n rồi ấn Enter để tạo kết nối mới

Dòng name bạn nhập tên kết nối là remote hoặc bất cứ tên nào cũng được.

Một danh sách các cloud server hỗ trợ hiện ra. Nhập vào 11 rồi ấn Enter để chọn kết nối Google Drive.

Tiếp theo nó sẽ hỏi Client IDClient Secret, bạn để trống rồi ấn Enter.

Đến phần Scope that rclone should use when requesting access from drive. Bạn chọn 1 – Full access all files…. Để cấp quyền truy cập toàn bộ file trên Google Drive.

Tiếp theo, mục root_folder_id và service_account_file bạn để trống và ấn Enter

Nó sẽ hỏi Use auto config? bạn nhập n rồi ấn Enter. Lúc này, Rclone sẽ hiển thị 1 đường link, bạn click vào đó để mở hoặc copy và mở trên trình duyệt.

huong-dan-cai-dat-tu-dong-backup-vps-len-google-drive-cho-hocpvs-1

Nó sẽ yêu cầu bạn đăng nhập vào tài khoản Google để cấp quyền truy cập Google Drive. Sau đó bạn click vào Cho phép.

huong-dan-cai-dat-tu-dong-backup-vps-len-google-drive-cho-hocpvs-2

Bạn sẽ nhận được 1 đoạn mã xác nhận như sau, hãy copy đoạn mã này.

huong-dan-cai-dat-tu-dong-backup-vps-len-google-drive-cho-hocpvs-3

Quay trở lại cửa sổ SSH và dán đoạn mã vào mục Enter verification code rồi ấn Enter.

Nó sẽ hỏi Configure this as a team drive? bạn hãy nhập n rồi ấn Enter.

Rclone tiếp tục yêu cầu bạn xác nhận 1 lần cuối, bạn nhập y để đồng ý sau đó nhập q để thoát.

Đối với các cloud server khác bạn có thể tham khảo cách làm ở đây.

Toàn bộ quá trình thực hiện kết nôi như sau (phần bôi đỏ là bạn cần nhập vào)

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 / Alias for a existing remote
\ "alias"
2 / Amazon Drive
\ "amazon cloud drive"
3 / Amazon S3 Compliant Storage Providers (AWS, Ceph, Dreamhost, IBM COS, Minio)
\ "s3"
4 / Backblaze B2
\ "b2"
5 / Box
\ "box"
6 / Cache a remote
\ "cache"
7 / Dropbox
\ "dropbox"
8 / Encrypt/Decrypt a remote
\ "crypt"
9 / FTP Connection
\ "ftp"
10 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
11 / Google Drive
\ "drive"
12 / Hubic
\ "hubic"
13 / Local Disk
\ "local"
14 / Mega
\ "mega"
15 / Microsoft Azure Blob Storage
\ "azureblob"
16 / Microsoft OneDrive
\ "onedrive"
17 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
18 / Pcloud
\ "pcloud"
19 / QingCloud Object Storage
\ "qingstor"
20 / SSH/SFTP Connection
\ "sftp"
21 / Webdav
\ "webdav"
22 / Yandex Disk
\ "yandex"
23 / http Connection
\ "http"
Storage> 11
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
ID of the root folder - leave blank normally. Fill in to access "Computers" folders. (see docs).
root_folder_id>
Service Account Credentials JSON file path - leave blank normally.
Needed only if you want use SA instead of interactive login.
service_account_file>
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?access_type=offline&client_id=xxxx
Log in and authorize rclone for access
Enter verification code> 4/AAB5IHz4Hck-xxxx
Configure this as a team drive?
y) Yes
n) No
y/n> n
--------------------
[remote]
type = drive
client_id =
client_secret =
scope = drive
root_folder_id =
service_account_file =
token = {"access_token":"xxxx","token_type":"Bearer","refresh_token":"1/nbUsLG_97wIijB4LRejWHpD6bdg_S1PZkNGWnWFdXiM","expiry":"2018-06-11T12:19:26.464416708-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
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

Như vậy là xong. Bây giờ bạn tạo 1 thư mục trên Google Drive sau đó dùng lệnh sau để kiểm tra xem nó đã kết nối với Google Drive chưa.

rclone lsd remote:

Nếu thấy kết quả tương tự như hình dưới là OK.

huong-dan-cai-dat-tu-dong-backup-vps-len-google-drive-cho-hocpvs-4

Tham khảo thêm: Backup website WordPress tự động bằng plugin miễn phí 100%

Tạo file backup toàn bộ VPS và upload lên Google Drive

Để hệ thống tự động tạo file backup VPS và upload lên Google Drive trong HocVPS script chúng ta sẽ sử dụng script tự động backup VPS của Luân Trần – tác giả của HocVPS Script. Còn để backup VPSSIM lên Google Drive thì mình có chỉnh sửa lại đoạn script trên cho phù hợp.

Kịch bản của script này là:

  • Backup toàn bộ database MySQL trên VPS, mỗi database được tạo thành 1 file .gz và lưu trong thư mục mysql
  • Backup toàn bộ code trong thư mục /home/domain.com/public_html/, mỗi code web tạo thành 1 file .zip
  • Backup toàn bộ file cấu hình Nginx trong thư mục /etc/nginx/conf.d/ và lưu trong thư mục nginx
  • Tổng hợp tất cả các file backup vào 1 folder
  • Tự động upload file backup lên Google Drive vào khoảng thời gian bạn đặt.
  • Tự động xóa file backup trên VPS sau khi upload xong.
  • Thiết lập thời gian tự động xóa file backup cũ trên Google Drive.

Bây giờ chúng ta bắt đầu thực hiện như sau.

– Tạo file backup.sh ở thư mục /root/ của VPS bằng lệnh sau:

nano /root/backup.sh

Copy và paste đoạn script ở dưới phù hợp với script bạn đang dùng.

Script backup HocVPS lên Google Drive

– Copy và paste script bên dưới vào cửa sổ SSH (script áp dụng với HocVPS Script 2.0 trở lên)

# HocVPS Script Plugin - Backup Server and Upload to Cloud

#!/bin/bash

SERVER_NAME=BACKUP_VPS

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 1w delete "remote:$SERVER_NAME" #Remove all backups older than 1 week
/usr/sbin/rclone -q --min-age 1w rmdirs "remote:$SERVER_NAME" #Remove all empty folders older than 1 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 rồi ấn Enter để lưu và Ctrl+X để thoát.

Script backup VPSSIM lên Google Drive

SERVER_NAME=BACKUP_VPS

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

mkdir -p "$BACKUP_DIR/mysql"
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`

echo "Starting Backup Database";

for db in $databases; do
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/mysql/$db.sql.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/ $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 1w delete "remote:$SERVER_NAME" #Remove all backups older than 1 week
/usr/sbin/rclone -q --min-age 1w rmdirs "remote:$SERVER_NAME" #Remove all empty folders older than 1 week
echo "Finished";
echo '';

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

– Nhấn Ctrl+O rồi ấn Enter để lưu và Ctrl+X để thoát.

Lưu ý:

  • SERVER_NAME mặc định là BACKUP_VPS, nếu muốn đổi tên thư mục trên Google Drive thì bạn sửa lại tên này.
  • Bạn có thể thay đổi thời gian xóa file backup trên Google Drive bằng cách sửa thông số 1w ở dòng --min-age 1w delete--min-age 1w rmdirs. Hiện tại đang để là 1w – 1 tuần, bạn có thể sửa thành 2w – 2 tuần, 1d – 1 ngày,…
  • Chữ remote bạn cần sử đúng với tên kết nối mà bạn đã đặt khi tạo kết nối VPS với Google Drive ở trên.
  • Với đoạn script cho VPSSIM thì bạn cần sửa 2 mục rootpassword thành tên đăng nhập và mật khẩu quản lý database (tài khoản phpMyadmin) của bạn.

– Phân quyền cho file script

chmod +x /root/backup.sh

– Vậy là xong, giờ bạn có thể test bằng cách chạy lệnh:

/root/backup.sh

Sau khi chạy lệnh xong bạn đăng nhập vào Google Drive kiểm tra xem có thư mục và dữ liệu upload lên chưa hoặc dùng lệnh

rclone lsl remote:BACKUP_VPS

Nếu bạn thấy danh sách trả về là các file trong thư mục có dạng như bên dưới là bạn đã làm thành công.

  • 2018-06-12/domain.com.zip
  • 2018-06-12/nginx/domain.com.conf
  • 2018-06-12/mysql/database.gz

Tạo cronjob tự động backup VPS theo lịch

Sau khi làm xong các bước trên thì chỉ khi nào bạn chạy lệnh /root/backup.sh thì VPS mới được backup. Vậy nên để nó hoạt động tự động theo lịch thì bạn cần thiết lập cronjob như sau.

Chạy lệnh sau để chỉnh sửa crontab

EDITOR=nano crontab -e

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

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

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

Đoạn nội dung trên có nghĩa là script sẽ chạy tự động backup VPS và upload lên Google Drive vào lúc 2h sáng ngày thứ 2 và thứ 7 đồng thời tắt chức năng gửi email thông báo.

Lời kết

Như vậy là bài này mình đã hướng dẫn bạn cách cài đặt tự động backup VPS lên Google Drive cho HocVPS và VPSSIM. Ngoài ra, nó cũng hỗ trợ backup dữ liệu lên nhiều cloud server khác nhưng mình không tiện viết trong này, bạn có thể tự tìm hiểu thêm hoặc cần thiết thì để lại comment mình sẽ hướng dẫn nhanh cho.

Việc backup dữ liệu thường xuyên là điều vô cùng quan trọng, mình đã từng chủ quan không backup dữ liệu để rồi khi web bị tấn công mã độc mình phải ngồi khắc phục lại toàn bộ dữ liệu web sau khi bị hack rất chi là mệt. Đó là còn may mình vẫn còn dữ liệu để khôi phục, còn không may thì bao nhiêu dữ liệu sẽ bay hết.

Nguyễn Hùng

Internet là nơi mình học được những gì về Wordpress, SEO, SEM, MMO và kiến thức máy tính. Những chia sẻ của mình là những thứ mình học được và đã làm thành công, có thể nó chưa được hoàn hảo nhưng nó sẽ hữu ích với bạn.

Nhận thông báo
Thông báo qua email khi
guest

16 Bình luận
Phản hồi nội tuyến
Xem tất cả bình luận
Tuấn

hiên Rclone v1.41 không kết nối với google drive được nữa, nhờ admin hướng dẫn cài version mới được không, mình ko biết cách cài version mới

Tuấn

mình cài Rclone-v1.63.0 thì thao tác thấy khác hẳn luôn ad

Halibabu

Mình dùng Cyberpanel thì script như thế nào ạ?

Ngoc Nguyen

“0 2 * * 1,6 /root/backup.sh > /dev/null 2>&1” thứ 2 và thứ 7 là 1 và 6 phải k bạn?

TungPhat

hi chào ạ.
Mình thấy bài viết rất hay nhưng mình gặp chút vấn đề khi triển khai.
Thư mục list website của mình nó nằm trong thư mục var/www/tendomain/htdocs
giờ làm sao để mình có thể backup nó

Tuấn

# Loop through /home directory
for D in /var/www/*; do
if [ -d “${D}” ]; then #If a directory
domain=${D##*/} # Domain name
echo “- “$domain;
zip -r $BACKUP_DIR/$domain.zip /var/www/$domain/htdocs/ -q -x /var/www/$domain/htdocs/wp-content/cache/*** #Exclude cache
Bạn đổi thành như thế này là chạy được, mình test rồi, cám ơn bài viết này

Chi Vu Dinh

Mình có góp ý:

Hiện tại vị trí của Google drive đã chuyển về số 13 không phải 11.
Ngoài ra bạn có thể chỉnh sửa lại phần cài đặt luôn Rclone bản mới nhất không cần cài bản 1.41 như của bạn ạ.

– Cài đặt bản mới nhấ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-*

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

cd /root/
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-*

ELY SPA

Bài viết quá hay cám ơn admin

tuan

Chào ad,
Mình làm theo hướng dẫn của ad thì bị lỗi này trong quá trình backup database(mình sử dụng VPSSIM).
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: YES)