Backup OpenShift lên Dropbox

backup openshift to dropbox

Bài này sẽ hướng dẫn thiết lập sao lưu tự động mã nguồn và database trang web đăng ký tại Openshift lên Dropbox.

Chú ý Ở đây tôi backup cả mã nguồn vì tất cả các file media (nhạc, ảnh…) tôi để trên máy chủ khác nên mã nguồn của tôi rất nhẹ, nếu các bạn sử dụng với forum, blog mà không dùng CDN riêng (tức lưu trữ file media luôn trên Host) thì tôi e rằng sau khi backup thì khối dữ liệu của bạn sẽ tương đối lớn, về thời gian dài sẽ phát sinh rắc rối do việc upload 1 file quá lớn là không khả thi.

Cập nhật Những Application gần đây (khoảng tháng 5-2014 trở về hiện tại) thì thư mục chứa mã nguồn đã không còn là /repo/php nữa mà chuyển về /repo luôn. Vì thế mà cần phải chỉnh sửa 1 chút về đường dẫn trong file script. Việc cập nhật này mình đã update lại trong file tải về.

Cài đặt CRON 1.4 cho Openshift Application của bạn

Đăng nhập vào Openshift, vào ứng dụng của bạn và cài đặt CRON 1.4 trong danh mục các ứng dụng có sẵn. Nếu bạn đã cài rồi thì bỏ qua bước này.

Tạo 1 cái App trên tài khoản Dropbox của bạn

Đầu tiên, hãy đăng nhập tài khoản của bạn tại Dropbox. Tạo 1 thư mục có tên “BackupMyWebsite” trong thư mục chính của bạn tại Dropbox. Sau khi đăng nhập Dropbox, vào phần dành cho các nhà phát triển tại đây https://www.dropbox.com/developers/apps/create.

What type of data does your app need to store on Dropbox?

Can your app be limited to its own, private folder?

What type of files does your app need access to?

Sau đó gõ tên App Dropbox của bạn vào.

Sau khi nhấn Create thì bạn sẽ có AppkeyAppSecret code Chúng ta sẽ sử dụng 2 code này để điền vào khi khởi tạo kết nối xác thực từ Openshift.

Upload mã nguồn Backup lên Openshift và xác thực kết nối đến Dropbox

Bạn tải file mã nguồn tôi đã làm sẵn về và chỉnh sửa nó theo thông số cụ thể của bạn.

Dropbox-Openshift Source

Sau khi giải nén, bạn sẽ có 3 file (autobackup.sh, dropbox_uploader.sh, backup.sh)

Dùng WinSCP kết nối đến Openshift, ban tạo 1 folder có tên “dropboxbackup” tại:

$HOME/app-root/runtime/ cùng cấp với folder repo.

Upload file dropbox_uploader.sh lên folder mới tạo.

Mở terminal có trên WinSCP, di chuyển đến thư mục $HOME/app-root/runtime/dropboxbackup để bắt đầu tạo kết nối đến Dropbox để xác thực với App Dropbox: Gõ lệnh:

bash dropbox_uploader.sh

Sau đó hệ thống sẽ hỏi đến Appkey và AppSecret Điền 2 code mà ta đã có vào sau đó nhấn F và Y để đồng ý. Sau khi chạy xong, trong Folder chứa autobackup.sh và dropbox_uploader.sh sẽ có thêm file .dropbox_uploader ở dạng ẩn. => Đã kết nối OK. File .dropbox_uploader này chứa token để máy chủ Openshift có thể access file trên máy chủ Dropbox của bạn. Mở file autobackup.sh và chỉnh sửa những thông số sau:

# BACKUP DATABASE CONFIG
MYSQLDB="DB name"
MYSQLUSER="DB user"
MYSQLPASS="DB pass"
MYSQLHOST="DB Host"
MYSQLPORT="DB Port"

#BACKUP SOURCE CONFIG
SOURCE_PHP_SITE="yourwebsite.com"

Các thông số về MySQL bạn có thể tra tại đường dẫn /var/lib/openshift/[yourID]/.env/mysql/OPENSHIFT_MYSQL_DB_URL

mysql://[DB_User]:[DB_Password]@[DB_Host]:[DB_PORT]/

Trong file này sẽ chứa toàn bộ các câu lệnh tương tác với hệ thống, xuất dữ liệu từ mysql, zip folder… (nếu bạn hiểu về câu lệnh hệ thống Linux thì có thể thêm bớt tùy ý) Sau khi chỉnh sửa xong, upload tập tin autobackup.sh này lên cùng thư mục với file dropbox_uploader.sh. Rồi! Xong! Bạn có thể test tại chỗ bằng cách chạy câu lệnh: (sau khi đã chuyển đến folder $HOME/app-root/runtime/dropboxbackup)

bash autobackup.sh

Tại đây bạn sẽ thấy quá trình đóng gói, xuất dữ liệu và upload lên Dropbox. Khá nhanh!

Cho phép hệ thống tự động 1 cách hoàn toàn

Nhớ rằng để có thể chạy autobackup thì các bạn phải add thêm vào Openshift App của mình bộ CRON 1.4 (thời điểm hiện tại)

Trong thư mục $OPENSHIFT_REPO_DIR/.openshift/cron sẽ có 5 loại: - theo phút - theo giờ - theo ngày - theo tuần - theo tháng.

Bạn muốn hệ thống thực hiện tự động sau thời gian bao lâu thì upload file backup.sh lên folder tương ứng. Video cho sinh động (Đây là của bác Admin bên Congthuong.net - của bác ấy chỉ backup database thôi)

Video

Update

Cập nhật thêm phần tùy chỉnh Cron: Mặc định OpenShift chỉ hỗ trợ cronjob vào các mốc thời gian: minutely, hourly, daily, weekly, monthly Vấn đề đặt ra: nếu chúng ta cần chạy chương trình ở thời điểm khác thì sao? Ví dụ: vào 10AM mỗi ngày, sau 5 - 10 - 15 phút thì sao? Vậy, cách giải quyết sẽ theo hướng cho chương trình chạy liên tục, nhưng có các lệnh điều kiện để có thể khớp với yêu cầu. Ví dụ:

Chạy lệnh lúc 5AM:

#!/bin/bash
if [ `date +%H` == "05" ]
then
    (
        //do something...
    )
fi

Chạy lệnh sau mỗi 15 phút:

#!/bin/bash
MINUTES=`date +%M`

for i in "00" "15" "30" "45";do
    if [ "$MINUTES" == "$i" ];then
        (
            //do something
        )
    fi
done