[筆記]實作restful api with Dockerized QPKG (使用Python restframework) — — DQPKG 部份

R. H.
hobo engineer
Published in
6 min readDec 21, 2018

前情提要 :

QPKG 能將欲執行的程式包裝起來 , 並安裝於 Qnap Nas 上 執行 .
而 DQPKG 則是指 Dockerized QPKG 能讓服務於 Container 執行 , 最大好處是在 Nas 上執行時能建起一個獨立環境執行 .

而此篇主要紀錄如何將以包裝好的 Docker Container 服務包裝進 QPKG 裡

第一步 )App Center 安裝好 QDK , 並 ssh 連入 nas 內建立新的 QPKG 專案

qbuild --create-env rest_python

folder 下預設會有以下檔案

armXXXX , x86### 等都可以先刪掉 , 那些是用來設定不同 nas 機型的設定檔 , 在此先用不到

刪完不用的後 , 剩這些

qpkg.cfg

主要用來設定 QPKG 一些環境變數

特別需設定的是這幾個

#qpkg.cfg
QPKG_NAME="rest_python"
QPKG_DISPLAYNAME="rest_python"
QPKG_SERVICE_PROGRAM="rest_python.sh" // 指定app執行動作的設定檔QPKG_SERVICE_PORT="9000" // 一樣預開port 9000

package_routines

主要用來設定 QPKG package 於 APP Center 安裝前 中 後 個別執行的動作

這邊依官方範例一樣畫葫蘆就好 , 在安裝後將主要設定值寫入 qpkg.conf

pkg_post_install(){
. qpkg.cfg
QPKG_CONF=/etc/config/qpkg.conf
DEPEND_ON=container-station
/sbin/setcfg $QPKG_NAME depend_on "${DEPEND_ON}" -f $QPKG_CONF
/sbin/setcfg $QPKG_NAME Timeout "${QPKG_TIMEOUT}" -f $QPKG_CONF
[ -n "${QPKG_HEALTHY_CHECK_URL}" ] && \
/sbin/setcfg $QPKG_NAME Healthy_Check_Url "${QPKG_HEALTHY_CHECK_URL}" -f $QPKG_CONF
INSTALL_PATH=$(/sbin/getcfg ${QPKG_NAME} Install_Path -f $QPKG_CONF)
}

第二步 )這邊才是重點 , 在 shared 下會有個 shell 檔 , 主要設定 app 於執行時的動作(已於 qpkg.cfg 中設定為 rest_python.sh)

#!/bin/shCONF=/etc/config/qpkg.conf
QPKG_NAME="rest_python"
QPKG_DISPLAY_NAME="rest_python"
QPKG_PATH=`/sbin/getcfg $QPKG_NAME Install_Path -f ${CONF}`
QAI_PATH=$QPKG_PATH/data
QAI_MOUNT_PATH="/mnt/ext/opt/$QPKG_NAME"
container_path=$(/sbin/getcfg container-station Install_Path -f /etc/config/qpkg.conf)
export PATH=$container_path/bin:$container_path/sbin:$PATH
CONTAINER_NAME="container-station"
CONTAINER_ROOT=`/sbin/getcfg ${CONTAINER_NAME} Install_Path -f ${CONF}`
.........case "$1" in
start)

ENABLED=$(/sbin/getcfg $QPKG_NAME Enable -u -d FALSE -f $CONF)
if [ "$ENABLED" != "TRUE" ]; then
........
//這邊會有一些 app start 執行時的預設動作 , 主要是確認要執行的 app 跟 container station 是否可正常呼叫
........
fi
: ADD START ACTIONS HERE
//啟動 app 時 docker-compose up
$CONTAINER_ROOT/bin/system-docker-compose -f $QPKG_PATH/docker-compose.yml up -d

;;
stop)
: ADD STOP ACTIONS HERE
//結束 app 時 docker-compose stop
$CONTAINER_ROOT/bin/system-docker-compose -f $QPKG_PATH/docker-compose.yml stop
........
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

第三步 )建立 QPKG

以上這幾個檔案設定好後 , 基本上以可正常建立 QPKG 了
將欲執行的相關檔案同樣放入 shared folder 下後

在rest_python folder 路徑下執行

qbuild

即可看到 QPKG 已備建立

第四步 )手動安裝於 APP Center 上 , 就可正常運作

--

--