9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Google App Engineのフレキシブル環境にNuxt.jsをデプロイしてみた

Last updated at Posted at 2018-08-14

概要

Google App Engineのフレキシブル環境にNuxt.jsのSSRアプリをサービスとしてデプロイしてみました。
Nuxt.jsはMacのDockerで開発環境をつくり、npmではなくyarnを利用、言語はTypeScriptとSCSSが利用できるようにしました。(趣味

上記を実現するのにすでに良い記事があったのですが、手順としてまとめてみました。
同じ趣味の方は大いにご参考ください^^

Nuxt.jsとは

Vue.js製フレームワークNuxt.jsではじめるUniversalアプリケーション開発
https://html5experts.jp/potato4d/24346/

Nuxt.js(ナクストと読みます)はReact.jsベースのSSR用フレームワークであるNext.jsに触発されて作成された、Vue.jsベースのフレームワークです。

です。

手順

Docker環境構築

Dockerはインストール済みの前提です。

環境構築には、下記を大いに参考させてもらいました。感謝!

Dockerでローカル環境を汚さずにNuxt.jsを始めてみる
https://qiita.com/ProjectEuropa/items/d9ee1b8c96084e3bab55

docker-compose.ymlとDockerfileの記述は上記記事をご参考ください。

> mkdir 任意のディレクトリ
> cd 任意のディレクトリ
> vi docker-compose.yml
> vi Dockerfile

docker-composeのバージョンが1の場合、build パラメータ指定方法を変更する必要があります。(1敗

version1だったー
> docker-compose version

docker-compose version 1.22.0, build f46880f
docker-py version: 3.4.1
CPython version: 3.6.4
OpenSSL version: OpenSSL 1.0.2o  27 Mar 2018

参考)
Compose ファイル・リファレンス
http://docs.docker.jp/compose/compose-file.html

バージョン1のフォーマット では、 build の使い方が異なります

docker-compose.yml
-   build: 
-     context: ./
+   build: ./

で、dockerコンテナを立ち上げてwebコンテナに入ります。

> docker-compose build
()

> docker-compose up -d
()

> docker-compose exec web bash

[root@xxxxxxxxxxx html]#

Nuxtアプリの作成と動作確認

無事にコンテナに入れたらnuxtアプリを作成していきます。
今回は、TypeScriptとSCSSを利用します。

下記記事を大いに参考にさせてもらいました。感謝!

Nuxt.js + TypeScript + Sass + ESLint 事始め
https://qiita.com/ryota-yamamoto/items/4b06ef51926df1bdbae8

コンテナ内
> npm install yarn -g

/usr/bin/yarn -> /usr/lib/node_modules/yarn/bin/yarn.js
/usr/bin/yarnpkg -> /usr/lib/node_modules/yarn/bin/yarn.js
+ yarn@1.9.4
added 1 package in 1.137s

> vue -V

2.9.6

> vue init nuxt-community/typescript-template nuxt-sample

   vue-cli · Generated "nuxt-sample".

   To get started:

     cd nuxt-sample
     npm install # Or yarn
     npm run dev

> cd nuxt-sample/
> yarn
()

> yarn add --dev node-sass sass-loader
()

SCSSにするため、Nuxtアプリ内の記述を変更します。

components/Card.vue
-<style scoped>
+<style lang="scss" scoped>
pages/index.vue
-<style scoped>
+<style lang="scss" scoped>

設定ファイルとmain.cssのファイル名を変更します。

nuxt.config.js
- css: ["~/assets/css/main.css"],
+ css: ["~/assets/css/main.scss"],
コンテナ内
> mv assets/css/main.css assets/css/main.scss

準備ができたので、アプリを立ち上げてみます。

コンテナ内
> yarn run dev

()
 OPEN  http://localhost:3000

  nuxt:render Rendering url / +0ms
  nuxt:render Data fetching /: 179ms +0ms
  nuxt:render Rendering url / +13s
  nuxt:render Data fetching /: 33ms +12s

はい。
これでホストから下記へアクセスするとページが表示されるはずです。

open http://localhost:3000/
このヒーローたちは何者なんだ やったぜ。

Google App Engineへデプロイ

ここからはGoogle App Engineへデプロイをしてみます。

gcloud コマンドのインストールは下記をご参考ください。
※今回はNode.jsのインストールは不要。

SDK for App Engine のダウンロード
https://cloud.google.com/appengine/docs/flexible/nodejs/download

GCPプロジェクトやデプロイに必要な設定は下記をご参考ください。

GCP プロジェクト、App Engine アプリケーション、課金の管理
https://cloud.google.com/appengine/docs/flexible/nodejs/managing-projects-apps-billing

Nuxtアプリのビルド

デプロイするために、Nuxtアプリをビルドします。

コンテナ内
> yarn run build

yarn run v1.9.4
$ nuxt build
()
             Asset    Size  Chunks             Chunk Names
server-bundle.json  189 kB          [emitted]
  nuxt:build Building done +2m
Done in 141.32s.

デプロイ設定

Google App Engineへのデプロイについては下記を参考にさせてもらいました。感謝!

Nuxt.js on Google App Engine(GAE)
https://qiita.com/SatoTakumi/items/4f418dc5c700b9d66d7d

Google App Engineへデプロイするための設定をします。
こちらの作業はコンテナ内・外どちらで行っても問題ありません。

Google App Engineはpackage.jsonのstartをみてアプリを起動するそうなので、HOSTPORT を指定します。

package.json
-   "start": "nuxt start",
+   "start": "HOST=0.0.0.0 PORT=8080 nuxt start",

また、Google App Engineのフレキシブル環境でランタイム指定をするのに、package.jsonでnodeのバージョンを指定します。ファイルの最後に追加しましょう。

package.json
- }
+ },
+ "engines": {
+   "node": "9.x"
+ }

