このドキュメントでは 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:base
Copied!
アプリケーションの実行方法は 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.0
Copied!
v12.12.0
Copied!
12.12
Copied!
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=true
Copied!
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:full
Copied!
Paketo Node.js Buildpack は node_modules
や package.json
を使用しないアプリケーションをビルドできます。
次のいずれかのファイルが、アプリケーションのルートディレクトリに存在する場合は、そのように判断します。
server.js
app.js
main.js
index.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