phpmyadmin for openshift

Thường thì để quản lý Database trên Host, chúng ta hay nghe nói đến công cụ phpMyAdmin, đây là công cụ có tính năng đầy đủ để chúng ta có thể xử lý, tạo mới, sao lưu dữ liệu. Khi chúng ta sử dụng OpenShift thì chúng ta cũng muốn sử dụng công cụ này, tuy nhiên phiên bản đóng gói có sẵn trên Danh mục ứng dụng của OpenShift lại có phiên bản hơi “cũ” trong khi chúng ta lại là những người có “máu” cập nhật. Bài này sẽ hướng dẫn việc đưa phiên bản phpMyAdmin  mới nhất trên trang chủ phpMyAdmin lên website của chúng ta.

Bắt đầu cài phpMyAdmin với phiên bản mới nhất từ trang chủ của phpMyAdmin Sử dụng luôn trong giao diện dòng lệnh terminal:

cd $OPENSHIFT_REPO_DIR/php
wget -O phpMyAdmin-4.1.9-english.tar.gz http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/4.1.9/phpMyAdmin-4.1.9-english.tar.gz/download
tar xfz phpMyAdmin-4.1.9-english.tar.gz
mv phpMyAdmin-4.1.9-english phpmyadmin
rm -f phpMyAdmin-4.1.9-english.tar.gz

Phiên bản cao nhất tại thời điểm bài này viết là 4.1.9. Nếu phiên bản cao hơn thì cần thay thế link trong đường link tải WGET. Bốn câu lệnh trên đã bao gồm tải - giải nén - đổi tên folder thành phpmyadmin - xóa file tải về.

Truy cập vào folder phpmyadmin qua WinSCP, thêm file .htaccess với nội dung:

RewriteEngine On
RewriteRule ^(setup/|libraries/|nx.php) - [F,L,NC]

Đổi tên file config.sample.inc.php thành config.inc.php, sửa nội dung trong file này tại những dòng sau: (chú ý: chỉ chỉnh sửa - không xóa)

$cfg['Servers'][$i]['host'] = 'DB Host';
$cfg['Servers'][$i]['port'] = 'DB Port';
$cfg['Servers'][$i]['socket'] = getenv('OPENSHIFT_MYSQL_DB_SOCKET');

$cfg['UploadDir'] = getenv('OPENSHIFT_TMP_DIR');
$cfg['SaveDir']   = getenv('OPENSHIFT_TMP_DIR');

DB Host, DB Port có thể tìm trong đường dẫn:

/var/lib/openshift/[yourID]/.env/mysql/OPENSHIFT_MYSQL_DB_URL

Nội dung giống như thế này:

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

Lưu file này lại.

CHMOD 600 cho 2 file config.inc.php và .htaccess.

Truy cập vào phpmyadmin trên trình duyệt theo đường link: http://yourdomain/phpmyadmin.

Tài khoản truy cập chính là thông số DB_User, DB_Password trên.

Update: Một vài câu lệnh bash dùng để cập nhật phiên bản mới cho phpMyAdmin phiên bản cũ hơn đã tồn tại trên host của bạn: Chú ý: trước khi sử dụng cần điều chỉnh 2 biến PMAFOLDER (phpMyAdmin folder) và PMAVERSION (phpMyAdmin version)

cd $OPENSHIFT_REPO_DIR/php
cp ./PMAFOLDER/.htaccess ./htaccess.bak
cp ./PMAFOLDER/config.inc.php ./config.inc.php.bak
rm -rf PMAFOLDER
wget -O phpMyAdmin-PMAVERSION-english.tar.gz http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/PMAVERSION/phpMyAdmin-PMAVERSION-english.tar.gz/download
tar xfz phpMyAdmin-PMAVERSION-english.tar.gz
mv phpMyAdmin-PMAVERSION-english PMAFOLDER
rm -f phpMyAdmin-PMAVERSION-english.tar.gz
mv ./htaccess.bak ./PMAFOLDER/.htaccess
mv ./config.inc.php.bak ./PMAFOLDER/config.inc.php
chmod 600 ./PMAFOLDER/.htaccess
chmod 600 ./PMAFOLDER/config.inc.php

