Sao lưu tự động VPS Ubuntu lên Google Drive với Rclone – Healthchecks.io – Crontab

23

Sau khi đã cài đặt VPS Ubuntu làm Web Server và đưa vào hoạt động Website của mình, bước tiếp theo bạn cần là tìm kiếm một giải pháp sao lưu tự động VPS Ubuntu định kỳ. Để giải quyết bài toàn sao lưu tự động VPS Ubuntu, How4VN sẽ giới thiệu tới các bạn 01 giải pháp kết hợp của các dịch vụ miễn phí: Dịch vụ lưu trữ Google Drive – Chương trình đồng bộ hóa Rclone – Dịch vụ Healthchecks.io – Chương trình Cron.

Quá trình thực hiện sao lưu tự động VPS Ubuntu.

    • Tự động chạy vào thời gian được cài đặt sẵn.
    • Tự động sao lưu các database có trong MySQL và nén lại thành các file .gz.
    • Tự động sao lưu và nén thư mục chứa Website thành file .zip (mỗi website nén riêng vào 01 thư mục)
    • Tự động sao lưu các cấu hình quan trọng của VPS như: cấu hình NginX, phpMyAdmin … (tùy theo nhu cầu của người dùng)
    • Đưa tất cả các file sao lưu vào 01 folder được đặt tên theo thời điểm thực hiện và upload toàn bộ lên Google Drive.
    • Xóa folder Backup sau khi đã đồng bộ lên Google Drive, xóa các các folder trên Google Drive nếu các folder này vượt quá thời gian cần lưu trữ.

Các chương trình – dịch vụ sử dụng cho việc sao lưu tự động VPS Ubuntu.

Google Drive – Đây là một trong những dịch vụ lưu trữ và đồng bộ dữ liệu nổi tiếng và thông dụng. Ngay khi đăng ký bạn sẽ nhận được 15GB bộ nhớ lưu trữ. Điều hay nhất của Google Drive có lẽ là khả năng đồng bộ dữ liệu qua lại giữa các tài khoản khác nhau, việc này sẽ giúp bạn có thêm nhiều khoảng trống để lưu trữ dữ liệu Backup.

RClone – Là một chương trình dòng lệnh giúp bạn đồng bộ hóa tệp tin và thư mục từ máy tính tới hầu hết các dịch vụ lưu trữ đám mây thông dụng như: Google Drive, Amazon S3, OneDrive, Mega.nz, Yandex…

Healthchecks.io – Dịch vụ này sẽ cung cấp 01 địa chỉ URL và ghi nhận các lệnh ping tới URL này. Nếu vượt quá thời gian cài đặt và không có lệnh ping được thực hiện, sẽ có các email cảnh báo gửi tới bạn. Việc này giúp bạn giám sát việc sao lưu tự động dữ liệu, tránh trường hợp việc sao lưu tự động bị gián đoạn hoặc phải kiểm tra thường xuyên bằng các phương pháp thủ công.

Crontab – Cron là một chương trình chạy trên Linux, giúp người quản trị lập lịch cho các công việc định kỳ vào khoảng thời gian cố định.

Bước 1. Cài đặt Rclone trên VPS Ubuntu.

Để cài đặt Rclone cho VPS Ubuntu bạn sử dụng các lệnh sau:

– Cài đặt unzip:

sudo apt install unzip

– Tải về, cài đặt và phân quyền cho rclone:

curl -O https://downloads.rclone.org/v1.48.0/rclone-v1.48.0-linux-arm64.zip
unzip rclone-v1.48.0-linux-arm64.zip
sudo cp rclone-v*-linux-amd64/rclone /usr/bin/
sudo chown root:root /usr/bin/rclone
sudo chmod 755 /usr/bin/rclone

Tiến hành cấu hình cho rclone:

rclone config

Các mục màu đỏ là những mục bạn sẽ phải nhập bằng tay theo lựa chọn của bạn.

Link màu xanh do Rclone cung cấp, bạn copy và dán vào trình duyệt để cho phép Rclone toàn quyền truy cập vào tài khoản Google Drive của bạn. Sau khi đồng ý, bạn sẽ nhận được 01 Code xác thực, copy Code đó và dán lại mục Enter verification code>.

[email protected]:~$ rclone config
No remotes found – make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n >>> Tạo một Remote mới
name> how4vn-drive  >>> Tên của Remote
Type of storage to configure.
Enter a string value. Press Enter for the default (“”).
Choose a number from below, or type in your own value
1 / A stackable unification remote, which can appear to merge the contents of several remotes
\ “union”
2 / Alias for an existing remote
\ “alias”
3 / Amazon Drive
\ “amazon cloud drive”
4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
\ “s3”
5 / Backblaze B2
\ “b2”
6 / Box
\ “box”
7 / Cache a remote
\ “cache”
8 / Dropbox
\ “dropbox”
9 / Encrypt/Decrypt a remote
\ “crypt”
10 / FTP Connection
\ “ftp”
11 / Google Cloud Storage (this is not Google Drive)
\ “google cloud storage”
12 / Google Drive
\ “drive”
13 / Hubic
\ “hubic”
14 / JottaCloud
\ “jottacloud”
15 / Koofr
\ “koofr”
16 / Local Disk
\ “local”
17 / Mega
\ “mega”
18 / Microsoft Azure Blob Storage
\ “azureblob”
19 / Microsoft OneDrive
\ “onedrive”
20 / OpenDrive
\ “opendrive”
21 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ “swift”
22 / Pcloud
\ “pcloud”
23 / QingCloud Object Storage
\ “qingstor”
24 / SSH/SFTP Connection
\ “sftp”
25 / Webdav
\ “webdav”
26 / Yandex Disk
\ “yandex”
27 / http Connection
\ “http”
Storage> 12 >>> Đồng bộ tới Google Drive
** See help for drive backend at: https://rclone.org/drive/ **

Google Application Client Id
Setting your own is recommended.
See https://rclone.org/drive/#making-your-own-client-id for how to create your own.
If you leave this blank, it will use an internal key which is low performance.
Enter a string value. Press Enter for the default (“”).
client_id>
Google Application Client Secret
Setting your own is recommended.
Enter a string value. Press Enter for the default (“”).
client_secret>
Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default (“”).
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>
ID of the root folder
Leave blank normally.
Fill in to access “Computers” folders. (see docs).
Enter a string value. Press Enter for the default (“”).
root_folder_id>
Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Enter a string value. Press Enter for the default (“”).
service_account_file>
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
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=202264
Log in and authorize rclone for access
Enter verification code> 4/ewH2hYT9gfgmfCtiNE-
Configure this as a team drive?
y) Yes
n) No
y/n> n
——————–
[how4vn-drive]
type = drive
scope = drive.file
token = {“access_token”:”ya29.Gls6B4eQ9XjojKw-966Z”}
——————–
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name Type
==== ====
how4vn-drive 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

Kiểm tra kết nối giữa Rclone và Google Drive, bạn sẽ thấy các thư mục hiện có trên Google Drive của bạn.

[email protected]:~$ rclone lsd how4vn-drive:
-1 2019-07-02 07:22:17 -1 BACKUP-VPS-MANUAL
-1 2019-07-01 05:02:20 -1 Rclone-VPS-Backup
-1 2019-07-02 02:44:55 -1 How4VN.com

Tới đây chúng ta đã hoàn tất việc cài đặt rclone.

Bước 2. Tạo Script sao lưu dữ liệu và đồng bộ lên Google Drive

Để sao lưu dữ liệu và đồng bộ lên Google Drive qua Rclone đã cài đặt ở bước 1, chúng ta sử dụng 1 script dưới dạng file .sh trong Linux. Bạn tạo 1 file .sh trong thư mục Root: $ nano /root/backup.sh , sau đó copy nội dung script bên dưới và đưa vào file backup.sh

