Backup Directadmin lên Google Drive

32

Directadmin là gì?

Ngày nay việc sử dụng một VPS thay vì dùng hosting đang dần phổ biến bởi sự tiện lợi, chủ động và thoải mái cũng như tốc độ khác biệt so với một shared hosting.

Lưu ý: đã có Script backup v2 – mời các bạn xem qua

Để sử dụng VPS đa số người dùng sẽ cần cài đặt 1 panel hoặc một script quản lý và đa số họ chọn 1 panel như Directadmin để cài đặt vì giá rẻ, chất lượng và dễ sử dụng.

Directadmin
Directadmin

Directadmin có sẵn tính năng Server Backup nhưng tính năng này chỉ backup dữ liệu vào VPS chứ không backup di chuyển sang một bên nào khác hoặc bạn sẽ phải trả phí khá cao để backup VPS.

Hôm nay mình sẽ hướng dẫn các bạn sử dụng bash script để backup directadmin hàng ngày lên Google Drive hoàn toàn miễn phí.

Tại sao nên backup Directadmin ?

Backup là điều cần thiết để bảo vệ các dữ liệu cần được bảo vệ, trong trường hợp bất khả kháng như bị tấn công, bị hỏng dữ liệu và máy chủ bạn có thể dễ dàng restore lại dữ liệu của bạn.

Để mình minh hoạ cho các bạn nghe về câu chuyện bị tấn công:

Theo báo cáo an ninh website quý III năm 2019 vừa được Công ty an toàn thông tin CyStack công bố, Việt Nam có hơn 2.500 trang web bị tấn công, xếp thứ 10 trong số các nước có nhiều website bị hack trên thế giới.

 

Việt Nam lọt top 10 quốc gia bị tấn công nhất
Việt Nam lọt top 10 quốc gia bị tấn công nhất
CMS bị tấn công phổ biến nhất vẫn là WordPress
CMS bị tấn công phổ biến nhất vẫn là WordPress

Backup Directadmin là bước tiếp theo bạn nên làm sau khi đã cài đặt VPS và cần tìm phương án tốt nhất và cố gắng tự động hoá để tiết kiệm thời gian cho chính mình.

Backup Directadmin lên Google Drive bằng Bash Script

Backup Directadmin lên Google Drive là phương án mình tìm hiểu đầu tiên khi mình đang có Google Drive Ultimate trong tay. Tuy vậy, việc tìm kiếm document trên mạng về phương án này không hề có vì vậy mình đã tự nghiên cứu về Rclone để có thể backup toàn bộ dữ liệu website lên Google Drive.

Bash Script mình viết với mục đích backup source code và mysql lên Google Drive hàng ngày.

Backup Directadmin lên Google Drive
Backup Directadmin lên Google Drive

Giờ mình sẽ bắt đầu hướng dẫn các bạn vào việc chính.

Cài đặt Rclone

Rclone là một chương trình dòng lệnh nên mình sẽ down xuống rồi di chuyển file chạy đến thư mục /usr/sbin/ của VPS để sử dụng sau này.

Phiên bản mình hướng dẫn sẽ là Rclone 1.49.4 – phiên bản mới nhất hiện tại.

Cài đặt cho VPS 64 bit.

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

Cài đặt cho VPS  32 bit.

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

Backup Drirectadmin lên Google Drive

Cấu hình kết nối giữa Google Drive và Rclone.

Để Rclone có thể hoạt động bạn cần cấu hình để xác định tài khoản google drive của bạn với Rclone. Ở đây mình sẽ tạo một kết nối mang tên: remote

Trong terminal console bạn gõ lệnh:

rclone config

Bạn sẽ nhận được thông báo như sau

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>

Gõ n để tạo mới một remote. Ở dòng name bạn nhập remote hoặc có thể là tên khác nếu bạn muốn, nhưng nếu làm theo hướng dẫn của mình hãy để tên là remote cho phù hợp với các bước sau này nhé.

Sau khi đặt tên, bạn sẽ nhận được một mớ danh sách Cloud và trong đó bạn chú ý và chọn mục số 11 – Google Drive.

Mục Scope that rclone should use when requesting access from drive chọn 1 – drive

Tiếp theo, để trống với ID of the root folder và Service Account Credentials JSON file path

Khi được hỏi Use auto config? hãy nhập n rồi nhấn Enter. Ngay lập tức, Rclone sẽ đưa ra một đường link, bạn có thể click thẳng vào đó hoặc copy rồi paste vào trình duyệt.

