LoginSignup
17
19

More than 5 years have passed since last update.

[AWS] EC2+RDS開発環境設定 Nginx+Unicorn+Ruby2.3+Rails4.2+MySQL5.5

Last updated at Posted at 2017-02-13

AWSに以下の環境を構築したので、備忘録として残しておこうと思います。

(0)AWSの設定
(1)Apache2.2+PHP7+MySQL5.6+WordPress4.7+phpMyAdmin4.6
(2)Nginx+Unicorn+Ruby2.3+Rails4.7+MySQL5.5 ← 本エントリの内容

実施事項
◎Ruby、Railsの設定
◎MySQLの設定
◎Unicornの設定
◎Nginxの設定
◎"Hello World"の表示

【ご一読いただくにあたって】
・EC2、RDS等々の設定は済ませておいて下さい。
 まだの方はこちらから → AWSの設定
・間違いがありましたらコメントにて教えて下さい。(まだまだ勉強中です。)
・専門用語の深い解説はしておりません。
・通常デプロイはgithub等を絡めてデプロイすると思いますが、当エントリではとりあえず本番環境(production)を作る目的で進んでいきます。

EC2の設定

アップデート、ユーザ追加等の下準備

sshでEC2へアクセスした状態


       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2016.09-release-notes/
3 package(s) needed for security, out of 6 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-1-86 ~]$ sudo yum update

~アップデート~

総ダウンロード容量: 51 M
Is this ok [y/d/N]: y
(途中、確認されますが[y]を入力)

完了しました!
[ec2-user@ip-10-0-1-86 ~]$ sudo su - #スーパーユーザへ切替
[root@ip-10-0-1-86 ~]# useradd myname #ユーザ追加
[root@ip-10-0-1-86 ~]# passwd myname #ユーザパスワード設定
Changing password for user myname.
New password: (パスワード入力)
Retype new password: (再入力)
passwd: all authentication tokens updated successfully. #成功
[root@ip-10-0-1-86 ~]# sudo visudo #追加したユーザに権限付与

=ファイル編集画面=

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
myname  ALL=(ALL)       ALL  (←rootの下に追加)

===============

[root@ip-10-0-1-86 ~]# exit #スーパーユーザ ログアウト
logout
[ec2-user@ip-10-0-1-86 ~]$ su - myname #追加したユーザに切替
パスワード:
[myname@ip-10-0-1-86 ~]$

Ruby,Railsのインストール

git,rbenvのインストール

[myname@ip-10-0-1-86 ~]$ sudo yum -y install git
[myname@ip-10-0-1-86 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv #rbenvインストール
[myname@ip-10-0-1-86 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build #ruby-buildインストール
[myname@ip-10-0-1-86 ~]$ sudo vi .bash_profile #.bash_profileの編集

=ファイルの編集画面=

export PATH
export PATH="$HOME/.rbenv/bin:$PATH" ← 追加
eval "$(rbenv init -)" ← 追加

=================

[myname@ip-10-0-1-86 ~]$ source ~/.bash_profile #環境変数の反映
[myname@ip-10-0-1-86 ~]$ rbenv -v #バージョン確認
rbenv 1.1.0-2-g4f8925a

rbenvとは?
rbenv + ruby-build はどうやって動いているのか
Linux | source コマンドは何をしているのか

Ruby2.3.3のインストール

[myname@ip-10-0-1-86 ~]$ sudo yum install -y gcc
[myname@ip-10-0-1-86 ~]$ sudo yum install -y openssl-devel readline-devel zlib-devel
[myname@ip-10-0-1-86 ~]$ rbenv install 2.3.3

Rails4.2.7のインストール

railsを展開するディレクトリを生成 (/var/www/railsに展開)

[myname@ip-10-0-1-86 ~]$ cd /var
[myname@ip-10-0-1-86 var]$ sudo mkdir www #wwwディレクトリの生成
[myname@ip-10-0-1-86 var]$ cd www
[myname@ip-10-0-1-86 www]$ sudo mkdir rails #railsディレクトリの生成
[myname@ip-10-0-1-86 www]$ sudo chown -R takahashi:takahashi rails #railsディレクトリのオーナー変更
[myname@ip-10-0-1-86 www]$ cd rails
[myname@ip-10-0-1-86 rails]$ rbenv local 2.3.3 #railsディレクトリのruby変更
[myname@ip-10-0-1-86 rails]$ ruby -v #バージョン確認
ruby 2.3.3p222 (2016-11-21 revision 57164) [x86_64-linux] 
[myname@ip-10-0-1-86 rails]$ gem update --system #gemをアップデート
[myname@ip-10-0-1-86 rails]$ rbenv exec gem install bundler #bundlerインストール 
[myname@ip-10-0-1-86 rails]$ rbenv rehash
[myname@ip-10-0-1-86 rails]$ rbenv exec bundle init #Gemfileが生成される
Writing new Gemfile to /var/www/rails/Gemfile
[myname@ip-10-0-1-86 rails]$ vi Gemfile

=ファイルの編集画面=

#gem "rails"
     ⬇︎
gem "rails", "4.2.7" ← バージョンを追加

=================

[myname@ip-10-0-1-86 rails]$ rbenv exec bundle install --path vendor/bundle
[myname@ip-10-0-1-86 rails]$ rbenv exec bundle exec rails new qiita --skip-bundle -d mysql 
[myname@ip-10-0-1-86 rails]$ rm -f Gemfile; rm -f Gemfile.lock; rm -rf .bundle; rm -rf vendor #Rails をローカルインストールするために使用した Bundler 環境を削除

rbenv rehashは何をやっているのか?

MySQLの設定

[myname@ip-10-0-1-86 qiita]$ cd qiita
[myname@ip-10-0-1-86 qiita]$ sudo yum install mysql-devel #MySQlインストール
[myname@ip-10-0-1-86 qiita]$ rbenv exec bundle install --path vendor/bundle
#bundle install する際に --path vendor/bundle をつけることで、gemのインストール先がRuby環境でなく、 ローカルのvendor/bundle ディレクトリ以下になる
[myname@ip-10-0-1-86 qiita]$ sudo vi .gitignore


=ファイルの編集画面=

/vendor/bundle ← 追加

=================


[myname@ip-10-0-1-86 qiita]$ vi config/database.yml


=ファイルの編集画面=

default: &default
  adapter: mysql2
  encoding: utf8
  pool: 5
  username: root
  password: ********(←RDSインスタスのパスワード)
  host: db-id-for-qiita-nginx.xxxxxxxxx.ap-northeast-1.rds.amazonaws.com (←エンドポント)

~省略~

production:
  <<: *default
  database: db_qiita (←DB名)
  username: db_qiita_user (←ユーザ名)
  password: <%= ENV['QIITA_DATABASE_PASSWORD'] %>

=================


[myname@ip-10-0-1-86 qiita]$ vi ~/.bash_profile


=ファイルの編集画面=

export RAILS_ENV="production"
export QIITA_DATABASE_PASSWORD="*********"(←RDSインスタスのパスワード)

=================


[myname@ip-10-0-1-86 qiita]$ source ~/.bash_profile
[myname@ip-10-0-1-86 qiita]$ sudo yum install nodejs --enablerepo=epel #node.jsのインストール
[myname@ip-10-0-1-86 qiita]$ bundle exec rake db:migrate RAILS_ENV=production #dbの生成

SecretKeyの登録・設定

[myname@ip-10-0-1-86 qiita]$ bundle exec rake secret
12345678910abcdefghijklmnopqrstuvwxyz
[myname@ip-10-0-1-86 qiita]$ vi ~/.bash_profile

=ファイルの編集画面=

export SECRET_KEY_BASE="12345678910abcdefghijklmnopqrstuvwxyz"

=================

[myname@ip-10-0-1-86 qiita]$ source ~/.bash_profile

unicornのインストール・設定

[myname@ip-10-0-1-162 qiita]$ vi Gemfile

=ファイルの編集画面=

gem "unicorn"

=================

[myname@ip-10-0-1-86 qiita]$ rbenv exec bundle install --path vendor/bundle
[myname@ip-10-0-1-86 qiita]$ cd config
[myname@ip-10-0-1-86 config]$ touch unicorn.rb
[myname@ip-10-0-1-86 config]$ vi unicorn.rb

unicorn.rbの編集

=ファイルの編集画面=

# -*- coding: utf-8 -*-
worker_processes 4

listen File.expand_path('tmp/unicorn.sock')
pid File.expand_path('tmp/unicorn.pid')

stderr_path File.expand_path('log/unicorn.log')
stdout_path File.expand_path('log/unicorn.log')

preload_app true

before_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn master intercepting TERM and sending myself QUIT instead'
    Process.kill 'QUIT', Process.pid
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  Signal.trap 'TERM' do
    puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT'
  end

  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end

=================

Nginxのインストール・設定

[myname@ip-10-0-1-86 config]$ sudo yum install nginx
[myname@ip-10-0-1-86 config]$ cd /etc/nginx/conf.d/
[myname@ip-10-0-1-86 conf.d]$ sudo touch local.conf
[myname@ip-10-0-1-86 conf.d]$ sudo vi local.conf

local.confの編集

=ファイルの編集画面=

upstream unicorn {
  server unix:/var/www/rails/qiita/tmp/unicorn.sock;
}

server {
  listen 80;
  server_name 54.238.XXX.XXX; (←EC2のパブリックIP)

  access_log /var/log/nginx/qiita_access.log;
  error_log /var/log/nginx/qiita_error.log;

  root /var/www/rails/qiita ;

  client_max_body_size 100m;
  error_page 404 /404.html;
  error_page 500 502 503 504 /500.html;
  try_files $uri/index.html $uri @unicorn;

  location @unicorn {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://unicorn;
  }
}

================
[myname@ip-10-0-1-86 conf.d]$ cd
[myname@ip-10-0-1-86 ~]$ cd /var/www/rails/qiita
[myname@ip-10-0-1-86 qiita]$ bundle exec unicorn_rails -c /var/www/rails/qiita/config/unicorn.rb -E production -D
[myname@ip-10-0-1-86 qiita]$ sudo service nginx start
Starting nginx:                                            [  OK  ]

rails1.png

nginxは起動しているも、"The page you were looking for doesn’t exist"のエラー表示
これはサーバー内にrailsに表示すべきファイルがないことが原因のよう
そのファイルを作成すれば解決される
Unicornでrailsを動かす、vagrant環境

Hello, Worldの表示

[myname@ip-10-0-1-86 qiita]$ sudo service nginx stop #nginxを一旦停止
Stopping nginx:                                            [  OK  ]
[myname@ip-10-0-1-86 qiita]$ kill -QUIT `cat /var/www/rails/qiita/tmp/unicorn.pid` #unicornを一旦停止
[myname@ip-10-0-1-86 qiita]$ bundle exec rails g controller test
[myname@ip-10-0-1-86 qiita]$ cd app/controllers
[myname@ip-10-0-1-86 controllers]$ vi test_controller.rb


=ファイルの編集画面=

def index
end

=================


[myname@ip-10-0-1-86 controllers]$ cd ..
[myname@ip-10-0-1-86 app]$ cd views/test
[myname@ip-10-0-1-86 test]$ touch index.html.erb
[myname@ip-10-0-1-86 test]$ vi index.html.erb


=ファイルの編集画面=

<div>
Hello, World!!
</div>

=================


[myname@ip-10-0-1-86 test]$ cd ../../..
[myname@ip-10-0-1-86 qiita]$ cd config
[myname@ip-10-0-1-86 config]$ vi routes.rb


=ファイルの編集画面=

root 'start#index'

=================


[myname@ip-10-0-1-86 config]$ cd ..
[myname@ip-10-0-1-86 qiita]$ bundle exec unicorn_rails -c /var/www/rails/qiita/config/unicorn.rb -E production -D
[myname@ip-10-0-1-86 qiita]$ sudo service nginx start
Starting nginx:                                            [  OK  ]

rails4.png
unicorn,nginxの停止

[myname@ip-10-0-1-86 qiita]$ sudo service nginx stop
Stopping nginx:                                            [  OK  ]
[myname@ip-10-0-1-86 qiita]$ kill -QUIT `cat /var/www/rails/qiita/tmp/unicorn.pid`

以上です。
Ruby2.4系だと
warning: constant ::Fixnum is deprecated
warning: constant ::Bignum is deprecated
といった警告ログが出ます。
消せるようですが...
Rails 5.0.1 と Ruby 2.4.0 での警告ログを Forked Rails で消した

大変参考にさせていただきました。
Rails 5 + Unicorn + Nginx 環境構築メモ

17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19