インフラ

Nuxt.jsプロジェクトをPM2でデプロイし、安定稼働させる方法

Nuxt.jsプロジェクトをPM2でデプロイし、安定稼働させる方法

✅ 🚀 はじめに:なぜWordPressからNuxt.jsへ移行したのか

長らくRaspberry Pi(ラズパイ)とWordPressの組み合わせでブログを運用してきましたが、表示速度の向上と、モダンなフロントエンド技術への挑戦を兼ねて、サイトのフルリニューアルを決意しました。選んだのは、当時高い人気を誇っていたVue.jsベースのフレームワーク「Nuxt.js」です。WordPressのような動的なCMSも便利ですが、自分好みのデザインやパフォーマンスを追求できるNuxt.jsへの移行は、インフラエンジニアとしてのスキルアップにも繋がりました。今回は、ビルドしたNuxtプロジェクトをLinuxサーバー上で永続的に稼働させるために不可欠なツール「PM2」の導入手順を解説します。

✅ PM2とは?なぜ必要なのか

通常、Node.jsのアプリケーション(Nuxtなど)を起動する際はnpm run startなどのコマンドを実行します。しかし、この方法ではターミナルを閉じたり、SSHの接続が切れたりすると、プロセスが終了してサイトがダウンしてしまいます。これを防ぎ、サーバーが再起動した際やエラーでプロセスが落ちた際にも、自動的にアプリケーションを再起動・維持してくれる「プロセス管理ツール」が PM2 です。

✅ 📝 ステップ1:PM2のインストール

まずは、サーバー環境にPM2をグローバルインストールします。管理者権限(sudo)を使用して実行してください。

📌 npmを使用する場合

sudo npm install pm2 -g

📌 yarnを使用する場合

sudo yarn global add pm2 --prefix /usr/local

インストール完了後、pm2 -vでバージョンが表示されれば準備完了です。

✅ 📝 ステップ2:ecosystem.config.jsによる詳細設定

PM2はコマンド一つで起動することも可能ですが、設定ファイル(ecosystem.config.js)を用意することで、クラスタモードの利用や環境変数の管理が容易になります。プロジェクトのルートディレクトリに移動し、ファイルを新規作成します。

vim ecosystem.config.js

設定内容は以下の通りです。

module.exports = {
  apps: [
    {
      name: 'NuxtAppName',        // プロセス一覧に表示される任意の名前
      exec_mode: 'cluster',       // クラスタモード(複数プロセスによる負荷分散)
      instances: 'max',           // CPUのコア数に合わせて最大インスタンスを起動
      script: './node_modules/nuxt/bin/nuxt.js',
      args: 'start'               // nuxt startコマンドを実行
    }
  ]
}

📌 ポイント:exec_mode: 'cluster' の利点

ラズパイのようなマルチコアCPUを搭載した環境では、clusterモードを指定することで、すべてのコアを有効活用し、より高いパフォーマンスを発揮させることができます。

✅ 📝 ステップ3:ビルドとプロセスの起動

設定が完了したら、Nuxtプロジェクトをビルドし、PM2でプロセスを登録・開始します。

# Nuxtプロジェクトをプロダクション用にビルド
npm run build

# PM2でプロセスを開始
pm2 start ecosystem.config.js

これで、ターミナルを閉じてもブログが公開され続ける状態になりました。

✅ 📝 ステップ4:稼働状況の確認と管理

PM2には強力なモニタリング機能が備わっています。運用中によく使うコマンドをいくつか紹介します。

📌 プロセス一覧の確認

pm2 ls

ここで、ステータスがonlineになっていれば正常です。

📌 ログの確認

エラーが発生した際や、アクセスログを確認したい時に便利です。

pm2 logs [name]

📌 プロセスの再起動・停止

pm2 restart all   # すべてのプロセスを再起動
pm2 stop [name]   # 特定のプロセスを停止

✅ 📌 まとめ:モダンな環境への移行を終えて

WordPressからNuxt.jsへの移行は、単なるツールの変更ではなく、プロセスの永続化やリバースプロキシの設定など、サーバーサイドの深い理解を深める良い機会となりました。PM2は非常に多機能で、今回紹介した設定以外にも、ログの自動ローテーションや、サーバー起動時の自動立ち上げ設定(pm2 startup)など、商用環境でも通用する機能が豊富です。現在はAstroなど、より軽量なフレームワークへの移行も進んでいますが、「Node.jsアプリケーションを安定して動かす」というPM2の知見は、今後も様々なプロジェクトで活かせる技術だと確信しています。

LEE
Author

LEE

SIチーム管理職

2024年よりSIチームの管理職に従事。技術とマネジメントの両立をモットーに、現場のリアルな知見を発信しています。趣味は車とガジェット。

ネットワークスペシャリスト (2023年合格) 情報処理安全確保支援士 (2024年合格)