AWS LightsailのLAMPスタックを使用してWEBサーバーとして本番運用している環境にnode環境を混在させる方法。
この記事では、AWS Lightsailで運用中のApacheとSSL設定済みのWebサーバーにNode.jsをサービス化し、特定のパスへのリクエストをNode.jsアプリケーションに転送するためのリバースプロキシを設定する手順を説明します。
前提条件
- AWS LightsailでLAMPインスタンスが既に設定され、ApacheとSSLが設定済みであること。
手順
1. Node.jsのインストール
Node.jsをインスタンスにインストールします。
#curlが入ってなければインストール
sudo apt install curl
# nodeインストール
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install nodejs -y
node -v
npm -v
2. Node.jsアプリケーションの設置
Node.jsアプリケーションをサーバーに設置します。
app.js
のサンプル:
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8124);
console.log('Server running at http://127.0.0.1:8124/');
IPアドレスはAWS LightsailローカルIPをしらべて指定します。http://172.○○.○○.○○:8124/
# IPアドレスを調べる
ip a
3. Node.jsアプリケーションのデーモン化
pm2
を使用してNode.jsアプリケーションをデーモン化します。
pm2はnodeのアプリケーションを永続化し、異常終了時に再始動などプロセスを管理してくれます。
# pm2
sudo npm install pm2 -g
pm2 -v
# pm2でサーバーを立ち上げ
pm2 start app.js //立ち上げたいNodeサーバ
# pm2でデーモン化・立ち上がっているアプリの一覧
p2 list
# サーバー停止
pm2 stop app.js //止めたいNodeサーバ
4. Apacheのリバースプロキシ設定
Apacheの設定ファイルを編集して、/api
へのリクエストをNode.jsアプリケーションに転送するリバースプロキシを設定します。
以下は、/opt/bitnami/apache/conf
への設定
(もう少し用意場所があるかとおもいますが、ここでは手っ取り早くconfの末尾に追記しました。)
既存の設定ファイルに最下部にリバースプロキシ設定を追記します。
IPアドレスはAWS LightsailのローカルIPを指定します。2のpythonサーバーと同じ値。http://172.○○.○○.○○:8124/
# Node.jsへのリバースプロキシ設定
ProxyPass "/api" "http://172.○○.○○.○○:8124/"
ProxyPassReverse "/api" "http://172.○○.○○.○○:8124/"
Apacheを再起動します。
systemctl restart httpd
これで、yourdomain.com/api
にアクセスするとNode.jsアプリケーションに転送され、それ以外のパス(例えば yourdomain.com/about
)にアクセスすると、従来通りApacheのhtdocs配下のページが表示されます。