Update: Gần đây, khi tạo mới Application trong Openshift thì đường dẫn đến folder mã nguồn không còn là

[UID]/app-root/repo/php/

mà hiện giờ sẽ là:

[UID]/app-root/repo/

Vì thế câu lệnh để cập nhật sẽ có thay đổi 1 chút như sau:

cd $OPENSHIFT_REPO_DIR
cp ./PMAFOLDER/.htaccess ./htaccess.bak
cp ./PMAFOLDER/config.inc.php ./config.inc.php.bak
rm -rf PMAFOLDER
wget -O phpMyAdmin-PMAVERSION-english.tar.gz http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/PMAVERSION/phpMyAdmin-PMAVERSION-english.tar.gz/download
tar xfz phpMyAdmin-PMAVERSION-english.tar.gz
mv phpMyAdmin-PMAVERSION-english PMAFOLDER
rm -f phpMyAdmin-PMAVERSION-english.tar.gz
mv ./htaccess.bak ./PMAFOLDER/.htaccess
mv ./config.inc.php.bak ./PMAFOLDER/config.inc.php
chmod 600 ./PMAFOLDER/.htaccess
chmod 600 ./PMAFOLDER/config.inc.php

Update AutoUpdate Cronjob:

Hiện tại cấu trúc thư mục của OpenShift là:

[UID]/app-root/repo/

Thư mục Cron là:

[UID]/app-root/repo/.openshift/cron/

Trong đây có các thư mục monthly, weekly, daily, hourly, minutely, khi bạn đặt file script vào folder nào thì hệ thống sẽ thực hiện công việc có trong script theo chu kỳ tương ứng.

Bạn có thể sử dụng cronjob này để tự động update phpmyadmin thông qua script sau:

#=========================DESCRIPTION=========================
# Author: Trung Thành
# Website: THANHNT.COM
#   Script hỗ trợ tự động update các phiên bản PhpMyAdmin (PMA) cho server Openshift
#   hoặc có thể dùng cho các server khác với 1 chút thay đổi.
#   Sử dụng với Cronjob để tự động hóa hoàn toàn hoặc bạn có thể chạy manual.
#   Lưu lại Log mỗi lần chạy để kiểm tra nếu có sự cố
#=============================================================

#=========================VARIABLE============================
# TEMP_FILE: File tạm chứa dữ liệu từ trang chủ PMA nhằm check
#            phiên bản mới nhất hiện tại
# PMAFOLDER: Mỗi trang web có thể custom tên folder này nhằm tránh nhiều kẻ nhòm ngó
# PMADIR: Đường dẫn tuyệt đối của PMA folder trên server
# TMPCOPYFILE: Đường dẫn tạm cho việc backup....
#=============================================================
TEMP_FILE=${OPENSHIFT_REPO_DIR}/pma-version_temp.html
PMAFOLDER='phpmyadmin'
PMAFOLDEROLD=${PMAFOLDER}-OLD
PMADIR=${OPENSHIFT_REPO_DIR}${PMAFOLDER}
TMPCOPYFILE=${OPENSHIFT_REPO_DIR}

LOGDIR=${OPENSHIFT_REPO_DIR}/.openshift
LOGFILE=$LOGDIR/phpmyadmin-updates.log
#=============================================================

#============Check for all directories========================
if [ ! -d "$LOGDIR" ]; then
echo
echo "Log directory doesn't exist. Please modify the script and re-run."
echo
exit 1
fi
#=============================================================

#============Check for the latest version=====================
wget -q -O $TEMP_FILE http://www.phpmyadmin.net/home_page/downloads.php
if [ "$?" != '0' ]; then
    echo 'Something wrent wrong while downloading the downloads.php file from phpmyadmin.net!' >> $LOGFILE
    exit 1
