ガイドNode.js

Node.jsアプリのデプロイ

Zeaburはさまざまな種類のNode.jsプロジェクトをサポートしています:

Monorepo サポート

Zeabur は pnpm workspaceYarn Workspace などの 2 つの Monorepo アプローチに基づくほとんどのツールチェーン(Turborepo や Lerna など)を自動的に認識します。

Turborepo の basic テンプレートを例にとると、その pnpm-workspace.yaml の内容は次のとおりです:

packages:
  - "apps/*"
  - "packages/*"

apps には docsweb の 2 つのディレクトリがあります。Zeabur はデフォルトでワークスペースパッケージリストに最初に記載された Node.js アプリケーションをデプロイします。この場合、Zeabur は apps/docs アプリケーションをデプロイします。apps/web をデプロイしたい場合は、プロジェクトのルートディレクトリに zbpack.json ファイルを作成し、次の内容を追加します:

{
    "app_dir": "apps/web"
}

または、環境変数 を使用して設定します:

ZBPACK_APP_DIR=apps/web

これで apps/web アプリケーションがデプロイされます。

アプリケーションが実際にルートディレクトリにあるが、pnpm-workspace.yaml を使用して React コンポーネント、デザインシステムなどの要素を配置している場合、環境変数 ZBPACK_APP_DIR=/ を使用するか、zbpack.json に以下を追加できます

{
    "app_dir": "/"
}

これにより、Zeabur はルートディレクトリに配置されたアプリケーションをデプロイします。

NxRush などの上述の 2 つの方法に基づかない Monorepo ソリューションは、ワンクリックデプロイをまだサポートしていません。「キャッシュ機能の無効化」と「ビルドおよび開始コマンドの変更」を参照して、Monorepo を設定してください。

キャッシュ機能の無効化

デフォルトでは、Zeabur は依存関係のインストール手順を記録して CI/CD の速度を向上させるため、インストールプロセスを再配置します。一般的な Node.js プロジェクトには影響しないはずですが、依存関係のインストール中にプロジェクト内の他のファイルを使用する必要があり、プロジェクトのコンパイルが失敗する場合は、キャッシュ機能を無効にする必要があります。

この機能を無効にするには、プロジェクトのルートディレクトリにzbpack.jsonファイルを作成し、次の内容を追加してください:

{
    "cache_dependencies": false
}

または、環境変数 を設定します:

ZBPACK_CACHE_DEPENDENCIES=false

ビルドおよび開始コマンドの変更

プロジェクトのタイプがより特殊な場合(カスタム Monorepo ツールチェーンを使用する場合など)、サービスのビルド (build) および起動 (start) コマンドを指定する必要があります。例えば、frontend サービスの起動コマンドを pnpm run start:frontend に変更し、api サービスのビルドコマンドを pnpm run start:api に変更します。

これらのコマンドを変更する方法は次の二つがあります。

ファイルを介した変更

zbpack.jsonに次の二つの設定を追加してください:

{
    "build_command": "<カスタムビルドコマンド>",
    "start_command": "<カスタム開始コマンド>"
}

zbpack.jsonのデフォルト設定はすべてのデプロイされたサービスに適用されます。異なるサービスごとに異なるコマンドを指定する場合(例: apifrontendという名前のサービスごとに異なるコマンドを使用する場合)、zbpack.[サービス名].jsonというファイルを作成する必要があります:

// zbpack.api.json
{
    "build_command": "pnpm run build:api",
    "start_command": "pnpm run start:api"
}
// zbpack.frontend.json
{
    "build_command": "pnpm run build:frontend",
    "start_command": "pnpm run start:frontend"
}

設定を適用する優先順位はzbpack.[service name].json > zbpack.jsonです。

環境変数を使用して変更

環境変数 を使用して、ビルドと起動コマンドを設定することもできます:

ZBPACK_BUILD_COMMAND=pnpm run build:api
ZBPACK_START_COMMAND=pnpm run start:api

Node.js バージョンとパッケージマネージャー バージョンの設定

Node.js バージョン

デフォルトでは、Zeabur はプロジェクトをビルドするために最新の LTS バージョンの Node.js を使用します。異なるバージョンを使用したい場合は、package.json で指定することができます:

{
    "engines": {
        "node": "18.1.0"
    }
}

パッケージマネージャー バージョン

デフォルトでは、Zeabur はプロジェクトの依存関係をインストールするために yarn を使用します。異なるパッケージマネージャーを使用したい場合は、package.json で指定することができます:

{
    "packageManager": "pnpm@8.0.0"
}

静的ウェブサイトのデプロイ

プロジェクトが純粋なフロントエンドウェブページのみを生成する必要がある場合(バックエンドサーバーは不要)、NGINX、Caddy などのウェブサーバーで直接ホスティングすることができます。Zeabur を使用してより軽量な方法でデプロイすることで、リソース使用量とコストを削減できます。

  1. まず、ビルドコマンドがどのフォルダに最終的なウェブファイルを生成するかを確認します(一般的には distbuild、または public フォルダ)。

  2. 次に、この環境変数を追加して、Zeabur にウェブファイルの場所を伝えます:

    ZBPACK_OUTPUT_DIR=dist

    または、zbpack.json に設定を書き込むこともできます:

    {
        "output_dir": "dist"
    }
  3. これで次回のビルド完了後、Zeabur はリソース効率の良い Caddy を使用してあなたのウェブサイトをホストします。

ウェブスクレイピング

Playwright のサポート

package.jsonplaywright-chromium が宣言されている場合、Zeabur は Playwright を実行するために必要な環境を自動的に準備します。

Playwright は ヘッドレス モードで実行する必要があることに注意してください。通常はデフォルトでそのように設定されています。

Puppeteer のサポート

package.jsonpuppeteer が宣言されている場合、Zeabur は Puppeteer を実行するために必要な環境を自動的に準備します。

Puppeteer は ヘッドレス モードで実行する必要があることに注意してください。通常はデフォルトでそのように設定されています。

追加の注意事項

  1. リッスンするポートはprocess.env.PORTを使用する必要があります。

    例:

    const port = process.env.PORT || 3000
    // 代わりに const port = 3000
  2. ランタイムとしてnodemonを使用しないでください。本番環境では、一般的なnodeコマンドでコマンドを実行してください。

    例えば、package.json内で:

    {
        "scripts": {
            "start": "node server.js"
            // 代わりに "start": "nodemon server.js"
        }
    }