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.jsonのdependenciesセクションに移動してください。これらがdevDependenciesに残っていると、本番環境でアプリがクラッシュします。
ステップ3:ビルドとブリッジの作成
NamecheapはTypeScriptではなくJavaScriptを実行します。
• ローカルでnpm run buildを実行します。
• dist/main.jsが存在することを確認します。
• プロジェクトのルートに、以下の行を含むapp.jsファイルを作成します:require('./dist/main');
このapp.jsがPassengerのエントリーポイントとして機能します。
ステップ4:デプロイ戦略
最も安全な方法は、ローカルでビルドして成果物をアップロードすることです:
• app.jsをアップロード
• dist/フォルダをアップロード
• package.jsonとpackage-lock.jsonをアップロード
• Namecheap上で、npm ci --omit=devを実行
ローカルのnode_modulesフォルダは絶対にアップロードしないでください。自分のコンピュータでビルドされたネイティブモジュールは、Linuxサーバーでは動作しません。
ステップ5:cPanelの設定
cPanelの「Setup Node.js App」に移動します:
• 正しいNode.jsバージョンを選択します。
• モードをProductionに設定します。
• Application rootを対象のフォルダに設定します。
• Application startup fileをapp.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
