Express.js のアプリを複数起動する方法
Apache をプロキシサーバーとして利用します。Express.js のアプリを pm2 を利用して複数起動する設定方法です。
動作状況は、VirtualBox に AlmaLinux をインストールして確認しました。
アプリはユーザーのホームディレクトリに保存しています。
Express-generator でスケルトンを作成します。以下のコマンドを実行し、アプリを二つ作成します。
express -e app1
express -e app2
それぞれのアプリのapp.jsを以下のように変更します。
app1/app.js
app.use('/app1', indexRouter);
app2/app.js
app.use('/app2', indexRouter);
また、それぞれのアプリのbin/wwwも以下のように変更します。
app1/bin/www
var port = normalizePort(process.env.PORT || '3010');
app2/bin/www
var port = normalizePort(process.env.PORT || '3011');
Apache の設定
プロキシサーバーとしての設定をします。「 /etc/httpd/conf.d/exproxy.conf 」というファイルを作成し、設定をします。
sudo vi /etc/httpd/conf.d/exproxy.conf
「 /etc/httpd/conf.d/exproxy.conf 」を以下のように編集します。
/etc/httpd/conf.d/exproxy.conf
<VirtualHost *:80>
# App1
ProxyPass /app1 http://127.0.0.1:3010/app1
ProxyPassReverse /app1 http://127.0.0.1:3010/app1
# App2
ProxyPass /app2 http://127.0.0.1:3011/app2
ProxyPassReverse /app2 http://127.0.0.1:3011/app2
</VirtualHost>
ファイヤーウォールの設定を変更します。
sudo firewall-cmd --add-service=http --zone=public --permanent
sudo firewall-cmd --reload
SELinux を無効にしておきます。
sudo setenforce 0
Apache で Proxy 設定をしたアプリの起動
Apache で Proxy 設定をした場合のアプリの起動は、それぞれのアプリのルートディレクトリに移動して、以下のコマンドを入力します。
pm2 start ./bin/www --name app1
pm2 start ./bin/www --name app2
http://192.168.11.1/app1とhttp://192.168.11.1/app2にアクセスしてそれぞれのアプリが表示されるか確認します。