tao-ket-noi-google-drive
Tạo kết nối Google Drive

Giao diện sẽ xuất hiện như sau:

Cấp quyền truy cập cho Rclone
Cấp quyền truy cập cho Rclone

Nhấn nút Allow để đồng ý, sau đó bạn sẽ nhận được đoạn mã verification code như hình dưới:

Mã Verification Google Drive
Mã Verification Google Drive

Quay trở lại cửa sổ dòng lệnh, copy rồi paste code này vào dòng Enter verification code> rồi nhấn Enter.

Chọn n tức no đối với Configure this as a team drive?

Rclone cần xác nhận thông tin một lần nữa, bạn nhấn y để đồng ý rồi nhấn q để thoát khỏi giao diện cấu hình kết nối.

Xong, bây giờ bạn có thể kiểm tra kết nối Rclone

rclone lsd remote:

Bash Script backup Directadmin lên Google Drive

Đây là bước quan trọng để Backup Directadmin lên Google Drive, Script này sẽ backup dữ liệu bao gồm SQL và Source code lên Drive trong một file nén.

Lấy tài khoản và mật khẩu mặc định của Directadmin MySQL:

cat /usr/local/directadmin/conf/mysql.conf

Lưu ý: Script này chỉ hoạt động trên Directadmin không hoạt động trên các Panel khác

Tạo file backup.sh tại 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. Lưu ý chỉnh sửa thông tin tài khoản và mật khẩu MYSQL.

# PUS EDU Plugin - Backup Server and Upload to Cloud
# Version: 1.1
#!/bin/bash
SERVER_NAME=DirectAdmin

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

mkdir -p "$BACKUP_DIR/mysql"

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

