Rclone là công cụ đồng bộ hóa dữ liệu giữa máy chủ và các dịch vụ lưu trữ đám mây. Nó hỗ trợ rất nhiều dịch vụ: Amazon S3, Amazon Drive, Google Drive, Google Cloud Storage, Openstack Swift / Rackspace cloud files / Memset, Memstore, Dropbox, Microsoft OneDrive…
Trong bài này mình sẽ hướng dẫn trên VPS Ubuntu đang cài đặt Easyengine, bạn có thể sử dụng cài đặt khác, chỉ cần thay đỗi các đường dẫn trên code lại là được.
Mục lục
Kịch bản tự động backup
- Sao lưu toàn bộ database MySQL, mỗi database một file .gz
- 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/
- Tổng hợp tất cả dữ liệu vào 1 folder
- 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 Cloud nếu quá 2 tuần
Bây giờ bắt đầu hướng dẫn cách làm nhé.
Cài đặt Rclone lên VPS
Ở đây mình sẽ tải Rclone bản mới nhất tại thời điểm viết. Sau đó giải nén và copy vào thư mục /usr/sbin/.
– Cài đặt với phiên bản v1.45 hệ điều hành Linux 64bit
cd /root/ wget https://downloads.rclone.org/v1.45/rclone-v1.45-linux-amd64.zip unzip rclone-v*-linux-amd64.zip cp rclone-v*-linux-amd64/rclone /usr/sbin/ rm -rf rclone-*
– Cài đặt với phiên bản v1.45 hệ điều hành Linux 32bit
cd /root/ wget https://downloads.rclone.org/v1.45/rclone-v1.45-linux-386.zip unzip rclone-v*-linux-386.zip cp rclone-v*-linux-amd64/rclone /usr/sbin/ rm -rf rclone-*
Kết nối VPS với Google Drive
Chạy lệnh sau:
rclone config
Bạn sẽ nhận được thông báo no remotes found. Gõ n để tạo mới remote :
Tiếp theo bạn nhập vào tên cho remote. Bạn có thể điền bất cứ gì cũng được (không dấu, không khoảng cách). Tên này một lát sẽ điền vào code backup bên dưới.
Tiếp theo bạn chọn dịch vụ lưu trữ nào bạn muốn. Nhập vào số 12 để chọn Google Drive rồi Enter.
- Tiếp theo nó sẽ hỏi Client Id , ta sẽ bỏ trống và Enter
- Tiếp theo nó sẽ hỏi Client Secret , ta sẽ bỏ trống và Enter
- Tiếp theo nó sẽ hỏi “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”
Điền vào số 1 rồi Enter
Tiếp tục bỏ trống và Enter
Enter a string value. Press Enter for the default (""). root_folder_id>
Enter a string value. Press Enter for the default (""). service_account_file>
Tiếp tục bỏ trống và Enter
Edit advanced config? (y/n) y) Yes n) No y/n>
Điền vào n để chọn và Enter
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
Điền vào n để chọn và Enter
Bây giờ bạn copy cái đường dẫn loằng ngằng trong và paste vào trình duyệt. ( Nếu sử dụng Putty thì chỉ cần bôi đen cái đường dẫn là nó đã tự copy rồi nhé )
Trong trình duyệt, bạn bấm vào Allow để cho phép Rclone truy cập vào tài khoản Google Drive của bạn.
Google sẽ cho bạn một đoạn mã. Nhiệm vụ của bạn là copy nó và paste vào SSH rồi Enter. (Sử dụng Putty chỉ cần chuột phải và Enter là được)
Cuối cùng gõ q để thoát config của Rclone.
Bây giờ bạn có thể gõ lệnh để thử đã kết nối thành công VPS đến rclone chưa nhé.
rclone lsd remote_name:
Ví dụ mình đã tạo với tên là chunguyenbn thì gõ lệnh sau :
rclone lsd chunguyenbn:
Nếu thành công thì nó sẽ liệt kê các thư mục hoặc file trong Google Drive của bạn.
Sử dụng Script để Backup Source Code và Database
Tạo một file script có tên là backup.sh trong thư mục /root/:
nano /root/backup.sh
Nếu nano chưa được cài thì bạn sử dụng lệnh sau để cài đặt:
yum install nano
Copy toàn bộ file script bên dưới vào file backup.sh. Một số chỗ bạn cần thay đổi như sau:
- SERVER_NAME: tên thư mục chứa backup trên GoogleDrive.
- MYSQL_PASSWORD: bạn thay bằng password admin Database của bạn.
- Đoạn này chunguyenbn:$SERVER_NAME: chunguyenbn là tên remote của mình, bạn thay bằng tên remote bạn đã tạo ở bước kết nối Google Drive.
Lưu ý: script có sử dụng lệnh zip để nén. Bạn cài đặt zip với lệnh sau trước khi chạy script:
yum install zip
SERVER_NAME=VPSBACKUP TIMESTAMP=$(date +"%F") BACKUP_DIR="/root/backup/$TIMESTAMP" MYSQL_USER="admin" MYSQL_PASSWORD="nhohuomg" 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 "Bat dau 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 "Da backup xong Database"; echo ''; echo "Bat dau Backup Source Code 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 "Da backup xong source code website"; echo ''; echo "Bat dau Backup Nginx Configuration"; cp -r /etc/nginx/ $BACKUP_DIR/nginx/ echo "Da backup xong Nginx Configuration"; echo ''; size=$(du -sh $BACKUP_DIR | awk '{ print $1}') echo "Bat dau upload len Google Drive"; /usr/sbin/rclone --transfers=1 move $BACKUP_DIR "chunguyenbn:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1 # Clean up rm -rf $BACKUP_DIR /usr/sbin/rclone -q --min-age 1d delete "chunguyenbn:$SERVER_NAME" #Remove all backups older than 2 day /usr/sbin/rclone -q --min-age 1d rmdirs "chunguyenbn:$SERVER_NAME" #Remove all empty folders older than 2 day echo "Da upload xong"; echo ''; duration=$SECONDS echo "Tong thoi gian backup $size, $(($duration / 60)) phut $(($duration % 60)) giay."
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 rồi 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é.
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 cuối
0 2 * * * /root/backup.sh > /dev/null 2>&1
– Nhấn Ctrl+O rồi Enter để lưu và Ctrl+X để thoát.
– Tiếp theo thực hiện câu lệnh :
service cron restart
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.
Vậy là đã xong phần hướng dẫn Auto Backup VPS lên Google Drive với Rclone.