本文へスキップ

Node.js と Express ​

Express、Fastify、Koa、Hono、NestJS など、どの Node.js サーバーでも同じです。

最小限のアプリ ​

js
// server.js
const express = require('express')

const app = express()
const port = process.env.PORT || 8080

app.get('/', (req, res) => res.send('Hello from Express'))

app.listen(port, '0.0.0.0', () => console.log(`listening on ${port}`))
json
{
  "scripts": { "start": "node server.js" },
  "dependencies": { "express": "^5.1.0" }
}

Zenavo が検出する内容 ​

zbpack は Node.js としてビルドします。

ステップコマンド
インストールリポジトリのロックファイルに応じて npm install、pnpm install、yarn install、bun install(ロックファイルがなければ yarn)
ビルドbuild スクリプトがあれば実行(TypeScript、バンドラー)
起動start スクリプト。なければ node index.js

Node.js のバージョンは package.json の engines.node から取ります(未設定なら 22)。

json
"engines": { "node": "22" }

別のコマンドを使うには、Settings → Build → zbpack options で ZBPACK_BUILD_COMMAND か ZBPACK_START_COMMAND を設定します(ビルドプラン)。

デプロイ ​

  1. Add Service → GitHub で、リポジトリとブランチを選びます。
  2. 変数を追加して Next をクリックし、プレビューに nodejs と表示されていることを確認して Deploy をクリックします。
  3. Networking タブでドメインを生成します。

データベースに接続する ​

プロジェクトにデータベースを追加し、アプリのサービスでその変数を参照します。

sh
DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}
REDIS_URL=${REDIS_CONNECTION_STRING}

マイグレーションはビルドではなくアプリの起動時に実行してください。ビルドからはプロジェクトのデータベースに届きません。package.json の predeploy スクリプトは、サービスが起動するたびに start の前に実行されます。

json
"scripts": {
  "predeploy": "node migrate.js",
  "start": "node server.js"
}

TypeScript ​

build スクリプトでコンパイルし、その出力を起動します。

json
"scripts": {
  "build": "tsc",
  "start": "node dist/server.js"
}

typescript は dependencies と devDependencies のどちらに置いても構いません。ビルドでは両方インストールされます。

よくある問題 ​

症状原因
デプロイが healthy にならないサーバーが localhost や固定ポートで待ち受けています。0.0.0.0 と process.env.PORT で待ち受けてください。
起動時に Cannot find modulestart スクリプトがビルドで作られていないファイルを指しているか、package.json に依存関係が足りません。
違うパッケージマネージャーが使われるロックファイルがないか、2 つあります。ちょうど 1 つにしてください。
アップロードしたファイルがデプロイ後に消えるコンテナのディスクはデプロイのたびに置き換わります。ボリュームかオブジェクトストレージを使ってください。

Zeabur とは関係ありません。