for db in $databases; do
	$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD $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
		for C in /home/$domain/domains/*; do
			if [ -d "${C}" -a "${C}" != 'default' -a "${C}" != 'suspended' ]; then
				cuong=${C##*/}
				echo "- "$cuong;
				zip -r $BACKUP_DIR/$cuong.zip /home/$domain/domains/$cuong/public_html/ -q -x /home/$domain/domains/$cuong/public_html/wp-content/cache/**\* #Exclude cache
			fi
		done
	fi
done
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."

Tính năng của Script:

  • 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
  • SERVER_NAME mặc định là DirectAdmin, bạn có thể thay đổi để dễ nhớ hoặc quản trị nhiều website.
  • 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

Kiểm tra Script đã hoạt động hay chưa:

/root/backup.sh

Sau khi nhận được dòng thông báo sau bạn có thể truy cập vào drive để kiểm tra xem source code mình hoạt động chưa.

Total $size, $(($duration / 60)) minutes and $(($duration % 60)) seconds elapsed.

Tạo Cronjob tự động backup Directadmin hằng ngày

Thường mình sẽ chọn script chạy lúc về đêm, khi đó lượng visit vào website ít nên không ảnh hưởng quá nhiều đến trải nghiệm của khách hàng khi sử dụng web.

Ở đây mình chọn 3h sáng.

EDITOR=nano crontab -e
0 3 * * * /root/backup.sh > /dev/null 2>&1

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

Vậy là xong, bây giờ bạn có thể yên tâm rằng toàn bộ website trên Directadmin đều được backup về Drive hằng đêm nhé.

5/5 - (5 votes)
32 Comments
  1. Phạm Hồng Vĩ says

    cho mình hỏi user và pass : da_admin là lấy từ đâu vậy ạ… vì mỗi user có tài khoản mysql riêng mà

    1. DiamondNgo says

      cat /usr/local/directadmin/conf/mysql.conf

      1. Phạm Hồng Vĩ says

        à mình cảm ơn! với cho mình hỏi mình sử dụng 20 / 25gb dung lượng bao gồm 11gb web, 9gb hệ thống . k biết còn 5gb đủ backup k a nhỉ

        1. DiamondNgo says

          đủ nhé bác, nó tự xoá file backup luôn mà :))

          1. Phạm Hồng Vĩ says

            nó nén lại hết mới up lên , hay vừa nén và up từng web 1 ạ… e sợ nén 1 lần không đủ dung lượng, trước bị lỗi vì thiếu dung lượng rồi @@

          2. DiamondNgo says

            Nén 1 lần up lên em, web em nặng phần nào nhất

          3. Phạm Hồng Vĩ says

            e mới up thử rồi, thiếu, còn 5-6 web k up lên dc… hehe

          4. DiamondNgo says

            Tăng disk tý đi là ok ????. Thấy hay chia sẻ cho mọi người nhé bạn ????

          5. Phạm Hồng Vĩ says

            vps DA của e bên vultr không cho nâng cấp.. Có cách nào di chuyển toàn bộ DA qua vps khác mạnh hơn k ạ.. mua thêm key DA tốn kém quá

          6. DiamondNgo says

            Vultr cho nâng cấp mà bạn

          7. Phạm Hồng Vĩ says

            Nâng cấp k dc a, có chat với support bên đó rồi họ cũng bảo k dc. vps của e có cái nâng cấp dc, có cái k

          8. DiamondNgo says

            Được em, anh nâng cấp VPS hoài, em dùng gói nào

          9. Phạm Hồng Vĩ says

            em gửi ticket nó bảo là k đủ tài nguyên a @@ gói 5$ thôi a
            There is insufficient free capacity on this VM’s host node for a plan upgrade. If you need a larger instance, please use the “Snapshot” feature to redeploy a larger version of this instance in any of our datacenters.

          10. DiamondNgo says

            Em vô thẳng Settings chọn Change Plan là được mà

          11. Phạm Hồng Vĩ says

            vô nó báo như này đó a. không biết nhờ nó snapshot giữ nguyên ip thì có mất bản quyền Driectadmin không a nhỉ, và mất dữ liệu k a
            There is insufficient free capacity on this VM’s host node for a plan upgrade. If you need a larger instance, please use the “Snapshot” feature to redeploy a larger version of this instance in any of our datacenters.

          12. DiamondNgo says

            Có em, em mua bản quyền bên nào change ip đc mà

          13. Phạm Hồng Vĩ says

            trước nhờ a kia mua giờ ảnh k nhớ luôn @@, e tưởng giữ nguyên IP là k mất bản quyền, dữ liệu chớ ???? lại tốn thêm tiền mua DA

          14. DiamondNgo says

            Nguyên ip không mất bản quyền nhé em

  2. Phạm Hồng Vĩ says

    0 2 * * 1 /root/backup-data.sh > /dev/null 2>&1
    Sao e dùng cron này mà hơn 1 tuần rồi từ ngày 23/03 mà chưa backup đợi tiếp theo nhỉ

    1. DiamondNgo says

      em lưu đúng tên file không kìa

      1. Phạm Hồng Vĩ says

        dạ đúng a, chạy thử nó vẫn gửi backup về driver mà… cron 0 2 * * thì nó gửi mỗi ngày.. còn 0 2 * * 1 hơn 1 tuần rồi vẫn chưa gửi ạ

        1. DiamondNgo says

          Chắc chưa đúng ngày rồi :)), em chạy gì 1 tuần vậy mua gg drive unlimated m à chạy

          1. Phạm Hồng Vĩ says

            E mua google driver gói 100gb í, nhưng e nhiều web hơn 30gb rồi, nên để chạy theo tuần… mà từ ngày 23/03 đến nay 9 ngày rồi mà chưa chạy vô lý ghê.

  3. WPFast says

    Đúng cái em cần rồi ạ, bài viết rất chi tiết, dễ làm theo, em cảm ơn chia sẻ của a, cảm ơn sự tư vấn tận tình của a, e hỏi hơi nhiều mà ko bị anh chửi ạ >.<

    1. DiamondNgo says

      Haha không sao em trai

  4. WPFast says

    em backup được rồi, giờ restore làm sao anh nhỉ

    1. DiamondNgo says

      Rclone có wiget về sv đó em. Còn setup thì thủ công nhé ????

  5. MẠNH CƯỜNG LTD says

    Này có clip không a, đến bước project_number, object_acl thì nhập gì a ?
    Không thấy bước này Mục Scope that rclone should use when requesting access from drive chọn 1 – drive

    1. DiamondNgo says

      Chụp hình mình xem nhé, Bạn xài script v2 cho khỏe lúc restore nhé bạn

  6. loi hoang says

    Hi anh, giờ em muốn tắt nó đi thì làm thế nào ạ.

    1. Nguyễn Hữu Nghĩa says

      Bạn xóa bỏ cái cron đi là được nhé.

Leave A Reply

Your email address will not be published.