言語とフレームワークのガイド
Next.jsアプリをDockerで展開する
18 分
back4app containersは、next jsアプリケーションをホスティングするための強力なプラットフォームです。docker化されたnext jsアプリを自動的にデプロイする能力を持つことで、スケーラブルで柔軟な環境でプロジェクトを簡単に立ち上げることができます。 このガイドでは、back4app containers上でnext jsアプリケーションを準備しデプロイするプロセスを説明します。シンプルなプロジェクトからより複雑なセットアップまで、すべてをカバーします。必要な準備から始め、アプリケーションのdocker化、ローカルでのテスト、プロジェクトをgithubにプッシュ、back4app containers上でのプロジェクトの設定、デプロイの監視、一般的な問題のトラブルシューティングに進みます。 質問やコメントがある場合は、slackのback4app communityの#containersチャンネルで会話に参加してください。また、いつでもcommunity\@back4app comまでご連絡いただけます。 いつでも、back4app containers上で動作するnext jsプロジェクトのサンプルを確認したい場合は、次のリンクにアクセスしてください https //github com/templates back4app/containers nextjs sample https //github com/templates back4app/containers nextjs sample 1 next jsアプリケーションを準備する a プロジェクト構造 next jsアプリケーションが適切なディレクトリ構造に従っていることを確認してください。必要なファイルやフォルダ(例えば、 pages , public , components , および styles )が適切に整理されていること。アプリケーションのメインエントリポイントは、 pages/index js または pages/index jsx ファイルであるべきです。 b 依存関係 必要な依存関係がすべて package json ファイルに正しいバージョンでリストされているか確認してください。すべての依存関係が npm install または yarn install を使用してインストールされていることを確認し、 package lock json または yarn lock ファイルを生成します。 c ビルドプロセス ビルドプロセスを含むより複雑なプロジェクトの場合、ビルドスクリプトと設定(例 webpack、babel、または next js)が正しく設定されていることを確認してください。問題なくローカルでビルドプロセスを実行できるはずです。 d 環境変数 アプリケーションが環境変数に依存している場合、必要な変数が定義された env ファイルがあることを確認してください。back4app containers にデプロイする際には、デプロイ設定でこれらの環境変数を構成する必要があります。 e サーバー設定(該当する場合) next js アプリケーションにカスタムサーバー(例 express)が含まれている場合、それが正しく設定され、next js アプリケーションを提供するように構成されていることを確認してください。サーバーが期待通りに動作するかを確認するために、ローカルでテストしてください。 f アプリケーションの最適化 バンドルサイズを最小化し、コード分割を使用し、パフォーマンスのベストプラクティスを実装することで、next js アプリケーションを最適化します。lighthouse のようなツールを使用してアプリケーションを監査し、パフォーマンスやアクセシビリティの問題に対処してください。 g クロスブラウザ互換性 アプリケーションが適切にレンダリングされ、機能することを確認するために、複数のブラウザとデバイスでテストしてください。 next jsアプリケーションを十分にレビューし、準備が整ったら、次のステップに進むことができます。それは、 dockerfile をプロジェクトのために作成することです。 2 ドッカー化 next jsアプリケーションをドッカー化するには、プロジェクトのルートディレクトリにdockerfileを作成します。dockerfileには、アプリケーションのdockerイメージをビルドするための指示が含まれており、その後back4appコンテナにデプロイできます。典型的なnext jsアプリケーションのためのdockerfileの作成方法についての詳細な説明は以下の通りです 1 next jsアプリケーションのルートディレクトリに、拡張子なしの新しいファイル名dockerfileを作成します。 2 ベースイメージを定義する fromコマンドを使用して、dockerfileの最初にベースイメージを指定します。典型的なnext jsアプリケーションの場合、ベースイメージはnode jsイメージである必要があります。例 node 14またはnode 16。 from node 14 3 作業ディレクトリを設定する workdirコマンドを使用して、dockerコンテナ内のアプリケーションの作業ディレクトリを設定します。ここにアプリケーションファイルが保存され、実行されます。 workdir /app 4 package jsonとpackage lock jsonをコピーする copyコマンドを使用して、ローカルマシンからdockerコンテナにpackage jsonとpackage lock jsonファイルをコピーします。これらのファイルは、アプリケーションの依存関係をインストールするために必要です。 copy package json / 5 依存関係をインストールします runコマンドを使用して、package jsonファイルからアプリケーションの依存関係をインストールします。これは通常、npm ciを使用して行われ、package lock jsonファイルに指定された正確な依存関係のバージョンがインストールされます。 run npm ci 6 プロジェクトファイルの残りをコピーします copyコマンドを再度使用して、ローカルマシンからdockerコンテナに残りのファイルとフォルダをコピーします。 copy 7 next jsアプリケーションをビルドします runコマンドを追加して、ビルドスクリプトを使用してnext jsアプリケーションをビルドします。通常はnpm run buildを使用します。これにより、 nextフォルダにnext jsアプリケーションの本番用バージョンが生成されます。 run npm run build 8 サーバーを設定します ビルドしたnext jsアプリケーションを提供するためにサーバーが必要です。一般的な選択肢は、組み込みのnext jsサーバーです。まず、runコマンドを使用してdockerコンテナ内にグローバルにインストールします run npm install g next 9 サーバーポートを公開します exposeコマンドを使用して、dockerコンテナ内でサーバーが実行されるポートを指定します。例えば、ポート3000を使用できます。 expose 3000 10 サーバーを起動します cmdコマンドを使用して、ビルドしたnext jsアプリケーションを提供するためにサーバーを起動するコマンドを指定します。組み込みのnext jsサーバーを使用する場合、スタートスクリプトとポート番号を指定できます。 cmd \["next", "start", " p", "3000"] 典型的なnext jsアプリケーションの完全なdockerfileは次のようになります from node 14 workdir /app copy package json / run npm ci copy run npm run build run npm install g next expose 3000 cmd \["next", "start", " p", "3000"] 参照用に使用できる別のdockerfileの例 例1 nginxサーバーを使用する next jsアプリケーションを提供するためにnginxサーバーを使用する場合は、マルチステージdockerfileを作成できます。この場合、最初にnext jsアプリケーションをビルドし、生成されたファイルをnginxサーバーにコピーします。 \# stage 1 build the next js application from node 14 as builder workdir /app copy package json / run npm ci copy run npm run build \# stage 2 set up the nginx server from nginx\ stable alpine copy from=builder /app/ next /usr/share/nginx/html copy from=builder /app/public /usr/share/nginx/html/ next/static copy nginx conf /etc/nginx/conf d/default conf nginxサーバーを適切に構成するために、適切なnginx confファイルを作成してください。 例2 カスタムサーバーを使用する next jsアプリケーション用にカスタムサーバーを設定している場合は、それに応じてdockerfileを修正できます。以下はカスタムserver jsファイルを使用した例です from node 14 workdir /app copy package json / run npm ci copy run npm run build expose 3000 cmd \["node", "server js"] この例では、カスタムサーバーは node server js コマンドで起動され、next jsサーバーは使用されません。 3 dockerコンテナをビルドして実行する dockerfileを作成した後、dockerイメージをビルドし、それからコンテナを実行できます。以下のコマンドを使用してコンテナをビルドして実行してください docker build t your image name docker run p 3000 3000 your image name "your image name" をあなたのdockerイメージの名前に置き換えてください。 コンテナが実行されているときは、ウェブブラウザで http //localhost 3000 http //localhost 3000 にアクセスして、next jsアプリケーションを表示できます。 4 プロジェクトをローカルでテストする back4appコンテナにnext jsアプリケーションをデプロイする前に、dockerを使用してローカルでテストすることが重要です。これにより、アプリケーションが期待通りに動作することを確認し、デプロイ前に問題を特定して修正するのに役立ちます。 next jsアプリケーションのためのdockerイメージをビルドする ターミナルでプロジェクトのルートディレクトリに移動し、次のコマンドを実行します。 your app name をあなたのアプリケーションの名前に置き換えてください docker build t your app name dockerコンテナをローカルで実行する 次に、以下のコマンドを実行してdockerコンテナをローカルで起動します。このコマンドは、コンテナの公開ポート(例:3000)をローカルマシンのポート(例:3000)にマッピングします docker run p 3000 3000 your app name アプリケーションをテストする ウェブブラウザを開き、 http //localhost 3000 http //localhost 3000 に移動して、next jsアプリケーションを表示します。すべてが期待通りに動作することを確認してください。問題が発生した場合は、次のステップに進む前に対処してください。 5 プロジェクトをgithubにプッシュする プロジェクトのルートディレクトリに gitignore ファイルを作成して、リポジトリから不要または機密のファイルを除外します(例: node modules , env , build , など)。gitリポジトリを初期化し、プロジェクトファイルをコミットし、リモートリポジトリ(例:github)にプッシュします。 git add git commit m "initial commit" git remote add origin \<your remote repo url> git push u origin master 6 back4appコンテナにアプリケーションをデプロイする back4appアカウントを作成した後、docsに記載されている手順に従うことができます 1 githubリポジトリをback4appに接続する https //www back4app com/docs containers/integrate with github 2 デプロイメントのためにプロジェクトを準備する https //www back4app com/docs containers/prepare your deployment 要約すると、コンテナはdockerfileに詳細に記載された指示に従い、アプリを作成し始めます。 7 デプロイメントを監視し、可能なエラーに対処する back4app containersダッシュボードでデプロイメントのログとステータスに注意を払ってください。デプロイメント中に発生するエラーや問題に対処します。より複雑なプロジェクトの場合は、すべての必要なサービス(データベースや外部apiなど)が正しく構成され、アクセス可能であることを確認してください。 8 一般的な問題のトラブルシューティング back4app containersでnext jsアプリを実行する際の一般的なデプロイメントエラーは、 こちら https //www back4app com/docs containers/troubleshooting にリストされています。next jsアプリケーションをデプロイする際の他の一般的なエラーは次のとおりです 不正なポート構成 next jsアプリケーションは、back4app containersにデプロイされる際に指定されたポートで実行されるように構成する必要があります。アプリケーションがまだアクセスできない場合は、dockerfileを確認して正しいポートが公開されていることを確認してください(例:ポート3000の場合はexpose 3000)。 互換性のないまたは欠落している依存関係 すべての必要な依存関係がpackage jsonファイルにリストされていること、またそれらのバージョンが互いにおよびアプリケーションコードと互換性があることを確認してください。欠落または互換性のない依存関係は、ランタイムエラーを引き起こす可能性があります。 無効な環境変数または設定 アプリケーションが特定の環境変数や設定ファイルに依存しているか確認し、back4app containers 環境で正しく設定されていることを確認してください。必要な環境変数は、env コマンドを使用して dockerfile に設定してください。 アプリケーションのクラッシュまたは未処理の例外 next js アプリケーションコード内の未処理の例外やクラッシュは、デプロイメントの失敗や予期しない動作を引き起こす可能性があります。アプリケーションのログを確認してエラーメッセージを探し、コード内の問題に対処してください。次のコマンドを実行してコンテナのログを確認します。 docker logs your app name エラーや例外が発生しているかどうかを確認してください。sentry のようなツールを使用して、アプリケーション内のエラーを追跡および監視してください。 サーバーサイドレンダリングの設定 next js アプリケーションがサーバーサイドレンダリング (ssr) を使用している場合、dockerfile 内で ssr の設定が正しく構成されていることを確認し、正しいエントリポイントを使用してアプリケーションを起動してください。 9 アプリケーションのスケーリング 追加のリソースや水平/垂直スケーリングが必要なより複雑なプロジェクトの場合、増加したトラフィックと負荷に対応するために back4app containers プランをアップグレードすることを検討してください。 10 サンプルアプリケーション サンプルの next js アプリケーションプロジェクトについては、次のリンクにアクセスしてください https //github com/templates back4app/containers nextjs sample