Mon Mar 25 2019
Nuxt jsで作成したプロジェクトを本番環境でデプロイする方法は大きく分けて,
generate
コマンドを利用し,静的ファイルを生成の2つがあります.
今回は,上のNode.jsアプリケーションとしてサーバで実行の方について書きます.
環境としてはOSはmac,Dockerのバージョンは18.09.2を利用しています.
今回は,Nuxt jsプロジェクトの例として,以下のようなディレクトリ構成のプロジェクトを使って解説して行きたいと思います.
なおNuxt jsのバージョンは 2.0
です.
# プロジェクトのルート配下
├── README.md
├── node_modules
├── nuxt.config.js
├── package-lock.json
├── package.json
├── src
└── yarn.lock
# srcディレクトリ配下
├── assets
├── components
├── layouts
├── middleware
├── pages
├── plugins
├── static
└── store
Nuxt js特有のディレクトリ類を/src
配下に置いてあるのが,人によっては見慣れないかもしれません.
ちなみにソースディレクトリの指定は,nuxt.config.js
で以下のように記述することで設定できます.
module.exports = {
srcDir: 'src/'
}
本プロジェクトをDockerでデプロイする為にDockerfileを作成します.
まずはプロジェクトのルートにdocker
ディレクトを作成し,Dockerfileを配置します.
$ mkdir docker
$ touch docker/Dockerfile
Dockerfileを書く前に指針を決めておきます.
ベースイメージには軽量なことを理由にalpineを用います.
今回は,nodeが予め入っているnode:11.12-alpine
をベースイメージに使用します.
またビルド時だけに必要なファイルなどは本番環境には必要ないので,プロジェクトをビルドするコンテナと実際に動かす本番環境用のコンテナ(プロダクション用のコンテナ)の2つを作成します.
コンテナを2つ作成するためにmulti-stage buildsという仕組みを使います.
Dockerfileの中身です.
# ビルドコンテナ
FROM node:11.12-alpine as builder
WORKDIR /app
# プロジェクトの配置とビルド
ADD . ./
RUN yarn install
RUN yarn build
# プロダクション用のコンテナ
FROM node:11.12-alpine
WORKDIR /app
ENV HOST=0.0.0.0
ADD package.json ./
ADD nuxt.config.js ./
COPY --from=builder ./app/src/static ./src/static/
COPY --from=builder ./app/node_modules ./node_modules/
COPY --from=builder ./app/.nuxt ./.nuxt/
EXPOSE 3000
CMD ["yarn", "start"]
ポイントとしては,FROMが2回登場していることですね.
順番に見ていきます.
# ビルドコンテナ
FROM node:11.12-alpine as builder
WORKDIR /app
# プロジェクトの配置とビルド
ADD . ./
RUN yarn build
ここでは,node:11.12-alpine
のイメージを元にbuilder
という名前のコンテナを作成しています.
このbuilder
は名前の通りプロジェクトをビルドするコンテナです.
まずプロジェクトを配備するディレクトリをWORKDIR
命令で指定しています.
今回はコンテナのルート直下にapp
ディレクトリにプロジェクトを起きます.
次にホストマシンにあるプロジェクトADD
命令でapp
ディレクトリに配置します.
そしてコンテナ内でyarn build
を実行することでプロジェクトをビルドします.
# プロダクション用のコンテナ
FROM node:11.12-alpine
WORKDIR /app
ENV HOST=0.0.0.0
ADD package.json ./
ADD nuxt.config.js ./
COPY --from=builder ./app/src/static ./src/static/
COPY --from=builder ./app/node_modules ./node_modules/
COPY --from=builder ./app/.nuxt ./.nuxt/
EXPOSE 3000
CMD ["yarn", "start"]
次にプロダクション用のコンテナを作成します.
ベースイメージには同様にnode:11.12-alpine
を用います.
こちらも同様にコンテナのルート直下にapp
ディレクトリを作成し,そこにプロジェクトを配置します.
本番環境では,
を配置します.
そして,yarn start
コマンドを実行することでプロジェクトを実行します.
では実際にコンテナを作成してみましょう.
今回は,イメージ名my-app
で作成します.
# イメージのビルド
$ docker image build -t my-app:latest docker/Dockerfile .
# コンテナの作成
$ docker container run -d -p 3000:3000 my-app:latest
立ち上がったらブラウザでhttp://localhost:3000にアクセスしてみましょう.
Nuxt
Docker
Comments