|
@@ -0,0 +1,188 @@
|
|
|
+# 範例 : 將 Docker-Compose 包裝成 QPKG
|
|
|
+## 前置作業
|
|
|
+* 安裝 QPKG
|
|
|
+* 假設專案名稱為 `DottedSign`
|
|
|
+
|
|
|
+## 準備好 Docker Compose
|
|
|
+* 確定你的 docker-compose 跑得起來
|
|
|
+* 重新整理 docker image
|
|
|
+ * DottedSign : `docker tag 58...68.dkr.ecr.us-east-1.amazonaws.com/dottedsign:preparing kdanmobile/qnap_dotted_sign_web:1.0`
|
|
|
+ * Nginx : 把 nginx:1.17.0 跟 DottedSign 的 conf 設定重新包成新的 image `kdanmobile/qnap_dotted_sign_nginx:1.0`
|
|
|
+
|
|
|
+* 建立新的 docker-compose project
|
|
|
+ * 開新 project folder : `mkdir new_dotted_sign`
|
|
|
+ * 修改 docker-compose.yml 使用新的 image tag
|
|
|
+ * 把 docker image 壓成 tar.gz 檔
|
|
|
+ * `docker save kdanmobile/qnap_dotted_sign_web:1.0 | gzip -c > dotted_sign_web.tar.gz`
|
|
|
+ * `docker save kdanmobile/qnap_dotted_sign_nginx:1.0 | gzip -c > dotted_sign_nginx.tar.gz`
|
|
|
+ * 確認 folder 中只有 docker-compose.yml && 所有的 image 壓縮檔
|
|
|
+
|
|
|
+## 建立 QPKG 專案
|
|
|
+* ```cd `getcfg QDK Install_Path -f /etc/config/qpkg.conf` ```
|
|
|
+* `qbuild --create-env DottedSign`
|
|
|
+* 將產生出來的 `DottedSign` folder, 移到你想移動的位置
|
|
|
+
|
|
|
+## 修改專案內容
|
|
|
+* 先進入專案資料夾
|
|
|
+ * `cd [DottedSign_path]`
|
|
|
+### 移除無用檔案
|
|
|
+* 把用不到的 folder 砍掉
|
|
|
+ * `rm -r arm_64/ arm-x19/ arm-x31/ arm-x41/ x86/ x86_64/ x86_ce53xx/`
|
|
|
+### 放置你的 docker-compose
|
|
|
+* `cd shared`
|
|
|
+* `cp -r [new_dotted_sign path] docker_folder` 名稱隨意, 後面會用到
|
|
|
+* 確保 `docker-compose up` 能夠順利執行
|
|
|
+ * 切到 docker_folder 中
|
|
|
+ * 還原 docker image
|
|
|
+ * 確認 `docker-compose up -d` 正常執行
|
|
|
+ * `docker-compose down`
|
|
|
+ * 砍掉 docker image
|
|
|
+
|
|
|
+### 放置 icon
|
|
|
+* `cd [DottedSign_path]/icons`
|
|
|
+* 裡面放三張圖片
|
|
|
+ * `DottedSign.gif` : App Center 顯示的 icon, 64*64px
|
|
|
+ * `DottedSign_gray.gif` : disable 版本 icon, 64*64px
|
|
|
+ * `DottedSign_80.gif` : icon, 80*80px
|
|
|
+
|
|
|
+* **重點**
|
|
|
+ * 注意檔名, `DottedSign` 應該是對應到 `QPKG_NAME`
|
|
|
+
|
|
|
+
|
|
|
+### [DottedSign_path]/qpkg.cfg 修改如下
|
|
|
+
|
|
|
+```conf
|
|
|
+QPKG_NAME="dotted_sign"
|
|
|
+QPKG_DISPLAY_NAME="DettedSign"
|
|
|
+QPKG_VER="1.0"
|
|
|
+QPKG_AUTHOR="Kdan Mobile"
|
|
|
+
|
|
|
+# 啟動你的 qpkg 後, 要用哪個 port 及哪個 default path 連到你的服務
|
|
|
+QPKG_WEBUI="/"
|
|
|
+QPKG_WEB_PORT=4040
|
|
|
+
|
|
|
+# # 以下兩個為預設值不用動
|
|
|
+QPKG_RC_NUM="101"
|
|
|
+QPKG_SERVICE_PROGRAM="dotted_sign.sh"
|
|
|
+
|
|
|
+# # 可能會需要加註 license (GPL, MIT .. .)
|
|
|
+# QPKG_LICENSE=""
|
|
|
+
|
|
|
+# # 實測過, 但不知道會顯示在哪
|
|
|
+# QPKG_SUMMARY="The Best E-Signature Solution for Your Business"
|
|
|
+
|
|
|
+# # 當值為 1 ( default 非 1 ), 會以 popup 的方式顯示你的網頁, 而非另開分頁, 但有 iframe x-frame-options 問題
|
|
|
+# QPKG_DESKTOP_APP=1
|
|
|
+
|
|
|
+# 以下有一堆其他設定, 但都是註解掉的狀態
|
|
|
+```
|
|
|
+
|
|
|
+* **重點** : 此檔案內容
|
|
|
+ * `QPKG_NAME` 會被其他檔案參照, 需要注意是否正確
|
|
|
+ * `QPKG_SERVICE_PROGRAM` 需要確認與 `shared/` 下的檔名一致(預設應該ok)
|
|
|
+ * `QPKG_WEBUI`, `QPKG_WEB_PORT` 要看你 web application, nginx 的設定
|
|
|
+
|
|
|
+
|
|
|
+### [DottedSign_path]/package_routines 修改如下
|
|
|
+
|
|
|
+```sh
|
|
|
+QPKG_CONF=/etc/config/qpkg.conf
|
|
|
+DOCKER=$(/sbin/getcfg container-station Install_Path -f ${QPKG_CONF})/bin/system-docker
|
|
|
+
|
|
|
+image_id_from_docker_load() {
|
|
|
+ # docker load will return one of:
|
|
|
+ # 1. "Loaded image: nginx:1.17.0"
|
|
|
+ # 2. "Loaded image ID: sha256:719cd2e...cb50105"
|
|
|
+
|
|
|
+ IMAGE_ID=$(echo "$1" | sed 's/Loaded image: //g' | sed 's/Loaded image ID: sha256://g')
|
|
|
+ echo $IMAGE_ID
|
|
|
+}
|
|
|
+
|
|
|
+load_docker_image() {
|
|
|
+ LOAD_RESULT=$($DOCKER load < "$SYS_QPKG_DIR/docker_folder/$1")
|
|
|
+ IMAGE_ID=$(image_id_from_docker_load "$LOAD_RESULT")
|
|
|
+ echo $IMAGE_ID
|
|
|
+}
|
|
|
+
|
|
|
+# callback-function
|
|
|
+pkg_post_install(){
|
|
|
+ IMAGES_ID_1=$(load_docker_image "dotted_sign_nginx.tar.gz")
|
|
|
+ IMAGES_ID_2=$(load_docker_image "dotted_sign_web.tar.gz")
|
|
|
+ echo "$IMAGES_ID_1 $IMAGES_ID_2" > $SYS_QPKG_DIR/loaded_docker_images
|
|
|
+}
|
|
|
+
|
|
|
+# callback-pseudo-functions
|
|
|
+PKG_PRE_REMOVE="{
|
|
|
+ IMAGE_ID=\$(/bin/cat $SYS_QPKG_DIR/loaded_docker_images)
|
|
|
+ $DOCKER image rm \$IMAGE_ID
|
|
|
+}"
|
|
|
+```
|
|
|
+* 此檔案內容全都被註解掉, 因此直接加入即可
|
|
|
+* **重點** :
|
|
|
+ * `pkg_post_install`
|
|
|
+ * 要注意到底 load 了哪些 image 壓縮檔
|
|
|
+ * `PKG_PRE_REMOVE` 是個字串
|
|
|
+ * 要留意哪些地方要跳脫, 哪些不用
|
|
|
+
|
|
|
+
|
|
|
+### [DottedSign_path]/shared/dotted_sign.sh 修改如下
|
|
|
+
|
|
|
+```sh
|
|
|
+#!/bin/sh
|
|
|
+CONF=/etc/config/qpkg.conf
|
|
|
+QPKG_NAME="dotted_sign"
|
|
|
+
|
|
|
+DOCKER_COMPOSE=$(/sbin/getcfg container-station Install_Path -f ${CONF})/bin/system-docker-compose
|
|
|
+SYS_QPKG_DIR=$(/sbin/getcfg $QPKG_NAME Install_Path -f ${CONF})
|
|
|
+DOCKER_COMPOSE_FILE="$SYS_QPKG_DIR/docker_folder/docker-compose.yml"
|
|
|
+
|
|
|
+# # 不知道用途, 實測砍掉沒差 先保留
|
|
|
+# export QNAP_QPKG=$QPKG_NAME
|
|
|
+
|
|
|
+case "$1" in
|
|
|
+ start)
|
|
|
+ ENABLED=$(/sbin/getcfg $QPKG_NAME Enable -u -d FALSE -f $CONF)
|
|
|
+ if [ "$ENABLED" != "TRUE" ]; then
|
|
|
+ echo "$QPKG_NAME is disabled."
|
|
|
+ exit 1
|
|
|
+ fi
|
|
|
+ : ADD START ACTIONS HERE
|
|
|
+ $DOCKER_COMPOSE -f $DOCKER_COMPOSE_FILE -p $QPKG_NAME up -d
|
|
|
+ ;;
|
|
|
+
|
|
|
+ stop)
|
|
|
+ : ADD STOP ACTIONS HERE
|
|
|
+ $DOCKER_COMPOSE -f $DOCKER_COMPOSE_FILE -p $QPKG_NAME down
|
|
|
+ ;;
|
|
|
+
|
|
|
+ restart)
|
|
|
+ $0 stop
|
|
|
+ $0 start
|
|
|
+ ;;
|
|
|
+
|
|
|
+ *)
|
|
|
+ echo "Usage: $0 {start|stop|restart}"
|
|
|
+ exit 1
|
|
|
+esac
|
|
|
+
|
|
|
+exit 0
|
|
|
+```
|
|
|
+
|
|
|
+* 對此檔案的變更, 主要是刪除一些無用的變數設定, 加入 start / stop 的 docker-compose 指令
|
|
|
+* **重點** : 凡是 docker-compose 的 QPKG, 此檔案內容應該幾乎一樣
|
|
|
+ * 只有 `QPKG_NAME` 會變動, 要參考你的 `qpkg.cfg`
|
|
|
+ * 其餘部分完全一樣, 可以複製貼上
|
|
|
+
|
|
|
+## Build 專案
|
|
|
+* `cd [DottedSign_path]`
|
|
|
+* `qbuild`
|
|
|
+
|
|
|
+## 安裝 QPKG
|
|
|
+* 方法一 : 利用 App Center 上傳你的檔案進行安裝
|
|
|
+* 方法二 : 若安裝檔已經在 QNap Nas 上, 可用 command line 安裝
|
|
|
+ * `cd [DottedSign_path]/build`
|
|
|
+ * `chmod 755 dotted_sign_0.2.qpkg`
|
|
|
+ * `./dotted_sign_0.2.qpkg`
|
|
|
+<!--stackedit_data:
|
|
|
+eyJoaXN0b3J5IjpbLTk2MDQxNDg3XX0=
|
|
|
+-->
|