作成日:2022-12-27
Nextjsをpm2で使用する方法をいつも忘れてしまうので備忘録として書いておきます。
Nextjsを永続化させる
nodejsの永続化モジュールにはpm2とforeverの二つがありますが、pm2の方が良いとのことでpm2を使用してnextjsのプロジェクトを永続化させます。
pm2のインストールは-gでグローバルにインストールします。
npm install pm2@latest -g
Nextjsがssrなので.nextフォルダー一つでは起動しません。そのため他のライブラリーも必要とします。
起動するにあたって必要なものは
不要な物は
とりあえず.next,package.json,package-lock.jsonがあれば一旦動くには動くはず。
開発環境と本番環境でハードウェアが異なるときファイルをコピー、転送する必要がありますが、node_modulesを送るの時間がかかるのでとてもしんどい、クローズド環境でなければnode_modulesは転送しない事をオススメします。 そのためpackage.json ,pacage-lock.jsonファイル転送後モジュールは
npm install
を一回実行してしまえば必要なモジュール関係は全てダウンロードされる。
まずは通常起動するかどうかを確認します。起動方法は npx next startで実行されます。
package.jsonに起動スクリプトがあればnpm run startとかで起動します。
今回本題の永続化について.
コマンドは
pm2 start npm --name "hoge" -- start
hogeは何を起動しているのかを分かるような名前にしてください。 起動して正常に動作している場合は status onlineとなっています。
pm2で最低限使うものとして
あと必要になれば
nameはアプリ名を指定してください。
nextjsはデフォルトで3000ポートで起動します。 が、http httpsは 80,443ポートなので プロキシ設定をしてあげる必要があります。
私の場合nginxウェブサーバを使用しています。 詳しいnginxのインストールはこちら
server {
server_name u-serverdomain.com;
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
ssl_certificate hoge.pem;
ssl_certificate_key privkey.pem;
server_name u-serverdomain.com;
access_log /var/log/nginx/test.access.log;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
最低限のコードconfigのみになっています。重要部分はlocation proxy_passです。
ここでポート3000に転送しています。
nextjsアプリがが1サーバに対して一つの場合はこれだけで十分なのですが複数あった場合はnextjsの起動ポートを3000から変更する必要があります。 その場合はnextjsのpackage.jsonを修正してあげます。
"scripts": {
"start": "npx next start -p 3002",
...build等
},
また同様にnginxプロキシパスも3000から3002等に変更します。
私の環境はwindwos 10からscpを使ってファイルを転送していますが、毎回必要なファイルをまとめ、転送をする必要があったので。非常に面倒な作業でした。少しでも楽をするためにnpm scriptを使用しました。
"scripts": {
"start": "npx next start -p 3000",
"build": "npx next build & npm run build:clear ",
"build:clear": "npm run build:7z ",
"build:7z": "7z a hoge.tar ./.next/ ./public/ package.json ./prisma & npm run build:csp",
"build:csp": "scp hoge.tar [email protected]:/home/usernames/next.tar"
},
私の場合はbuildスクリプトを走らせるとbuild後必要なファイルをtarで纏めてscpで転送をしています。
tar圧縮は7zを使用しており、7zはパスを通してあります。
nextjsをpm2で起動する方法の紹介でした。参考までに
質問や、間違いがありましたら、お気軽にどうぞ
※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください