🛠️

AWS EC2 × Apache2.4 × Node.js でサーバーの環境構築

2022/03/02に公開

流れ

  • AWS の EC2 インスタンス(t3.nano, Amazon Linux 2)を起動
  • SSH 接続のセットアップ
  • yum のセットアップ&パッケージのインストール
  • Git 環境のセットアップ
    • SSH 接続(private リポジトリを扱うなら)
    • git-completion を導入
  • Node 環境のセットアップ
  • Node.js でファイルサーバーを立てる
    • デーモン化
  • Apache2.4 でルーティング

記事に含まないこと

  • 独自ドメインの取得とそのルーティング
  • SSL/TLS 対応(https 化)

AWS の EC2 インスタンスを起動

  1. AWS マネジメントコンソールにログイン
  2. EC2 のページを開く
  3. リージョンは米国東部(バージニア北部)を選択(安いので)
  4. インスタンスタブを開く
  5. オレンジ色のインスタンスを起動ボタンを押す
  6. Amazon Linux 2 AMI (HVM) - Kernel 5.1.0, SSD Volume Typeを選択
  7. t3.nano のインスタンスタイプを選択(t3 系は同じメモリサイズの t2 系よりも安くて高機能)
  8. インスタンスの詳細の設定はスルー
  9. ストレージの追加はサイズに文句なければ 8GiB のままスルー
  10. タグの追加はスルー
  11. セキュリティグループの設定は SSH の他に HTTP を追加(デフォルト値のままで OK)
  12. 確認と作成して問題なければ起動
  13. SSH 接続に必要なキーペアを作る(既存のものがあってそれを使うならそれを選択)
  • 名前は自由だけどそのままファイル名になる
  • キーペアは作成時の 1 度しかダウンロードできないので注意
  • 大事に保管すること
  • ここではsample_server.pemが生成されたとする
  1. インスタンスが起動されて実行中になったらインスタンスの Name をつける(自由)
  2. パブリック IPv4 DNS をチェックしておく
  • パブリック IPv4 DNS の見た目 ec2-x-xxx-xxx-xx.compute-1.amazonaws.com

SSH 接続のセットアップ

  1. ~/.ssh/sample_server.pemを置く
  2. ssh -i ~/.ssh/sample_server.pem ec2-user@{パブリック IPv4 DNS} で EC2 にアクセスできるか確認
  3. 接続できたら環境を確認(確認できたら一旦ログアウト)
$ cat /etc/system-release
$ cat /etc/os-release
  1. .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 のセットアップ&パッケージのインストール

  1. ssh-sample 再び SSH でログイン
  2. sudo yum update yum をアップデート
  3. sudo yum -y install gcc-c++ gcc をインストール
  4. sudo yum -y install git Git をインストール
  5. .bashrcexport LC_ALL=Cを追記

Git 環境のセットアップ

SSH 接続(private リポジトリを扱うなら)

  1. 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
  1. config を書く
config
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_ec2
  1. SSH 接続の確認(success と出ていたら OK)
$ ssh -T git@github.com

git-completion を導入

  1. .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
  1. 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 環境のセットアップ

  1. nvmをインストール
$ git clone https://github.com/creationix/nvm.git ~/.nvm
  1. nvmのパスを通す(.bashrcに追記)
# nvm
if [[ -s ~/.nvm/nvm.sh ]] ; then
  source ~/.nvm/nvm.sh
fi
  1. 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