作成したアプリをサーバーで自動起動する
ローカルにて作成したアプリを実際にAWSのEC2へデプロイし、動作検証をした際に躓いたので備忘録として。
問題
git cloneしてプログラムアップ
yarn install
yarn build
よし、本番サーバー起動
node .output/server/index.mjs &
Listening http://[::]:3000
ばっちり!
ブラウザからも表示できた!
めでたしめでたし....
念のためターミナル落としてもう一度確認....
SSHの接続を切ってしまうとサーバーも止まってしまうといった問題に直面。
以下を参考にデーモン化することにする
【Linux】Node.jsをSystemdに登録しデーモン化する
ユニットファイルの作成
/etc/systemd/system
にユニットファイルを作成し、設定値を記述
[Unit]
#systemctl status にて表示される
Description= Nuxt3 hogeapp
[Service]
Type=simple
#実行ユーザー
User=ec2-user
#ライブラリなどあれば
WorkingDirectory=/var/www/html/hogeapp
#起動時コマンド
ExecStart=node /var/www/html/hogeapp/.output/server/index.mjs
#終了時コマンド
ExecStop=/usr/bin/pkill -e node
Restart=always
RestartSec=2
StandardOutput=syslog
StandardError=syslog
#実行サービス名
SyslogIdentifier=hogeapp
[Install]
WantedBy=multi-user.target
保存して、サービス一覧に存在するか確認
systemctl list-unit-files --type=service | grep hogeapp
hogeapp.service disabled disabled
状態を確認
systemctl status hogeapp
○ animalapp.service - Nuxt3 hogeapp
Loaded: loaded (/etc/systemd/system/hogeapp.service; disabled; preset: disabled)
Active: inactive (dead)
Activeがinactive (dead)となっており未起動状態
開始
systemctl start hogeapp
開始できたか確認
systemctl status hogeapp
● hogeapp.service - Nuxt3 hogeapp
Loaded: loaded (/etc/systemd/system/hogeapp.service; disabled; preset: disabled)
Active: active (running) since Tue 2023-09-12 02:18:48 UTC; 14s ago
Main PID: 4353 (node)
Tasks: 11 (limit: 1114)
Memory: 15.4M
CPU: 459ms
CGroup: /system.slice/hogeapp.service
└─4353 node /var/www/html/hoge-tool-nuxt/.output/server/index.mjs
Sep 12 02:18:48 ip-10-0-2-96.ap-northeast-1.compute.internal systemd[1]: /etc/systemd/system/hogeapp.service:12: Standard output type syslog is obsolete,>
Sep 12 02:18:48 ip-10-0-2-96.ap-northeast-1.compute.internal systemd[1]: /etc/systemd/system/hogeapp.service:13: Standard output type syslog is obsolete,>
Sep 12 02:18:48 ip-10-0-2-96.ap-northeast-1.compute.internal systemd[1]: Started hogeapp.service - Nuxt3 hogeapp.
Sep 12 02:18:49 ip-10-0-2-96.ap-northeast-1.compute.internal hogeapp[4353]: Listening http://[::]:3000
Activeがactive(runnig)となった
動作確認
先ほどNginxのエラー画面だったブラウザを再読み込みしてみると画面が正しく表示された。
次にターミナルを切断してもう一度再読み込みしてみる。
問題なく表示することができた。
自動起動設定
インスタンスを再起動させても自動で起動してくれるように設定
systemctl enable hogeapp
Created symlink /etc/systemd/system/multi-user.target.wants/hogeapp.service → /etc/systemd/system/hogelapp.service.
以上