フロントエンド開発といえば。
react アプリの初期化( npm init vite@latest <アプリ名> )

プロセスマネージャー pm2で next.js を動作させる

● pm2

https://github.com/Unitech/pm2

● 1. pm2 のインストール

-g オプションをつけてグローバルにインストールします

npm install pm2@latest -g

バージョンを確認します

pm2 --version
5.3.0

● 2-A. ワンライナーでpm2からnext.jsを起動する

npm run start コマンドを pm2 から実行します。

cd <nextjsアプリのディレクトリ >
pm2 start --name "my-next-app" npm -- start 

npm run start :staging コマンドといった任意のコマンドを pm2 から実行する場合はこちら。

pm2 start --name "my-next-app" npm -- run start:staging

● 2-B. 設定ファイルを作成して pm2からnext.jsアプリを起動する

・pm2の設定ファイルを作成する

設定ファイル自動生成コマンド( simple )

pm2 init simple 

設定ファイル自動生成コマンド( 詳細な設定 )

pm2 init

ecosystem.config.js が自動生成されますので編集します。

ecosystem.config.jsだとわかりにくい場合は /etc/pm2.d/pm2.config.js などに作成するのもいいでしょう。

cd /etc
mkdir pm2.d
chown kusanagi pm2.d
chgrp kusanagi pm2.d
module.exports = {
  apps: [
    {
      name: 'MyAppName',
      script: '/path/to/folder/server.js',
      env: {
        HOSTNAME: "0.0.0.0",
        PORT: 3000,
      },
    }
  ]
}
注意: script に指定した ファイルを node で起動するので、npm run start は指定できません。
next.js の場合だと standaloneモードで buildして server.js を指定するといいでしょう

script: '/path/to/folder/server.js',

設定ファイルの書き方 : https://pm2.keymetrics.io/docs/usage/application-declaration/

以下のコマンドでプロセスを起動します

pm2 start ecosystem.config.js

ファイル名を変更している場合はフルパスで指定します。

pm2 start /etc/pm2.d/pm2.config.js

● 設定ファイルにプロセスを追加したので再起動させる

vi /etc/pm2.d/pm2.config.js

で、設定ファイルにプロセスを追加した場合は、以下のコマンドで再起動します

pm2 reload /etc/pm2.d/pm2.config.js

// 再起動後に確認
pm2 ls

● pm2のコマンド

pm2のログを表示する

pm2 log

プロセスの状態を見る(簡易)

pm2 ls

プロセスの状態を見る(詳細)

pm2 ls -m

全てのプロセスの停止 / 削除

pm2 stop all
pm2 delete all

「nextjs」という名前のアプリを停止する

pm2 stop nextjs

「nextjs」という名前のアプリをプロセスリストから削除する

pm2 delete nextjs

「nextjs」という名前のアプリのプロセス返す(クラスターにて複数プロセスが立ち上がっている場合は全てのプロセス ID を返す)

pm2 pid nextjs

「nextjs」という名前のアプリをリスタートする

reload を使用するとゼロダウンタイムでリスタートしようとします。(必ずそうなるわけではありませんが。こちらのコマンドがおすすめです)

pm2 reload app_name

restart コマンドはreloadよりダウンタイムが発生しやすいコマンドです。

pm2 restart app_name

● pm2 を サーバーマシン起動時に自動実行するように設定する

pm2 を自動起動させる( centos )

pm2 startup

実行後に表示されるコマンドをルート権限(または sudo できるユーザー)から実行します

● pm2自動起動時の起動プロセスを保存

pm2 を自動起動させる

pm2 save

● pm2自動起動時の起動プロセスを更新

マシン再起動時に pm2 で自動起動させるプロセスを更新します。(これを行わないとreboot時にアプリが起動しません。)

# 現在のプロセスを確認
pm2 ls

# 起動していないプロセスがある場合は起動させる
pm2 restart /etc/pm2.d/pm2.config.js

# 再度現在のプロセスを確認して、自動起動したいプロセスが全て立ち上がっていることを確認
pm2 ls

# 自動起動の保存
pm2 save

この後再起動して確認します。

● GRACEFUL RESTART / START / SHUTDOWN

https://pm2.keymetrics.io/docs/usage/signals-clean-restart/#cleaning-states-and-jobs
https://pm2.keymetrics.io/docs/usage/signals-clean-restart/

● クラスター化 ( 2core以上のcpuの場合にクラスター化することができます)

https://pm2.keymetrics.io/docs/usage/cluster-mode/

module.exports = {
  apps : [{
    script    : "api.js",
    // クラスター化 
    exec_mode : "cluster" ,
    instances : "max",
  }]
}

参考: https://kazuhira-r.hatenablog.com/entry/2022/01/02/151132

● pm2ログのローテーション

pm2-logrotate のインストール

pm2 install pm2-logrotate  

pm2-logrotate の設定表示

pm2 get pm2-logrotate

関連エントリー

No.1907
10/28 09:36

edit

next.js