Google App Engineのデプロイに必要となるapp.yamlを追加します。こちらはNuxtアプリのディレクトリ直下に置きます。

touch app.yaml

もし、既存のGCPプロジェクトへデプロイする場合には、service を指定します。
指定しないとdefaultサービスへデプロイして痛い目にあいます。(1敗

runtime の指定はnodejsとします。バージョン指定はすでにpackage.jsonで行っていますね。

app.yaml
runtime: nodejs
env: flex
# プロジェクトに初めてデプロイする場合は下記設定は不要
service: 任意のサービス名

Google App Engineへデプロイ

準備ができましたので、デプロイします。
こちらはコンテナ外で作業しましょう。

コンテナ外
> gcloud app deploy

Services to deploy:

descriptor:      [任意のディレクトリ/nuxt-sample/app.yaml]
source:          [任意のディレクトリ/nuxt-sample]
target project:  [GCPのプロジェクトID]
target service:  [サービス名]
target version:  [20180810t135530]
target url:      [https://サービス名-dot-GCPのプロジェクトID.appspot.com]

()
Deployed service [サービス名] to [https://サービス名-dot-GCPのプロジェクトID.appspot.com]

You can stream logs from the command line by running:
  $ gcloud app logs tail -s サービス名

To view your application in the web browser run:
  $ gcloud app browse -s サービス名


Updates are available for some Cloud SDK components.  To install them,
please run:
  $ gcloud components update

はい。
それでは、上記にあるURLにアクセスしてみましょう。

https://サービス名-dot-GCPのプロジェクトID.appspot.com
appengine_on_nuxt.png

やったぜ。
最後に、不要になったらGCP管理コンソールからサービスを削除しておきましょう。

それでは、良きTypeScriptとSCSSでNuxt.jsをDockerコンテナ上で開発、App Engineにデプロイライフを^^(長い

参考

Vue.js製フレームワークNuxt.jsではじめるUniversalアプリケーション開発
https://html5experts.jp/potato4d/24346/

Dockerでローカル環境を汚さずにNuxt.jsを始めてみる
https://qiita.com/ProjectEuropa/items/d9ee1b8c96084e3bab55

Compose ファイル・リファレンス
http://docs.docker.jp/compose/compose-file.html

Nuxt.js + TypeScript + Sass + ESLint 事始め
https://qiita.com/ryota-yamamoto/items/4b06ef51926df1bdbae8

Nuxt.js on Google App Engine(GAE)
https://qiita.com/SatoTakumi/items/4f418dc5c700b9d66d7d

Node.js ランタイム
https://cloud.google.com/appengine/docs/flexible/nodejs/runtime

SDK for App Engine のダウンロード
https://cloud.google.com/appengine/docs/flexible/nodejs/download

GCPプロジェクトやデプロイに必要な設定は下記をご参考ください。

GCP プロジェクト、App Engine アプリケーション、課金の管理
https://cloud.google.com/appengine/docs/flexible/nodejs/managing-projects-apps-billing

NPM vs Yarn Cheat Sheet
https://shift.infinite.red/npm-vs-yarn-cheat-sheet-8755b092e5cc

Vue.js+TypeScriptで開発するときの参考記事まとめ
https://qiita.com/kai_kou/items/19b494a41023d84bacc7

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?