Script này được sửa lại dựa trên script của HocVPS dành cho website WordPress, bạn sửa lại các thông số để phù hợp với nhu cầu và cấu hình của bạn:

    • SERVER-NAME: là một thư mục trên tài khoản Google Drive bạn đã liên kết với Rclone, hãy tạo một thư mục với tên mà bạn muốn sử dụng.
    • how4vn-drive: là tên remote bạn đã tạo ở bước 1.
    • Các thư mục lưu trữ website, đường dẫn tới NGINX sẽ tùy thuộc vào VPS của bạn, có thể nó sẽ khác với file mẫu.
    • Hãy bổ sung các thư mục khác theo nhu cầu của bạn như: thư mục cài đặt phpMyAdmin, các Control Panel quản lý Host (nếu có).
    • Hoặc bổ sung bất cứ mục nào trên VPS mà bạn nghĩ mình cần sao lưu dự phòng.

# How4Vn.com – Auto Backup for VPS Ubuntu;
# Chinh sua tren co so HocVPS Script;
#!/bin/bash

SERVER_NAME=how4vn-backup

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

################# MySQL Backup #################
mkdir -p “$BACKUP_DIR/mysql”
echo “————————————-“;
echo ” Starting Backup DATABASES “;
echo “————————————-“;
databases=`$MYSQL -e “SHOW DATABASES;” | grep -Ev “(Database|information_schema|performance_schema|mysql)”`

for db in $databases; do
$MYSQLDUMP –force –opt –databases $db | gzip > “$BACKUP_DIR/mysql/$db.gz”
done

