このドキュメントでは Paketo Node.js Buildpack を使用してアプリケーションのコンテナイメージを作成する方法を説明します。 Buildpack の振る舞いや設定方法を詳しく知りたいときは リファレンス を参照してください。
ローカルPCで pack コマンドを実行して、サンプルアプリのコンテナイメージを Buildpack で作成するには次のように実行します。
git clone https://github.com/paketo-buildpacks/samples cd samples/nodejs/npm pack build my-app --buildpack gcr.io/paketo-buildpacks/nodejs \ --builder paketobuildpacks/builder:baseCopied!
アプリケーションの実行方法は README ファイル を参照してください。
注意:この例では Paketo Base ビルダーを使っていますが、Paketo Node.js Buildpack は Paketo Full ビルダーと互換性があります。アプリケーションが一般的なCライブラリ関数を呼び出している場合は Full ビルダーが必要です。
Paketo Node.js Buildpack では、デプロイするときに使用する Node.js のバージョンを指定できるようになっています。
バージョンを指定する方法はいろいろあります。
環境変数 BP_NODE_VERSION や、コードベースに配置したファイル(package.json, .nvmrc, .node-version)で指定できるのです。
指定できるバージョンは、使用する Buildpack の対応しているバージョンだけです。
Paketo Node.js Buildpack の使用できる Node.js Engine のバージョンについては、Paketo Node.js Buildpack のリリースノート を参照してください。
バージョンを指定する場所の優先順位は BP_NODE_VERSION, package.json, .nvmrc, .node-version の順になっています。
BP_NODE_VERSION でバージョンを指定する
例えば、アプリケーションをデプロイするときに Node.js v12.12.0 を使用するには、環境変数 BP_NODE_VERSION へ次のように指定します。
あるいは、pack build コマンドの --env フラグに BP_NODE_VERSION=12.12.0 を指定することもできますし、project.toml で指定することもできます。
BP_NODE_VERSION="12.12.0"Copied!
package.json でバージョンを指定する
アプリケーションを npm や yarn で管理しているなら、package.json の engines フィールドへ使用する Node.js のバージョンを指定できます。
{ "engines": { "node": "12.12.0" } }Copied!
engines フィールドについて詳しくは NPM の package.json に関するドキュメントの engines セクションを参照してください。
.nvmrc でバージョンを指定する
NVM(Node Version Manager) はアプリケーションの使用する Node.js のバージョンを管理するためのツールです。
アプリケーションをデプロイするとき、.nvmrc に記述したバージョンの Node.js を使用できます。
.node-version でバージョンを指定する
.node-version は asdf や nodenv で Node.js のバージョンを指定するために使用するファイルです。
アプリケーションをデプロイするとき、.node-version に記述したバージョンの Node.js を使用できます。
バージョン番号はいろいろな形式で記述できます。
12.12.0Copied!
v12.12.0Copied!
12.12Copied!
buildpack.yml を使用する
Paketo Node.js Buildpack の v1.0.0 から、buildpack.yml で Node.js のバージョンを指定するのは非推奨になりました。
環境変数 BP_NODE_VERSION で指定するようにしてください。
Node.js はヒープメモリに格納できるオブジェクトサイズの合計値を制限しています。 ヒープメモリ最適化機能を有効にすると、コンテナから利用できるメモリサイズの4分の3までヒープメモリとして使用できるようになります。 例えば、あなたのアプリケーションが実行時に使用できるメモリサイズが 1GB なら、Node.js の使用できるヒープメモリサイズは 768 MB になります。
環境変数 BP_NODE_OPTIMIZE_MEMORY を指定すると有効化できます。
BP_NODE_OPTIMIZE_MEMORY を指定する
ヒープメモリ最適化機能を有効にするには環境変数 BP_NODE_OPTIMIZE_MEMORY に true を指定します。
pack build my-app \ --buildpack gcr.io/paketo-buildpacks/nodejs \ --env BP_NODE_OPTIMIZE_MEMORY=trueCopied!
buildpack.yml を使用する
Enabling memory optimization through your buildpack.yml file will be
deprecated in Node Engine Buildpack v1.0.0. To migrate from using
buildpack.yml please set the BP_NODE_OPTIMIZE_MEMORY environment variable
mentioned above.
Paketo Node.js Buildpack の v1.0.0 から、buildpack.yml でヒープメモリ最適化機能を有効にするのは非推奨になりました。
環境変数 BP_NODE_OPTIMIZE_MEMORY で指定するようにしてください。
環境変数 BP_NODE_PROJECT_PATH でサブディレクトリを指定すると、アプリケーションのルートディレクトリとして使用できるようになります。
また、project.toml でも指定できます。
アプリケーションをモノリポで管理しているときに便利です。
アプリケーションが次のようなディレクトリ構成になっている場合を考えてみましょう。
.
├── go-app
│ ├── go.mod
│ └── main.go
└── node-app
├── file.js
├── index.js
└── package.json
この場合、環境変数 BP_NODE_PROJECT_PATH で次のようにサブディレクトリを指定します。
BP_NODE_PROJECT_PATH=node-app
環境変数 BP_NODE_RUN_SCRIPTS へ package.json の scripts フィールドに記述したスクリプトを指定すると、ビルドフェーズで実行できます。
また、project.toml でも指定できます。
Angular や React や Vue など、ビルド処理が必要なフレームワークを使っているときに便利です。
例えば、package.json に次のようなスクリプトが記述されているとしましょう。
{
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"lint": "eslint src/**/*.js src/**/*.jsx"
}
}
環境変数 BP_NODE_RUN_SCRIPTS へ次のように指定するとします。
$BP_NODE_RUN_SCRIPTS=lint,build
そうすると、ビルドフェーズで npm あるいは yarn により、lint と build スクリプトを順番に実行できます。
指定できるのは、スクリプト名をカンマ区切りで連結した文字列です。
Paketo Node.js Buildpack はアプリケーションが npm を使用しているか自動的に検出します。
Paketo Node.js Buildpack は NPM の本来の設定を尊重するようになっています。 詳しくは NPM のドキュメント と .npmrc のドキュメント を参照してください。
Paketo Node.js Buildpack はアプリケーションが yarn を使用しているか自動的に検出します(yarn.lock ファイルの有無で判断します)。
Paketo Node.js Buildpack は Yarn の本来の設定を尊重するようになっています。 詳しくは .yarnrc のドキュメント を参照してください。
node-gyp でネイティブ拡張をコンパイルする
アプリケーションが node-gyp でコンパイルするネイティブ拡張を使っている場合、Paketo Full ビルダーで実行しなければなりません。
Paketo Base ビルダーには、 node-gyp を実行するために必要な python や、さまざまな共有ライブラリが含まれていないからです。
pack build コマンドのフラグで指定する
pack コマンドで Paketo Full ビルダーを指定するときは次のように実行します。
pack build my-app --builder paketobuildpacks/builder:fullCopied!
Paketo Node.js Buildpack は node_modules や package.json を使用しないアプリケーションをビルドできます。
次のいずれかのファイルが、アプリケーションのルートディレクトリに存在する場合は、そのように判断します。
server.jsapp.jsmain.jsindex.jsアプリケーションのエントリポイントが前に列挙したファイルとは違うファイルの場合、環境変数 BP_LAUNCHPOINT でファイル名を指定できます。
BP_LAUNCHPOINT を使用する
環境変数 BP_LAUNCHPOINT でエントリポイントとなるファイル名を指定できます。
BP_LAUNCHPOINT="./src/launchpoint.js"Copied!
作成したコンテナイメージは、起動コマンドとして node src/launchpoint.js を実行します。
Paketo Node.js Buildpack では、ビルド時や実行時のどちらでも、CA 証明書の構成 手順に従って、ユーザーが自分で用意した CA 証明書をコンテナのルートトラストストアへ配置できます。
Paketo Node.js Buildpack では、Procfiles の導入 手順に従って、アプリケーションのコンテナイメージが起動するプロセスを変更できます。
Paketo Node.js Buildpack では、環境変数の構成 手順に従って、アプリケーションのコンテナイメージを実行するときの環境変数を変更できます。
Paketo Node.js Buildpack では、ラベルの構成 手順に従って、アプリケーションのコンテナイメージにラベルを指定できます。
Last modified: September 13, 2021