Hôm nay topweb.store hướng dẫn các bạn cài đặt và cấu hình Rclone để backup dữ liệu từ Server Linux đến Google Drive. Để cài đặt Rclone lên server bạn dùng các lệnh sau.
* Đối 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-*
* Đối 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-*
Sau khi cài đặt xong bạn có thể sử dụng lệnh rclone
ok rồi.
Một số lệnh cơ bản của 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 trống tại đường dẫn.
- rclone rmdirs – Xóa toàn bộ folder trống tại đường dẫn. Bộ đếm thời gian bao gồm:
- ms – Milliseconds
- s – Seconds
- m – Minutes
- h – Hours
- d – Days
- w – Weeks
- M – Months
- y – Years
- 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.
Xem đầy đủ các lệnh của Rclone tại đây: https://rclone.org/commands/
Cấu hình Rclone kết nối tới Google Drive
Kết nối SSH với VPS và chạy lệnh:
rclone config
Bạn đọc các dòng hướng dẫn và bấm nút lệnh tương ứng để thực hiện. Tiếp đến bạn bấm n
để tạo connect remote mới, ở dòng name bạn đặt tên cho kết nối.
Trong danh sách các nhà cung cấp sổ ra, bạn bấm số chọn để kết nối tới dịch vụ tương ứng.
Bạn chọn mục 18 / Google Drive, bạn nhập số 18
và nhấn Enter (Số thứ tự này có thể thay đổi tùy phiên bản của Rclone).
Các bước tiếp theo, mục client_id
và client_secret
các bạn để trống, nhấn Enter. Tới bước cấp quyền cho kết nối (Option scope
), các bạn chọn mục 1 để cấp full quyền.
Mục tiếp theo service_account_file
bạn để trống và nhấn Enter. Khi được hỏi Edit advanced config?
chọn n
. Use auto config?
Bạn chọn n
.
Tiếp theo bạn vào trang Download Rclone và tải về phiên bản của windows tương ứng (32bit hoặc 64bit), sau đó giải nén ra. Mình để ở ổ C, đặt tên là C:\rclone
. Tiếp đó, mở CMD lên, nhập lệnh cd C:\rclone
Bây giờ quay lại cửa sổ lệnh SSH, copy dòng lệnh lúc nãy và paste vào cmd, trong ví dụ của mình là rclone authorize "drive" "eyJzY29wZSI6ImRyaXZlIn0"
, các bạn paste vào cmd và nhấn enter
Sau khi nhấn Enter, bạn sẽ tự động được chuyển đến trình duyệt web, lúc này hãy chọn tài khoản, hoặc đăng nhập vào tài khoản google drive mà bạn muốn kết nối vào để remote.
Khi đã hoàn tất, bạn sẽ được thông báo là Success
Quay lại cửa sổ CMD, bạn sẽ thấy đã có dòng mã token được cấp (vùng đánh dấu đỏ trong hình). Bạn copy dòng token đó để qua cửa sổ SSH paste vào.
Bạn paste mà copy được ở trên vào cửa sổ SSH, nhấn Enter. Nó sẽ tiếp tục hỏi Configure this as a Shared Drive (Team Drive)?
bạn chọn n
(No). Một lần nữa, nó sẽ xác nhận lại thông tin, Keep this "gdrive" remote?
bạn chọn y
(Yes).
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 backup:
Các bạn tham khảo 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 Rclone Docs.
Script backup toàn bộ VPS và upload lên Cloud
– 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 (á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=HOCVPS_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" #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." 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 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.
– 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:HOCVPS_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).
Đối với server đang cài bằng hostvn script thì các bạn dùng đoạn mã sau
#!/bin/bash
######################################################################
# Auto Install & Optimize LEMP Stack on Ubuntu #
# #
# Author: Sanvv - HOSTVN Technical #
# Website: https://hostvn.vn #
# #
# Please do not remove copyright. Thank! #
# Please do not copy under any circumstance for commercial reason! #
######################################################################
source /var/hostvn/ipaddress
source /var/hostvn/.hostvn.conf
source /var/hostvn/menu/helpers/variable_common
rclone -q --min-age 1d delete "${remote}:$IPADDRESS" >> /var/log/rclone.log 2>&1
rclone -q --min-age 1d rmdirs "${remote}:$IPADDRESS" >> /var/log/rclone.log 2>&1
rclone delete backup:/Trash --min-age 1d --drive-trashed-only
for users in /home/*; do
if [[ -d "${users}" ]]; then
user=${users##*/}
for domains in /home/"${user}"/*; do
if [[ -d "${domains}" ]]; then
domain=${domains##*/}
for publics in /home/${user}/${domain}/public_html; do
if [[ -d "${publics}" ]]; then
public=${publics##*/}
#https://www.howtoforge.com/tutorial/linux-grep-command/
#https://stackoverflow.com/a/6284370
db_name=$(grep -w "db_name" "${USER_DIR}/.${domain}.conf" | cut -f2 -d'=')
if [[ ! -d "/home/backup/${CURRENT_DATE}/${domain}" ]]; then
mkdir -p /home/backup/"${CURRENT_DATE}"/"${domain}"
fi
rm -rf /home/backup/"${CURRENT_DATE}"/"${domain}"/*
cd /home/backup/"${CURRENT_DATE}"/"${domain}" || exit
mysqldump -uadmin -p"${mysql_pwd}" "${db_name}" | gzip > "${db_name}".sql.gz
cd /home/"${user}"/"${domain}" || exit
if [[ ! -f "/home/${user}/${domain}/public_html/wp-config.php" && -f "/home/${user}/${domain}/wp-config.php" ]]; then
cp /home/"${user}"/"${domain}"/wp-config.php /home/"${user}"/"${domain}"/public_html/wp-config.php
fi
if [ -d "/home/${user}/${domain}/public_html/storage" ]; then
tar -cpzvf /home/backup/"${CURRENT_DATE}"/"${domain}"/"${domain}".tar.gz \
--exclude "public_html/storage/framework/cache" --exclude "public_html/storage/framework/views" "${public}"
else
tar -cpzvf /home/backup/"${CURRENT_DATE}"/"${domain}"/"${domain}".tar.gz \
--exclude "public_html/wp-content/cache" "${public}"
fi
rclone copy /home/backup/"${CURRENT_DATE}"/"${domain}" "${remote}":"${IPADDRESS}"/"${CURRENT_DATE}"/"${domain}" --bwlimit 30M >> /var/log/rclone.log 2>&1
rm -rf /home/backup/"${CURRENT_DATE}"/"${domain}"
if [[ -f "/home/${user}/${domain}/public_html/wp-config.php" && -f "/home/${user}/${domain}/wp-config.php" ]]; then
rm -rf /home/"${user}"/"${domain}"/public_html/wp-config.php
fi
fi
done
fi
done
fi
done
#rclone -q --min-age "${backup_num}"d delete "${remote}:$IPADDRESS" >> /var/log/rclone.log 2>&1
#rclone -q --min-age "${backup_num}"d rmdirs "${remote}:$IPADDRESS" >> /var/log/rclone.log 2>&1
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 Cloud. Đồng thời, dữ liệu backup trên VPS sẽ được xóa luôn sau khi upload xong.
Chúc các bạn thành công!