🛠️
AWS EC2 × Apache2.4 × Node.js でサーバーの環境構築
流れ
- AWS の EC2 インスタンス(t3.nano, Amazon Linux 2)を起動
- SSH 接続のセットアップ
- yum のセットアップ&パッケージのインストール
- Git 環境のセットアップ
- SSH 接続(private リポジトリを扱うなら)
- git-completion を導入
- Node 環境のセットアップ
- Node.js でファイルサーバーを立てる
- デーモン化
- Apache2.4 でルーティング
記事に含まないこと
- 独自ドメインの取得とそのルーティング
- SSL/TLS 対応(https 化)
AWS の EC2 インスタンスを起動
- AWS マネジメントコンソールにログイン
- EC2 のページを開く
- リージョンは米国東部(バージニア北部)を選択(安いので)
- インスタンスタブを開く
- オレンジ色のインスタンスを起動ボタンを押す
-
Amazon Linux 2 AMI (HVM) - Kernel 5.1.0, SSD Volume Type
を選択 - t3.nano のインスタンスタイプを選択(t3 系は同じメモリサイズの t2 系よりも安くて高機能)
- インスタンスの詳細の設定はスルー
- ストレージの追加はサイズに文句なければ 8GiB のままスルー
- タグの追加はスルー
- セキュリティグループの設定は SSH の他に HTTP を追加(デフォルト値のままで OK)
- 確認と作成して問題なければ起動
- SSH 接続に必要なキーペアを作る(既存のものがあってそれを使うならそれを選択)
- 名前は自由だけどそのままファイル名になる
- キーペアは作成時の 1 度しかダウンロードできないので注意
- 大事に保管すること
- ここでは
sample_server.pem
が生成されたとする
- インスタンスが起動されて実行中になったらインスタンスの Name をつける(自由)
- パブリック IPv4 DNS をチェックしておく
- パブリック IPv4 DNS の見た目
ec2-x-xxx-xxx-xx.compute-1.amazonaws.com
SSH 接続のセットアップ
-
~/.ssh/
にsample_server.pem
を置く -
ssh -i ~/.ssh/sample_server.pem ec2-user@{パブリック IPv4 DNS}
で EC2 にアクセスできるか確認 - 接続できたら環境を確認(確認できたら一旦ログアウト)
$ cat /etc/system-release
$ cat /etc/os-release
-
.bashrc
や.zshrc
に alias を作っておくと便利
# AWS EC2
alias ssh-sample='ssh -i "${HOME}/.ssh/sample_server.pem" ec2-user@{パブリック IPv4 DNS}'
alias sftp-sample='sftp -i "${HOME}/.ssh/sample_server.pem" ec2-user@{パブリック IPv4 DNS}'
alias を使えるようにするにはsource ~/.bashrc
とかやれば OK
yum のセットアップ&パッケージのインストール
-
ssh-sample
再び SSH でログイン -
sudo yum update
yum をアップデート -
sudo yum -y install gcc-c++
gcc をインストール -
sudo yum -y install git
Git をインストール -
.bashrc
にexport LC_ALL=C
を追記
Git 環境のセットアップ
SSH 接続(private リポジトリを扱うなら)
- SSH キーを生成する
$ cd ~/.ssh
$ ssh-keygen -t ed25519 -f id_ed25519_ec2 -C "your_email@example.com"
$ ls
id_ed25519_ec2 id_ed25519_ec2.pub
$ touch ~/.ssh/config
- config を書く
config
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_ec2
- SSH 接続の確認(success と出ていたら OK)
$ ssh -T git@github.com
git-completion を導入
-
.git-completion.bash
と.git-prompt.sh
をダウンロード
$ wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -O ~/.git-completion.bash
$ chmod a+x ~/.git-completion.bash
$ wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh -O ~/.git-prompt.sh
$ chmod a+x ~/.git-prompt.sh
- git-completion を有効化(
.bashrc
に追記)
if [ -f ~/.git-completion.bash ]; then
source ~/.git-completion.bash
fi
if [ -f ~/.git-prompt.sh ]; then
source ~/.git-prompt.sh
export GIT_PS1_SHOWDIRTYSTATE=1
export PS1='\[\033[36m\]\u:\W\[\033[31m\]$(__git_ps1)\[\033[0m\]$ '
fi
Node 環境のセットアップ
-
nvm
をインストール
$ git clone https://github.com/creationix/nvm.git ~/.nvm
-
nvm
のパスを通す(.bashrc
に追記)
# nvm
if [[ -s ~/.nvm/nvm.sh ]] ; then
source ~/.nvm/nvm.sh
fi
-
Node
をインストール
$ nvm install {バージョン}
$ nvm use v{バージョン}
Node.js でファイルサーバーを立てる(例)
簡易なファイルサーバーの例を用意したのでそれを使います。
Kyome22 - node_server
$ cd ~/
$ git clone https://github.com/Kyome22/node_server.git
$ cd node_server
$ npm install
$ npm start
この例ではlocalhost:3003
番のポートを使っています。
デーモン化
forever
を使ってデーモン化する例
$ npm install -g forever
$ cd ~/node_server
$ forever start server.js
# 止める時
$ forever list # job番号を確認
$ forever stop {job番号}
Apache2.4 でルーティング
$ sudo yum install -y httpd # 最近は勝手に 2.4 になる
$ httpd -version
$ sudo chkconfig httpd on
バーチャルホストの設定
/etc/httpd/conf/httpd.conf
を編集(sudo
で)して以下を追記
httpd.conf
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /home/ec2-user/node_server/public
ServerName {パブリック IPv4 DNS}
ProxyPass / http://localhost:3003/
ProxyPassReverse / http:/localhost:3003/
</VirtualHost>
httpd
の操作
- 起動
sudo service httpd start
- 停止
sudo service httpd stop
- 再起動
sudo service httpd restart
これで パブリック IPv4 DNS の URL にブラウザーでアクセスしてページが表示されれば成功🎉
node_serverのページ
Discussion