Node-REDをWeb Apps for Containerで動かす。
掲題の通りです。
AzureのWeb Apps for Containerで動かしたいです。。
ただ、ネット上にあまり記事がなかったので自分が実施した内容を書いてみようと思います。
やりたい事
1 Node-REDをWeb Apps for Container で動かす。
2 Azureのネットワークシェアにデータ永続化を行う。
特に2が結構苦労しました。
1 Node-REDをWeb Apps for Container で動かす。
Node-REDをWeb Apps for Containerで動かす事自体は結構簡単です。
Web Appsで下記のdockerイメージを基にビルドすればとりあえず動かせます。
ただ、このままだと settings.jsを書き換える事ができていないので、誰でもNode-REDのソースを触れてしまう事やプロジェクト機能が使えない事が問題です。
なので、自作でdockerイメージを作成します。
以下では主に
settings.jsやflows.json,flow_cred.jsonをコピーしています。
settings.jsで、ユーザ認証の設定、projects有効されている事が前提です。
ADD --chown=node-red:node-red projects/ /data/projects/
projectsの所有者設定を書かないとフローを更新する際にエラーが出ます。
Dockerfile
FROM nodered/node-red
# Copy package.json to the WORKDIR so npm builds all
# of your added nodes modules for Node-RED
COPY package.json /usr/src/node-red/package.json
RUN npm install --unsafe-perm --no-update-notifier --no-fund --only=production
# Copy _your_ Node-RED project files into place
# NOTE: This will only work if you DO NOT later mount /data as an external volume.
# If you need to use an external volume for persistence then
# copy your settings and flows files to that volume instead.
COPY .config.json /data/.config.json
#COPY --chown=node-red:node-red projects/ /data/projects/
COPY settings.js /data/settings.js
COPY flows_cred.json /data/flows_cred.json
ADD --chown=node-red:node-red projects/ /data/projects/
# You should add extra nodes via your package.json file but you can also add them here:
#WORKDIR /usr/src/node-red
#RUN npm install node-red-node-smoothd
上記のdockerイメージをdockerhubか azure container registry へアップロードして下さい。
それを基にWeb Appsをビルドするように設定します。
これで、とりあえずWeb Apps for ContainerでNode-REDを動かせます。
ただ、永続ストレージは現段階では使えていません。
コンテナが再起動するごとにソースコードがぶっ飛びます。
2 Azureのネットワークシェアにデータ永続化を行う。
これは、正直綺麗な方法がわかりませんでした。
が、とりあえず動く事が大事です。
結論から書くと Docker-Composeを利用しました。
Azure Web Apps for Containerでdocker run -v を使用できれば良かったのですが、設定の方法がわかりませんでした。
まず、最初にAzureの構成を以下設定へ変更します。
WEBSITES_ENABLE_APP_SERVICE_STORAGE
=> true
これで、Web Apps for Container のネットワークシェアを使用できるようになります。
( 初期値が trueと書かれている記事もありましたですが、自分の場合は初期値はfalseでした )
そして、以下のDocker-compose.ymlを元に設定すればネットワークシェアを利用してデータ永続化ができます。
${WEBAPP_STORAGE_HOME}は、Web Apps for Containerで利用する際には、固定でこちらで設定する必要があります。
Docker-compose.yml
version: "3.7"
services:
node-red:
image: hogehoge/node-red:latest
environment:
- TZ=Asia/Tokyo
ports:
- "1880:1880"
networks:
- node-red-net
volumes:
- ${WEBAPP_STORAGE_HOME}/data:/data/projects/
networks:
node-red-net:
最後に
自分用のメモ的に書いているので、文章が適当ですいません。。
画像とかあればもっと分かりやすいと気づいたのは書き終わった後。。。
また、内容に間違いあれば是非教えて下さい。