Next.jsプロジェクトを開発環境と本番環境のDockerで動かしてみたい【その2】
Next.jsプロジェクトを開発環境と本番環境のDockerで動かしてみたい【その1】の続きです。
前回は、ローカルの Mac 上の Docker で Next.js のサンプルサイトを表示するところまで頑張りました。
VPS上の Docker で動かしたい
今回本番環境として用意するのは、VPSです。
既に契約してあったさくらVPS上に docker をインストールして、前回と同じように Next.js 公式のサンプルを表示することを目標とします。
VPSにDockerをインストールする
VPS 上への Docker のインストールは以下の記事を参考にしてみてください。
VPS上のDockerでサンプルを動かす
やることは開発環境と同じはずです。
STEP.1
作業ディレクトリを用意する
% sudo mkdir /srv/next-app
% cd /srv/next-app
STEP.2
サンプルアプリを作成する
% npx create-next-app --example with-docker-compose with-docker-compose-app
権限がない場合
上記コマンドを実行してみると権限がないと言われてしまったので、権限を付与しておきます。
npx: installed 1 in 2.496s
The application path is not writable, please check folder permissions and try again.
It is likely you do not have write permissions for this folder.
% cd /srv
% sudo chmod 777 next-app
インストール後は権限を戻しておくと良いでしょう。
% cd /srv
% sudo chmod 755 next-app
STEP.3
コンテナを用意する
Next.js の公式サンプルに沿って行います。
% cd /srv/next-app/with-docker-compose-app
# ネットワークの作成
% docker network create my_network
# 依存パッケージのインストール
% cd /srv/next-app/with-docker-compose-app/next-app
% npm install
# イメージの構築
% cd /srv/next-app/with-docker-compose-app
% docker compose -f docker-compose.prod.yml build
# コンテナをデーモン化して起動
% docker compose -f docker-compose.prod.yml up -d
閲覧する
コンテナの起動は無事にできたようですが、一体どこの何を見ればサイトを見ることができるのでしょうか。
# コンテナを確認
% docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d7b1ec54be42 with-docker-compose-app_next-app "docker-entrypoint.s…" 33 minutes ago Up 33 minutes 0.0.0.0:3000->3000/tcp next-app
ローカル環境の場合は http://localhost:3000 でアクセスすることができました。
# サーバ通信時に使われるパブリックIPアドレス
% curl ifconfig.me
xx.xxx.xxx.xx
curl で確認したIPアドレスを用いてhttp://xx.xxx.xxx.xx:3000
にアクセスしてみたところ無事に閲覧することができました。
おわりに
ドメインの設定をしていないのでまだ実用は現実的ではないですが、さくらVPS の Ubuntu 上にも Next.js で作成したサイトを配置できることがわかりました。
本番環境では コンテナを永続化して常にコンテナが起動している状態にする必要があります。(docker compose -f docker-compose.prod.yml up -d
の-d
でデーモン化しています。)
多分つづく🐈⬛