⚡
⚡️令和最新版⚡️ EC2 インスタンスに Ruby on Rails の環境をセットアップする。
● EC2 インスタンスに SSH で接続する。
- 初回 ログイン時のみ
$ chmod 600 ~/.ssh/'キーペアのファイル名'.pem
を実行して、キーペア(秘密鍵)の権限を変更しておく。
- 以下のコマンドを実行し、接続する。
$ ssh -i ~/.ssh/'秘密鍵のファイル名'.pem ec2-user@'IPアドレス'
● EC2 インスタンスに Ruby をインストールする。
-
$ sudo yum -y update
を実行して、既存のパッケージをアップデートする。 - Node.js のパッケージをダウンロードする。
→ Enterprise Linux based distributions | GitHub から、ご希望のバージョンの Node.js をダウンロードしてください。
-
$ curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
を実行して、Yarn のパッケージをダウンロードする。 -
$ sudo yum -y install git gcc clang openssl-devel zlib-devel mysql-devel nodejs yarn
を実行して、必要なパッケージをインストールする。
- rbenv installer | GitHub を使用して、rbenv と ruby-build をインストールする。
- 以下のコマンドを実行して、rbenv のパスを通し、初期設定をする。
-
$ rbenv --version
を実行して、 rbenv のバージョンが表示されたら、OK です。 -
$ rbenv install 'バージョン番号'
を実行して、Ruby をインストールする。
- インストールが完了したら、
$ rbenv global 'バージョン番号'
を実行する。 -
$ rbenv rehash
を実行する。 -
$ ruby --version
を実行して、 Ruby のバージョンが表示されたら完了です。
● MySQL のコマンドだけ、インストールする。
-
MySQL Community Downloads からパッケージをダウンロードします。
Amazon Linux 2 インスタンスは、Red Hat Enterprise Linux 7 / Oracle Linux 7
です。
-
$ mysql
コマンドは、MySQL Community Client に含まれているため、$ sudo yum install -y mysql-community-client.x86_64
を実行します。
● 参考資料
● Nginx をインストールする。
-
$ which amazon-linux-extras
を実行して、Extras Library がインストールされているか確認します。 -
$ sudo amazon-linux-extras enable nginx1
を実行して、Nginx のトピックを有効化します。 - 以下のコマンドを実行して、Nginx をインストールします。
$ yum clean metadata
$ sudo yum install -y nginx
● 参考資料
● EC2 インスタンスから GitHub に接続する。
-
$ ssh-keygen -t rsa -b 4096
を実行して、GitHub に接続するための鍵を新規作成する。
途中 聞かれる質問はすべて空欄のままで実行して大丈夫です。 -
$ cat ~/.ssh/id_rsa.pub
を実行して、鍵の中身を表示する。 -
GitHub から、「Settings」>「SSH and GPG keys」>「New SSH key」と遷移し、Key 欄に先ほど確認した鍵を入力する。
-
$ ssh -T git@github.com
を実行して、GitHub に接続できるか確認する。
Hi 'ユーザー名'! You've successfully authenticated, but GitHub does not provide shell access.
となれば成功です。
● アプリケーションサーバー(Unicorn)をインストールする。
-
Gemfile
に以下の内容を記述して、$ bundle install
します。
Gemfile
group :production do
gem 'unicorn', '~> 6.0'
# https://rubygems.org/gems/unicorn | RubyGems
# 低遅延・高帯域の接続で高速なクライアントにサービスを提供できる UNIX ライクな HTTP サーバ
end
-
config
ディレクトリ配下にunicorn.rb
を新規作成して、以下の内容を記述する。
/config/unicorn.rb
app_path = File.expand_path('../../', __FILE__)
#アプリケーションサーバの性能を決定する
worker_processes 1
#アプリケーションの設置されているディレクトリを指定
working_directory app_path
#Unicornの起動に必要なファイルの設置場所を指定
pid "#{app_path}/tmp/pids/unicorn.pid"
#ポート番号を指定
listen 3000
#エラーのログを記録するファイルを指定
stderr_path "#{app_path}/log/unicorn.stderr.log"
#通常のログを記録するファイルを指定
stdout_path "#{app_path}/log/unicorn.stdout.log"
#Railsアプリケーションの応答を待つ上限時間を設定
timeout 60
preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true
check_client_connection false
run_once = true
before_fork do |server, worker|
defined?(ActiveRecord::Base) &&
ActiveRecord::Base.connection.disconnect!
if run_once
run_once = false # prevent from firing again
end
old_pid = "#{server.config[:pid]}.oldbin"
if File.exist?(old_pid) && server.pid != old_pid
begin
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
Process.kill(sig, File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH => e
logger.error e
end
end
end
after_fork do |_server, _worker|
defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end
- EC2 インスタンス内にて、アプリケーションディレクトリを新規作成し、GitHub リポジトリからアプリケーションをクローンする。
Bash
$ sudo mkdir /var/www
# アプリケーションディレクトリを新規作成する。
$ sudo chown ec2-user /var/www
# アプリケーションディレクトリの権限を変更する。
$ cd /var/www
$ git clone 'リポジトリ URL'
● アプリケーションの Ruby Gems をインストールする。
- 事前に EC2 インスタンスの Swap 領域を設定しておく。
Bash
$ cd ~
# ホームディレクトリに移動しておく。
$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
$ sudo chmod 600 /swapfile1
$ sudo mkswap /swapfile1
$ sudo swapon /swapfile1
$ sudo sh -c 'echo "/swapfile1 none swap sw 0 0" >> /etc/fstab'
- EC2 インスタンス内のアプリケーションディレクトリに移動して、Ruby のバージョンが開発環境のものと同じかどうかを確認しておいてください。
Bash
$ cd /var/www/'アプリケーション名'
$ ruby --version
- Bundler をインストールする。
Bash
$ gem install bundler -v 'バージョン番号'
$ bundle install
# Bundler がインストールできたら、Ruby Gems(Gemfile)を導入する。
● ここまでできたらもう一息 💪 。アプリケーションの設定をおこなう。
-
$ rake secret
を実行して、secret_key_base を取得し、環境変数を設定する。 - 環境変数 または Credentials.yml を設定してください。
● 参考資料
ここまでできたらもう完成したようなものです。
あとは、データベース・テーブルの作成,アセットコンパイル、Unicorn の再起動をしたら表示できるはず!
● データベースとのやりとりをおこなう場合は…
- 本番環境で、
$ rails db:
コマンドを実行する際は、RAILS_ENV=production
を追記して、本番環境用のデータベース設定が適用されるように実行する。
● アプリケーションサーバ(Unicorn)の再起動
サイトを更新する際 等、$ git pull origin master
でコードを更新した際は Unicorn を再起動して反映する必要があります。
その際のコマンドです。
Bash
$ rails assets:precompile RAILS_ENV=production
# スタイルシートや JavaScript 等を更新したときにアセットコンパイルする。
$ ps aux | grep unicorn
# Unicorn が使用しているプロセスを確認する。
$ kill "'unicorn_rails master' のプロセスID"
# 'unicorn_rails master' が使用しているプロセスを終了する。
$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
# Unicorn を起動する。
● Special Thanks(参考資料)
Discussion