/usr/bin/rclone move $BACKUP_DIR “how4vn-drive:$SERVER_NAME/$TIMESTAMP” >> /var/log/rclone.log 2>&1
rm -rf $BACKUP_DIR/*
echo “————————————-“;
echo ” Finished Backup DATABASES “;
echo “————————————-“;

################# Website Backup #################
echo “————————————-“;
echo ” Starting Backup WEBSITE “;
echo “————————————-“;
for D in /var/www/html/*; do
if [ -d “${D}” ]; then
domain=${D##*/}
echo “— Starting backup “$domain;
zip -r $BACKUP_DIR/$domain.zip /var/www/html/$domain/* -q -x /var/www/html/$domain/wp-content/cache/**\*
/usr/bin/rclone move $BACKUP_DIR “how4vn-drive:$SERVER_NAME/$TIMESTAMP” >> /var/log/rclone.log 2>&1
rm -rf $BACKUP_DIR/*
echo “— “$domain;
fi
done
echo “————————————-“;
echo ” Finished Backup WEBSITE “;
echo “————————————-“;

################# Nginx Configuration Backup #################
echo “————————————-“;
echo ” Starting Backup NGINX “;
echo “————————————-“;
cp -r /etc/nginx/ $BACKUP_DIR/nginx/
/usr/bin/rclone move $BACKUP_DIR “how4vn-drive:$SERVER_NAME/$TIMESTAMP” >> /var/log/rclone.log 2>&1
echo “————————————-“;
echo ” Finished Backup NGINX “;
echo “————————————-“;

rm -rf /root/backup/*
/usr/bin/rclone -q –min-age 1w delete “how4vn-drive:$SERVER_NAME” #Xoa cac thu muc truoc thoi diem backup 1 tuan
/usr/bin/rclone -q –min-age 1w rmdirs “how4vn-drive:$SERVER_NAME” #Xoa tat ca cac thu muc rong truoc thoi diem backup 1 tuan

duration=$SECONDS
echo “$(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed.”

Phân quyền cho file backup.sh vừa tạo: sudo chmod +x /root/backup.sh.

Chạy thử script bằng lệnh sudo /root/backup.sh

Lưu ý: Nếu khi cài MySQL bạn sử dụng mysql_native_password như trong bài hướng dẫn cài đặt LEMP cho VPS Ubuntu. Bạn phải bổ sung user/pass cho việc truy cập mysql và mysqldump.

– Tạo 01 file chứa tài khoản mysql và mysqldump: nano /root/.my.cnf với nội dung

[mysql]
user=root
password=pass-mysql

[mysqldump]
user=root
password=pass-mysql

– Phần quyền để bảo mật cho file này: chmod 600 /root/.my.cnf

– Phần Backup Database trong Script bạn đổi lại thành:

################# MySQL Backup #################
mkdir -p “$BACKUP_DIR/mysql”
echo “————————————-“;
echo ” Starting Backup DATABASES “;
echo “————————————-“;
databases=`$MYSQL –defaults-file=/root/.my.cnf -e “SHOW DATABASES;” | grep -Ev “(Database|information_schema|performance_schema|mysql)”`

for db in $databases; do
$MYSQLDUMP –defaults-extra-file=/root/.my.cnf –force –opt –databases $db | gzip > “$BACKUP_DIR/mysql/$db.gz”
done

Bước 3. Đăng ký và cấu hình dịch vụ healthchecks.io

Bạn truy cập website https://healthchecks.io để đăng ký 01 tài khoản miễn phí, sau đó trong mục Account ở góc trên cùng bên phải, bấm chọn vào Project (thường Project là địa chỉ email đăng ký ban đầu).

Bấm vào hình bánh răng để cấu hình Project của bạn.

Chúng ta sẽ thay đổi Schedule theo lịch sao lưu tự động của chúng ta. Ví dụ 01 ngày sao lưu tự động 01 lần, sau mỗi lần sao lưu lệnh ping sẽ được gửi tới healthchecks.io, chúng ta có thể cấu hình như trong hình.

Vậy là nếu vượt quá 01 ngày 30 phút healthchecks.io không nhận được lệnh ping tới URL, dịch vụ này sẽ gửi email cảnh báo tới bạn.

Bước 4. Sử dụng Cron để lên lịch sao lưu tự động hàng ngày.

Bạn bắt đầu với lệnh systemctl status cron để kiểm tra tình trạng hoạt động của cron, thông thường cron đã được cài đặt sẵn trên Ubuntu. Nếu chưa được cài đặt, hãy tiếp tục sử dụng các lệnh sau để cài đặt cron:

apt-get update && apt-get upgrade
dpkg -l cron
apt-get install cron

Khác với trên CentOS, để thêm một cron job cho Ubuntu bạn chỉ cần chỉnh sửa file /etc/crontab bằng lệnh:

sudo nano /etc/crontab

Trong file crontab, thêm đoạn lệnh kích hoạt script sao lưu đã tạo ở bước 3 và lệnh ping tới URL của bạn trên healthchecks.io. Tương tự như sau:

30 6 * * * root /root/backup.sh && curl -fsS --retry 3 https://hc-ping.com/2c3f405c-2b54-4f28 > /dev/null 2>&1

Dòng lệnh này có ý nghĩa: hàng ngày, vào lúc 6h30 sáng user root sẽ tự động chạy file backup.sh để sao lưu dữ liệu VPS lên Google Drive, sau khi hoàn tất việc sao lưu – 01 lệnh ping sẽ được gửi tới URL của bạn tại healthchecks.io để chắc chắn rằng ngày hôm đó Crontab đã hoạt động.

Lưu ý: Theo đúng hướng dẫn của Cron, để Cron hoạt động đúng, dòng cuối cùng của file /etc/crontab phải là dòng trắng. Nói cách khác, kết thúc file /etc/crontab phải là một lệnh Enter.

Kết luận.

Vậy là qua 4 bước chúng ta đã có 01 giải pháp sao lưu tự động hàng ngày cho VPS Ubuntu kết hợp giữa Google Drive – Rclone – Healthchecks.io và Crontab. Đối với các bạn mới làm quen với VPS và trang web chưa có nhiều thông tin thì như vậy là đủ. Sau này khi nhu cầu cao hơn các bạn nên sử dụng thêm các giải pháp sao lưu khác đề phòng các trường hợp hy hữu xảy ra.

How4VN.com

avatar
  Nhận thông báo  
Thông báo khi