Namecheapの共有ホスティングにNestJSをデプロイする方法

Namecheapの共有ホスティングへのNestJSのデプロイは、静的サイトやPHPアプリのデプロイとは異なります。単にファイルをアップロードするだけでは動作しません。

TypeScriptをJavaScriptにコンパイルし、本番環境用の依存関係をインストールし、cPanelを使用してPassenger経由でプロセスを管理する必要があります。

正しい方法を見つけるまで、フォルダが空だったり、ビルドファイルが不足していたり、Redisの接続が切れたりといった問題に直面しました。以下に、実証済みのワークフローを紹介します。

セットアップのロジック

リクエストは以下のパスを辿ります: • ブラウザまたはAPIクライアント • ドメインとHTTPS • Namecheap上のApache / Passenger • app.js(ブリッジ) • dist/main.js(コンパイル済みコード) • NestJSアプリケーション

主な要件

• Node.jsをサポートしているNamecheapのホスティングアカウント • cPanelおよびSSH/ターミナルへのアクセス • 動作するNestJSプロジェクト • データベースまたはRedisの本番環境用認証情報

ステップ1:コードの準備

ポート番号をハードコードしないでください。src/main.tsでは、process.env.PORTを使用します:

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT || 4000);
}

ステップ2:依存関係の整理

@nestjs/common@nestjs/coreのようなランタイムパッケージを、package.jsondependenciesセクションに移動してください。これらがdevDependenciesに残っていると、本番環境でアプリがクラッシュします。

ステップ3:ビルドとブリッジの作成

NamecheapはTypeScriptではなくJavaScriptを実行します。 • ローカルでnpm run buildを実行します。 • dist/main.jsが存在することを確認します。 • プロジェクトのルートに、以下の行を含むapp.jsファイルを作成します:require('./dist/main');

このapp.jsがPassengerのエントリーポイントとして機能します。

ステップ4:デプロイ戦略

最も安全な方法は、ローカルでビルドして成果物をアップロードすることです: • app.jsをアップロード • dist/フォルダをアップロード • package.jsonpackage-lock.jsonをアップロード • Namecheap上で、npm ci --omit=devを実行

ローカルのnode_modulesフォルダは絶対にアップロードしないでください。自分のコンピュータでビルドされたネイティブモジュールは、Linuxサーバーでは動作しません。

ステップ5:cPanelの設定

cPanelの「Setup Node.js App」に移動します: • 正しいNode.jsバージョンを選択します。 • モードをProductionに設定します。 • Application rootを対象のフォルダに設定します。 • Application startup fileapp.jsに設定します。

ステップ6:環境変数

シークレット情報(DATABASE_URLやAPIキーなど)は、cPanelのNode.jsインターフェースに直接追加してください。ルートに.envファイルを使用することもできますが、それがdistフォルダ内に入らないように注意してください。変更を加えた後は、アプリを再起動してください。

よくあるトラブルシューティング

EADDRINUSE: 手動でプロセスが実行されている可能性があります。アプリの管理はPassengerに任せてください。 • Cannot find module: ビルドファイルが不足しているか、app.js内のパスが間違っています。 • Redis connection failed: NamecheapがRedisポートでのアウトバウンド接続を許可しているか確認してください。ポートを開放するようNamecheapのサポートに依頼する必要があるかもしれません。

ソース: https://dev.to/adesoji/how-to-deploy-and-run-a-nestjs-app-on-namecheap-shared-hosting-5c45