fi

NEW_VERSION=$(grep -i '.h2.phpmyadmin' $TEMP_FILE | head -1 | sed 's_</\?h2>__g' | awk '{print $2}')
if [ "$NEW_VERSION" == '' ]; then
    echo 'Something wrong in identifying the new version' >> $LOGFILE
fi
rm $TEMP_FILE #remove temp file
#=============================================================

#============Check for the current version====================

CURRENT_VERSION=$(ls ${PMADIR}/RELEASE-DATE-* | sed 's:'${PMADIR}'/RELEASE-DATE-::')
#=============================================================

#============Insert date and time of update===================
echo >> $LOGFILE
echo 'Date: '$(date +%F)  >> $LOGFILE
echo 'Time: '$(date +%H-%M-%S)  >> $LOGFILE

echo 'Current Version: '$CURRENT_VERSION >> $LOGFILE
echo 'New Version: '$NEW_VERSION >> $LOGFILE
#=============================================================

#=============================================================
if [ "$1" == '' ]; then
    if [ "$NEW_VERSION" == "$CURRENT_VERSION" ]; then
        echo 'No updates available' >> $LOGFILE
        echo >> $LOGFILE
        exit 0
    else
        echo 'Updating PhpMyAdmin from '$CURRENT_VERSION' to '$NEW_VERSION'...' >> $LOGFILE
        if [ ! -d "$PMADIR" ]; then
            echo "PhpMyAdmin directory doesn't exist. Please modify the script and re-run." >> $LOGFILE
            exit 1
        fi
        mv ${PMADIR}/.htaccess ${TMPCOPYFILE}htaccess.bak
        mv ${PMADIR}/config.inc.php ${TMPCOPYFILE}config.inc.php.bak
        cd $PMADIR/..
        rm -rf $PMADIR
        wget -O phpMyAdmin-${NEW_VERSION}-english.tar.gz http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/${NEW_VERSION}/phpMyAdmin-${NEW_VERSION}-english.tar.gz/download
        tar xfz phpMyAdmin-${NEW_VERSION}-english.tar.gz && rm -f phpMyAdmin-${NEW_VERSION}-english.tar.gz
        mv phpMyAdmin-${NEW_VERSION}-english ${PMAFOLDER}
        cd /
        mv ${TMPCOPYFILE}htaccess.bak ${PMADIR}/.htaccess
        mv ${TMPCOPYFILE}config.inc.php.bak ${PMADIR}/config.inc.php
        chmod 600 ${PMADIR}/.htaccess
        chmod 600 ${PMADIR}/config.inc.php
    fi
else
    echo 'Manually updating the version to completed!'
fi

echo 'Done upgrading PhpMyadmin...' >> $LOGFILE
echo >> $LOGFILE
#=============================================================

Cấu hình: biến PMAFOLDER là biến quy định tên folder phpmyadmin hiện tại của bạn. Vui lòng điền chính xác.

Tạo 1 file script với tên auto_update_pma.sh có nội dung như trên, đặt file này vào folder weekly. Chú ý rằng trong folder này còn có thêm một vài file khác quy định quyền thực thi, bạn cần mở file jobs.allow và thêm vào tên file script rồi lưu lại, ví dụ như của tôi:

#
#  Script or job files listed in here (one entry per line) will be
#  executed on a weekly-basis.
#
#  Example: The chronograph script will be executed weekly but the README
#           and chrono.dat files in this directory will be ignored.
#
#           The README file is actually ignored due to the entry in the
#           jobs.deny which is checked before jobs.allow (this file).
#
chronograph
auto_update_pma.sh

Folder nào không có gì thì bỏ qua công đoạn này.

Vậy là cứ sau 1 tuần hệ thống lại tự động check phiên bản mới và cập nhật nếu có.

Nếu các bạn gặp bất cứ khó khăn gì trong việc cấu hình thì cứ liên hệ với mình hoặc để lại comment bên dưới, mình sẽ hỗ trợ.