# こんなタイトルばっかり。
はじめに
Dockerfile の README を書く、といって早 4,5ヶ月、完全に忘れていたら書く必要がなくなってました。
uncaughtexception.hatenablog.com
本編
下記の App Service on Linux で Deno を動かした記事で使った方法と同様に、スタートアップ スクリプトでの必須ライブラリー/フォントのインストールを試してみました。
uncaughtexception.hatenablog.com
スタートアップ スクリプトに関しては、こちらの記事に雑に書いてあります。
スタートアップ スクリプトに記載した Puppeteer に必要なライブラリーをインストールする部分は、下記のものです。
#!/bin/sh apt update \ && apt install -y \ ca-certificates \ fonts-liberation \ gconf-service \ libappindicator1 \ libasound2 \ libatk1.0-0 \ libatk-bridge2.0-0 \ libc6 \ libcairo2 \ libcups2 \ libdbus-1-3 \ libexpat1 \ libfontconfig1 \ libgcc1 \ libgconf-2-4 \ libgdk-pixbuf2.0-0 \ libglib2.0-0 \ libgtk-3-0 \ libnspr4 \ libnss3 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libstdc++6 \ libx11-6 \ libx11-xcb1 \ libxcb1 \ libxcomposite1 \ libxcursor1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxi6 \ libxrandr2 \ libxrender1 \ libxss1 \ libxtst6 \ lsb-release \ unzip \ wget \ xdg-utils \ && mkdir /noto && cd /noto \ && wget https://noto-website.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \ && unzip NotoSansCJKjp-hinted.zip \ && mkdir -p /usr/share/fonts/noto \ && cp *.otf /usr/share/fonts/noto \ && chmod 644 -R /usr/share/fonts/noto/ \ && fc-cache -fv \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && rm -rf /noto
Puppeteer の動作確認は、下記の JS ファイルを使用し、ProtoOut Studio のトップ画面のスクリーンショットを取得してみました。
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']}); const page = await browser.newPage(); await page.goto('https://protoout.studio/'); await page.waitFor(10000); await page.screenshot({path: 'example.png'}); await browser.close(); })();
結果はこちら。
# テストに使ってすみません🙇♂️
# 3 期生、募集中だそうです。
問題なく取得できていますね。
カスタム コンテナーではなく、Node.js の Blessed Image 上で Puppeteer が動作することを確認できました。
なお、実際の Web アプリケーションのスタートアップ スクリプトに上記スクリプトを組み込んだ場合、この必須ライブラリーのインストールが起動処理の一部として実行されます。
インストールするライブラリーが多く、結構時間がかかるので、App Service のアプリケーション設定 WEBSITES_CONTAINER_START_TIME_LIMIT にこのインストール時間を見込んだ値を指定する必要があります。
カスタム コンテナーの起動に時間がかかり、起動が終了する前にプラットフォームがコンテナーを再起動します。 プラットフォームがコンテナーを再起動する前の待機時間を構成できます。 これを行うには、WEBSITES_CONTAINER_START_TIME_LIMIT アプリ設定を目的の値に設定します。 既定値は 230 秒であり、最大値は 1800 秒です。
カスタム コンテナーにした場合も、コンテナー イメージのサイズが大きくなるとダウンロードがかかるので、どちらを使うのがよいかはケース バイ ケースです。
余談
上記のシェル スクリプトなどは、ローカル環境で作成した App Service の FTP からアップロードしていたのですが、当初は改行コードを気を付けて作成した (<LF> のみにした) にもかかわらず、App Service on Linux 上で正常に動作しませんでした。
調べてみると、FTP でのアップロードの際には binary モードにしないと、アップロードされたファイルの改行コードが <CR><LF> へと置き換えられているようでした。
App Service on Linux は、Web アプリケーションは Linux 環境ですが、FTP サーバーは Windows なので、その影響かもしれません。たぶん。
超余談
リング フィット アドベンチャー、始めました。
運動不足を解消したいです。