EC2上でnode.jsをインストール、WEBサイト構築メモ
EC2にnode.jsをインストールしてWEBサービスを起動する方法
ネットワーク回り、EC2の構築などの基本はこの記事では除外する。
①EC2が動く状態にする。
省略
②EC2にリモートログイン
省略
②node.jsをグローバルにインストールする準備
yumのリポジトリにはnode.jsが無いので、まずはリポジトリ登録してから。
公式ページに載っている。Installing Node.js via package manager | Node.js
curl --silent --location https://rpm.nodesource.com/setup_9.x |sudo bash -
③node.jsをグローバルにインストールする。
sudo yum -y install nodejs
③デーモン化するパッケージ foreverをインストール
sudo install -g forever
④foreverでデーモン登録
cd プロジェクトルート
sudo forever start app.js
⑤foreverで動いているプロセスの状態を確認
sudo forever list
⑥サーバーのリッスン状態を確認
sudo lsof -i -n -P
ちなみに、node.jsでWEBサーバーをウェルノウンポート80で起動する方法
普通、スクリプト内でポート80を指定、listen(80) で実行すると、権限不足のエラーになる。これはsudoで実行すれば解決するらしい。
sudo node app.js
あとは、sudo で実行するのをデーモン化すれば良いことになる。
ただし、sudoで実行するとプロセスの所有者がrootになっているのが危険らしい。
下記参考サイトに則って、listenメソッドの中で別ユーザーにプロセスを引き継ぐとよいらしい。
foreverのデーモン登録を自動起動する方法
①initd-foreverというのを使うらしい。そのインストール方法。
sudo npm install -g initd-forever
②プロジェクトルートで、起動スクリプトを作成する。
cd <プロジェクトルート>
sudo initd-forever -n <プロジェクトルート>
③起動スクリプトの中身を編集して、エントリポイントになるスクリプトファイルを指定する。
nodeApp="/home/<ユーザー名>/<プロジェクトルート>/app.js"
※特に修正する必要がなかった。プロジェクトにnpm initして、package.jsonのstartコマンドに node app.jsを登録してあったからなのか?
④起動スクリプトを実行可能にして、init.dディレクトリに置く。
sudo chmod +x <プロジェクトルート>
sudo mv <プロジェクトルート> /etc/init.d
※シンボリックリンクを入れる方が普通?
⑤サービスを有効化する。
sudo chkconfig --add <プロジェクトルート>
sudo chkconfig <プロジェクトルート> on
sudo chkconfig <プロジェクトルート> --list
sudo service <プロジェクトルート> start
以下、参考サイト
参考サイト① node.jsをec2のyumに登録する方法
Installing Node.js via package manager | Node.js ※Debian系、RedHat系などURLや登録方法の違いに応じて丁寧に説明されている。
参考サイト② 80番ポートで登録して、一般ユーザーにプロセスを引き渡す方法
参考サイト③ foreverのデーモン化を自動起動する方法
ブログ再開した。!!