Azure WebApps on LinuxでNuxt.js+Expressの環境をデプロイする
こんにちは、代表のn0bisukeです。
Azure WebApps on Linuxの環境にNuxt.js+Expressの環境をデプロイしたときのメモです。
けっこうハマったので備忘録として残しておきます。知り合いのMSのサポートエンジニアさんに質問したら休日にも関わらずチャットで答えてくれてマジ感謝です。
ということで手順をおさらいしつつ紹介します。
ちなみにWebApps on Dockerはこちらにまとめました。
Nuxt.js+Expressのテンプレート
↑のDocker記事にも書いたNuxt.js+Expressのテンプレートです。
vue init nuxt-community/express-template .
これでテンプレートが作成されます。
WebApps on Linuxのアプリケーションを作成
Azureのポータル画面から作成していきます。
2018年9月時点の画面なので画面は適宜読み替えてください。 この手のサービス管理画面はよく変わります。
OSの箇所をLinuxに選択します。
ランタイムスタックはNode.jsの最新にしましょう。
デプロイオプション
デプロイ方法を選びます。
ローカルGitリポジトリを選択します。
概要にGitクローンURL
が表示されます。ここに対してpushすることでデプロイできるようになります。
https://<ユーザー名>@<アプリ名>.scm.azurewebsites.net:443/<アプリ名>.git
的なURLです。
設定したユーザー名とパスワードを使ってGit Pushできます。
アプリケーション設定
スタートアップファイル
通常、Azure WebApps on LinuxはPM2というプロセス監視ツールを内部で使っていて、PM2で利用するprocess.json
というファイルを編集して起動スクリプトを指定します。
通常は特定のjsファイルを指定したりするのですがNuxt.jsの場合、Nuxtコマンドで起動するので
node_modules/nuxt/bin/nuxt-start
を指定します。
これでサーバーが再起動した際にNuxt.jsが起動します。
HOSTを0.0.0.0
に
また、設定でHOSTを0.0.0.0
に設定します。
これを指定しないとlocalhost
接続になってしまい、WebApps内部ではうまいこと動いてくれない模様です。
KeenさんのBind Addressの意味がようやく分かったの記事にもあるように0.0.0.0
はワイルドカードとして使えるので指定します。
package.jsonにpostinstallでnuxt build
させる
まだこれでもうまくいかなかったです。
Nuxts.jsはnpm startするとnuxt build && nuxt start
という形でビルド->起動という順番になります。ビルドすると.nuxt
フォルダが作成され、その中のプログラムを使って起動します。
ということで、WebAppsにデプロイしたらデプロイ先でビルドを走らせる必要があります。通常デプロイするとnpm start
が走り、その中でnuxt build && nuxt start
が実行されるため、問題なさそうなのですが、なぜかこれだとビルドがうまくいかずpostinstall
の箇所でビルドをさせるとうまく動いてくれました。
package.jsonのscriptsの箇所に"postinstall": "cd /home/site/wwwroot && /opt/nodejs/9.4.0/bin/node ./node_modules/nuxt/bin/nuxt-build",
を入れてあげます。
WebApss側ではデプロイしたソースコードは/home/site/wwwroot
に保存されるのでそこに移動してビルドする形です。
ちなみに、/opt/nodejs/9.4.0/bin/node ./node_modules/nuxt/bin/nuxt-build"
の箇所はnpm run build
やnuxt build
の中身であるnuxt-build
を実行するものですが、そのままnpm run build
を指定しておくとWebApps上で実行されるNode.jsのバージョンが古く、async
などの構文でエラーを起こしてしまい、nuxt build
が上手くいかない模様です。なので/opt/nodejs/9.4.0/bin/node
でバージョンを指定してあげると上手くビルドしてくれます。
async ready() {
remote: ^^^^^
remote: SyntaxError: Unexpected identifier
・
・
・
git pushしてビルド確認
ここまで設定できるとgit pushしてビルドが成功すると思います。
$ git push origin master
・
・
結構長い
・
・
remote: Finished successfully.
remote: Running post deployment command(s)...
remote: Deployment successful.
remote: App container will begin restart within 10 seconds.
という形でFinished successfully
やDeployment successful.
のメッセージが出ればデプロイ成功です。
こんな感じのサイトがhttps://<アプリ名>.azurewebsites.net
にアクセスすると表示されると思います。
まとめ
nuxt build
がWebApps上でなかなか動作してくれない- HOSTの
0.0.0.0
の指定
この二点を気をつければWebApps on LinuxでNuxt.jsの環境を整えられました。
参考になれば幸いです。
やさしいMSのサポートエンジニアさんマジでありがとう……