nkmtの日記

日常のことをつらつら書きます

AWS EC2にRuby on Rails環境を整える

Rails

2019年11月13日

はじめに

ネット上ではすでに多くの情報が出回っていますが、
AWSのEC2インスタンスにRailsをインストールするための手順をまとめます。
構成としては unicorun puma でデプロイにcapistranoを利用しています。

nginx

まずはnginxを入れます。
外からアクセスした時に動作確認などしやすいので最初に入れてしまいます。
念のためyumレポジトリを最新化します。
その後にnginxのインストールを行います。

sudo yum update -y
sudo amazon-linux-extras install nginx1.12

rubyをインストールするためのライブラリ

次はruby環境をインストールするためのライブラリ群をインストールします。

sudo yum -y install gcc-c++ glibc-headers openssl-devel readline libyaml-devel readline-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel sqlite-devel

git

rbenvをgit経由で持ってきたろデプロイにCapistrano使うのでgitのインストールをします。

sudo yum install git

rbenv

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src

rbenvがインストールされたのかの確認をします。
バージョンが出てきたら大丈夫です。

rbenv --version
rbenv 1.1.2-4-g577f046

ruby-build

ruby本体のコンパイルに使うのでruby-buildを入れます。
これを入れないとruby自体のインストールに失敗します。

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

rubyのインストールをします

rbenv install 2.5.3
ruby -v

rbenv: ruby: command not found

The `ruby' command exists in these Ruby versions:
2.5.3

インストールに成功しているのでグローバルに設定します。
グローバルに設定します

rbenv global 2.5.3

バンドラーのインストールをします。

gem install bundler

ここまでで基本的なrails環境は整いました。
次はデプロイするための設定をします。
今回はcapistranoを利用しているので、
githubとの連携のための設定をします。
まずは秘密鍵の設定をします。

cd .ssh/
vim github_の鍵
chmod 0600 github_の鍵

上記の秘密鍵を利用してgithubと通信できるか確認します。

vim ~/.ssh/config

Host github github.com
HostName github.com
IdentityFile ~/.ssh/github_id_rsa
User git

chmod 600 ~/.ssh/config

githubとの連携のテストをします。


ssh -T github Warning: Permanently added the RSA host key for IP address '×××.×××.×××.×××' to the list of known hosts. Hi ×××××××××! You've successfully authenticated, but GitHub does not provide shell access.

念の為レポジトリが見れるか確認します。

git ls-remote [email protected]

データベースにmysqlを利用している場合、
接続のためにmysql-develを入れます。

sudo yum install mysql-devel

railsは内部でnode.jsを使っているのでnvm入れてnode.jsも入れます。

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
source ~/.bashrc
nvm install v6.10.2

次にrailsで使うシークレットキーを設定します。

export SECRET_KEY_BASE=`bundle exec rake secret`

nginxとpumaの連携設定

upstream puma {
# pumaの設定で指定したsocketファイルを指定
server unix:///var/www/html/xxxxxx/shared/tmp/sockets/puma.sock;
}

server {
# nginxが待ち受けしたいポートを指定
listen 80 default_server;
listen [::]:80 default_server;
server_name puma;

# cssなどのassetはpumaのプロセスの外で動くつまりnginx側から返すのでこれが必要
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
root /var/www/html/xxxxxxxx/current/public;
}

location / {
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 上記server_name で設定した名前で指定
proxy_pass http://puma;
}
}