やりたいこと
超ざっくりした画像ですが、やりたいこととしては、
・ Apacheをリバースプロキシとして80番で待ち受けて3000番のNodeを動かしたい
AWSのEC2インスタンスを作成してプライベートサブネット間で疎通確認ができている状態からスタートします。
メモとして残しますが、何かあればコメントお願いします。
Apacheのインストール
sudo yum -y install httpd
sudo service httpd start
基本的なコマンドたち
// Apacheを起動する
$ service httpd start
// Apacheを停止する
$ service httpd stop
// Apacheを再起動する
$ service httpd restart
バージョンの確認
$ httpd -v
Server version: Apache/2.4.33 ()
メモ
sudo つけないと怒られる
The name org.freedesktop.PolicyKit1 was not provided by any .service files
nodebrewのインストール
nodebrewをインストールすると、nodeのバージョンを簡単に切り替えられる
curl -L git.io/nodebrew | perl - setup
export PATH=$HOME/.nodebrew/current/bin:$PATH
source ~/.bashrc
nodeのインストール
nodebrew install stable
nodebrew use stable
node -v
npmのインストール
Node Package Managerのこと
予め用意された便利な機能をまとめたもの。
sudo yum install npm
npm -v
expressのインストール
Express は、Web アプリケーションとモバイル・アプリケーション向けの一連の堅固な機能を提供する最小限で柔軟な Node.js Web アプリケーション・フレームワークです。
無数の HTTP ユーティリティー・メソッドとミドルウェアを自由に使用できるため、堅固な API を迅速かつ容易に作成できます。
Express は、ユーザーが使い慣れている Node.js の機能をわかりやすくし、基礎的な Web アプリケーション機能をシンプルな階層で提供します。
$ npm install express --save
ハマった
インストールできなかった😓
npm WARN saveError ENOENT: no such file or directory, open '/home/ec2-user/package.json'
npm WARN enoent ENOENT: no such file or directory, open '/home/ec2-user/package.json'
npm WARN ec2-user No description
npm WARN ec2-user No repository field.
npm WARN ec2-user No README data
npm WARN ec2-user No license field.
npm initしないといけないみたい
npm initはprojectの初期設定を行うためのcommand
実行すると対話形式で項目を入力して、package.jsonを作成する。
npm init
参考:https://qiita.com/sinmetal/items/395edf1d195382cfd8bc
これで再度 expressのインストールを行う
WARN出たらこちらを参考にする:https://helen.hatenablog.com/entry/2016/05/22/003057
成功
npm install express --save
+ express@4.16.3
updated 1 package and audited 119 packages in 3.162s
found 0 vulnerabilities
apacheからnodeへproxyする
$ sudo vi /etc/httpd/conf/httpd.conf
<IfModule mod_proxy.c>
ProxyPass / http:// {IP} :3000
ProxyPassReverse / http:// {IP} :3000
</IfModule>
設定を反映
$ service httpd restart
nodeを起動
$ node /var/www/node/app.js
Example app listening on port 3000!
3000番ではなく80番で問い合わせてみる
$ curl http://XXX.XXX.X.XX:80
// ちゃんと帰って来ることを確認
Hello World!
3000番では帰ってこないことを確認
$ curl http://XXX.XXX.X.XX:3000