Powered by Blogger.

Hướng dẫn cài đặt Rclone để backup VPS lên Google Drive

Backup website lên các dịch vụ lưu trữ đám mây là giải pháp lý tưởng hiện nay.

Bởi đơn giản nó miễn phí. Ví dụ như Google Drive miễn phí 15GB.

Đối với website WordPress, bạn có thể dùng plugin UpdraftPlus để backup lên GoogleDrive.

Nếu bạn đang sử dụng VPS bạn có thêm lựa chọn để backup VPS lên GoogleDrive.

Giải pháp ở đây là dùng Rclone.

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 bạn sử dụng Rclone để backup VPS cài đặt EasyEngine.

Nếu bạn không rơi vào trường hợp này bạn có thể tham khảo thêm từ Google. Mình thấy có khá nhiều bài viết hướng dẫn về Rclone.

Do vậy bài này mình chỉ áp dụng cho VPS chạy Ubuntu sử dụng EasyEngine. Nhưng các câu lệnh hoàn toàn có thể chạy được với CentOS.
Bước 1: Cài đặt Rclone


Ở đâ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/.

Với bản Ubuntu 64 bit bạn chạy nhóm lệnh sau:
cd /root/
wget http://downloads.rclone.org/rclone-v1.37-linux-amd64.zip
unzip rclone-v1.37-linux-amd64.zip
cp rclone-v*-linux-amd64/rclone /usr/sbin/
rm -rf rclone-*


Bản Ubuntu 32 bit bạn sử dụng nhóm lệnh sau:
cd /root/
wget http://downloads.rclone.org/rclone-v1.36-linux-386.zip
unzip rclone-v1.37-linux-386.zip
cp rclone-v*-linux-386/rclone /usr/sbin/
rm -rf rclone-*


Bây giờ bạn có thể sử dụng lệnh rclone ở terminal rồi. Chi tiết các câu lệnh bạn xem ở đây.
Bước 2: Backup VPS lên Google Drive
Kết nối với Rclone với Google Drive


Bước này bạn chỉ làm một lần. Những lần sau thì bỏ qua.

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. Tên này bạn sẽ sử dụng để dại diện cho kết nối tới dịch vụ lưu trữ đám mây ở script 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ố 8 để chọn Google Drive rồi Enter.

Client Id và Client Secret bạn để trống bằng cách ấn Enter.

Phần use auto config, bạn gõ n rồi Enter.




Bây giờ bạn copy cái đường dẫn loằng ngằng trong terminal và paste vào trình duyệt.





Trong trình duyệt, bạn click nut Allow để cho phép Rclone truy cập tới tài khoản Google Drive của bạn:




Google sẽ sinh ra cho bạn một đoạn mã. Nhiệm vụ của bạn là copy nó và paste vào terminal rồi Enter.

Nếu được hỏi Configure this is a team drive thì gõ n rồi enter. Tiếp theo gõ y để confirm mọi thứ OK.




Cuối cùng gõ q để thoát config của Rclone:

Bây giờ bạn test thử với câu lệnh sau (thay remote_name bằng tên remote bạn tạo khi kết nối với Google Drive): rclone lsd remote_name:

Nếu thành công câu lệnh trên sẽ liệt kê các thư mục trong Google Drive của bạn.
Script backup VPS và upload lên Google Drive

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: apt-get 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.

Password: bạn thay bằng password của bạn. Đối với EasyEngine bạn sử lệnh này để lấy mật khẩu tài khoản root MySQL: cat /etc/mysql/conf.d/my.cnf

Đoạn này a2hostingvps:$SERVER_NAME: a2hostingvps 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:apt-get install zip

SERVER_NAME=A2HOSTING_BACKUP

TIMESTAMP=$(date +"%F")
BACKUP_DIR="/root/backup/$TIMESTAMP"
MYSQL_USER="root"
MYSQL_PASSWORD="ZjaJhbBI"
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 /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
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 "a2hostingvps:$SERVER_NAME/$TIMESTAMP" >> /var/log/rclone.log 2>&1
# Clean up
rm -rf $BACKUP_DIR
/usr/sbin/rclone -q --min-age 2d delete "a2hostingvps:$SERVER_NAME" #Remove all backups older than 2 day
/usr/sbin/rclone -q --min-age 2d rmdirs "a2hostingvps:$SERVER_NAME" #Remove all empty folders older than 2 day
echo "Finished";
echo '';

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


Cấp quyền thực thi cho file backup.sh

chmod +x /root/backup.sh

Bây giờ bạn chỉ chạy lệnh sau để backup:

/root/backup.sh

Để kiểm tra xem backup đã thành công thực sự hay chưa bạn có thể vào Google Drive check lại.

Tạo cron job tự động chạy backup

Chạy câu lệnh sau để mở cron job:

EDITOR=nano crontab -e

Paste dòng sau vào cron job

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

Câu lệnh sau có nghĩa: 2h sáng hàng ngày sẽ backup VPS và lưu trên Google Drive.
Bước 3: Tải backup từ Google Drive và khôi phục lại website

Trong trường hợp bạn muốn khôi phục lại website, bạn làm như sau:

Đầu tiên bạn tải toàn bộ backup về thư mục /root (nhớ thay tên remote bằng tên remote của bạn và diretory_name bằng thư mục trên Google Drive bằng tên của bạn).

rclone copy "remote_name:/directory_name/2017-09-16" /root/

Ví dụ phía dưới là các file backup trên Google Drive của mình:



File khamphaso.com.zip sẽ chứa source code của website. Thư mục mysql sẽ chứa file sql nén ở định dạng .gz.

Khi bạn tải về thư mục /root. Đầu tiên bạn giải nén source code bằng lệnh unzip:

unzip /root/khamphaso.com.zip

Sau đó copy đè vào thư mục website:

cp -rf /root/var/www/khamphaso.com/ /var/www/khamphaso.com

Tiếp theo bạn khôi phục db. Đầu tiên bạn giải nén file sql bằng lệnh sau:

gunzip /root/mysql/khamphaso_com.sql.gz

Di chuyển tới thư mục gốc của website và sử dụng lệnh import của WP CLI (cái này đã được cài đặt khi bạn cài đặt EasyEngine theo hướng dẫn của mình):

ee site cd khamphaso.com
cd htdocs
wp db import /root/mysql/khamphaso_com.sql --allow-root

Thế là xong. Bạn đã restore thành công website.
Lời kết

Qua bài viết bạn đã biết thêm một cách backup website trên VPS sử dụng EasyEngine.
    Blogger Comment
    Facebook Comment