AWSに以下の環境を構築したので、備忘録として残しておこうと思います。
(0)[AWSの設定] (http://qiita.com/hibriiiiidge/items/aebcd4184c7ab4c83bdf)
(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の設定] (http://qiita.com/hibriiiiidge/items/aebcd4184c7ab4c83bdf)
・間違いがありましたらコメントにて教えて下さい。(まだまだ勉強中です。)
・専門用語の深い解説はしておりません。
・通常デプロイは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 環境を削除
###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 ]
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 ]
[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 環境構築メモ