[筆記]實作restful api with Dockerized QPKG (使用Python restframework) — — DQPKG 部份
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.confDEPEND_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
esacexit 0
第三步 )建立 QPKG
以上這幾個檔案設定好後 , 基本上以可正常建立 QPKG 了
將欲執行的相關檔案同樣放入 shared folder 下後
在rest_python folder 路徑下執行
qbuild
即可看到 QPKG 已備建立
第四步 )手動安裝於 APP Center 上 , 就可正常運作