RailsアプリをAWS EC2にデプロイする方法その④デプロイ編②
AWSを使って本番環境にデプロイさせたので今回はその方法を簡潔に分かりやすく4段階にわけて書いて行きます。
1・下準備編
RailsアプリをAWS EC2にデプロイする方法その①下準備編 - 21歳フリーターからrailsエンジニアになるまで
2・DB.サーバー構築編
RailsアプリをAWS EC2にデプロイする方法その②DB.サーバー構築編 - 21歳フリーターからrailsエンジニアになるまで
3・デプロイ編①
RailsアプリをAWS EC2にデプロイする方法その③デプロイ編① - 21歳フリーターからrailsエンジニアになるまで
4・デプロイ編②⇦今回ここ
RailsアプリをAWS EC2にデプロイする方法その③デプロイ編② - 21歳フリーターからrailsエンジニアになるまで
いよいよ最後だ!!!!!
頑張っていこう!!!!
11・Unicornの設定
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Unicornとはアプリケーションサーバーの一種です。
アプリ本体を格納するためのサーバーです。
早速インストールしていきましょう。
下記コマンドを実行して下さい。
[seiya|CHARME] $: vi Gemfile
-----------------------------
#以下を追記
group :production, :staging do
gem 'unicorn'
end
----------------------------
[seiya|CHARME] $ gem install bundler
[seiya|CHARME] $ bundle install
[seiya|CHARME] $ vi config/unicorn.conf.rb
---------------------------
viコマンドでconfig配下に生成したunicornの設定ファイルに、下記を記述します。
$worker = 2
$timeout = 150
$app_dir = "/var/www/rails/CHARME" (自分のアプリ名)
$listen = File.expand_path '/var/run/unicorn.sock', $app_dir
$pid = File.expand_path '/var/run/unicorn.pid', $app_dir
$std_log = File.expand_path 'log/unicorn.log', $app_dir
# set config
worker_processes $worker
working_directory $app_dir
stderr_path $std_log
stdout_path $std_log
timeout $timeout
listen $listen
pid $pid
# loading booster
preload_app true
# before starting processes
before_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
old_pid = "#{server.config[:pid]}.oldbin"
if old_pid != server.pid
begin
Process.kill "QUIT", File.read(old_pid).to_i
rescue Errno::ENOENT, Errno::ESRCH
end
end
end
# after finishing processes
after_fork do |server, worker|
defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end
深追いはしませんがハマったポイントは参考にしていた記事はunicorn.sockとpidをtmp以下にセットしていましたがこれだとどうやらうまく読み込んでくれないみたいなので
var/run/下にセットしました!
12・Nginxの設定
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
NginxはWebサーバーにあたります。
これも先ほど出てきましたね。受付窓口です。
早速下記コマンドを打ち込んでください。
[seiya|~] sudo yum install nginx
[seiya|~]$ cd /etc/nginx/conf.d/
[seiya|conf.d]$ sudo vi CHARME.conf #自分のアプリケーション名でファイル名変更
viコマンドで作成したnginxの設定ファイルには、下記を記述します。
error_log /var/www/rails/CHARME/log/nginx.error.log; #自分のアプリケーション名に変更
access_log /var/www/rails/CHARME/log/nginx.access.log; #自分のアプリケーション名に変更
# max body size
client_max_body_size 2G;
upstream app_server {
# for UNIX domain socket setups
server unix:/var/run/unicorn.sock fail_timeout=0; #自分のアプリケーション名に変更
}
server {
listen 80;
server_name 54.95.23.50;
# nginx so increasing this is generally safe...
keepalive_timeout 5;
# path for static files
root /var/www/rails/CHARME/public; #自分のアプリケーション名に変更
# page cache loading
try_files $uri/index.html $uri.html $uri @app_server;
location @app_server {
# HTTP headers
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_connect_timeout 360;
proxy_send_timeout 360;
proxy_read_timeout 360;
proxy_pass http://app_server;
}
# Rails error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/rails/CHARME/public; #自分のアプリケーション名に変更
}
}
ここでハマったポイントが1つあります。
try_files $uri/index.html $uri.html $uri @app_server;
location @app_server {
ここの@app_serverは上記の上から7行目でセットしたupstreamの名前に@をつけたものになりますのでご注意を!!(参考したサイトがそうなっておらずハマりまくりました笑)
また、設定ファイルの記述が終わったら、下記も実行してください。
[seiya|conf.d] cd /var/lib
[seiya|lib] sudo chmod -R 775 nginx
この呪文はpostメソッドでもエラーが出ないようにするためのものなのだとか。
「開けごま」的な勢いでとりあえず唱えてあげましょう。
これにて設定は完了です!!
13・MySQLの設定
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
続いてDBです。
(アプリケーションのDBがMySQLで作成されている前提で話を進めていきます。)
下記コマンドを打ち込み、MySQLに関する設定を変更していきましょう。
[seiya|CHARME]$ vi config/database.yml
----------------------------
production:
<<: *default
database: CHARME_production
username: root #ここをrootに変更する
password: #ここを空欄にする
----------------------------
[seiyai|CHARME]$ sudo service mysqld start #mysqldの起動
[seiyai|CHARME]$ ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
[seiyai|CHARME]$ rake db:create RAILS_ENV=production
[seiyai|CHARME]$ rake db:migrate RAILS_ENV=production
上記のように、
アプリのmigrationファイルが実行されたログが出て来れば無事成功です!!
14・Nginxの起動
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
先ほど設定したNginxを起動させましょう。
使うはたった1行のコマンド。
[seiya|CHARME]$ sudo service nginx start
これだけなんです!!(涙)
15・確認するぞ!!!!!
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ついにここまできた。
アクセスしてみよう。。(手汗すごい)
52.64.~~~~~~~~~(ご自身のIPアドレス)
って、え??????(3度見はした)
まさに夢ならば〜どれほど〜よかったでしょう。ですね(涙)
よし、夢では終わらせないためにまずは、Unicornの起動確認。
このコマンドを打ち込んで、
seiya 24265 1 27 03:12 ? 00:00:01 unicorn_rails master -c /var/www/rails/tech-ruche/config/unicorn.conf.rb -D -E production
seiya 24271 24265 0 03:12 ? 00:00:00 unicorn_rails worker[0] -c /var/www/rails/tech-ruche/config/unicorn.conf.rb -D -E production
seiya 24273 24265 0 03:12 ? 00:00:00 unicorn_rails worker[1] -c /var/www/rails/tech-ruche/config/unicorn.conf.rb -D -E production
こんな感じでなんだかゴニョゴニョ表示されていれば既に起動されています。
表示されない場合は下記を実行してください。
[seiya]$ unicorn_rails -c /var/www/rails/CHARME(アプリの名前)/config/unicorn.conf.rb -D -E production #unicornを起動させる
その後もう一度上記の起動確認コマンドを実行し、例のゴニョゴニョが出て来ればOKです。
その後、Nginxも再起動させます。
[seiya|CHARME]$ sudo nginx -s reload
これでもう一度アクセスしてみてください!!
アプリが表示されましたか?
ちなみに僕の場合これをやってもさっきのエラー画面のままうんともすんとも言わず3日ぐらい積みました(涙)
そんな3日の闇を解決してくれたのがこのコマンドでした!!
1.unicornの停止
2.rails assets:precompile RAILS_ENV=production の実行
3.unicornの再起動(上記コマンド)
この2のコマンドのおかげで無事デプロイすることができました!!!
本番環境に自分のアプリが映った時は嬉しすぎて泣きそうでした!!笑
最後に
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
皆さんも無事にデプロイできましたか??
これは僕みたいに勉強中の人たちのやくに少しでも役にたてたらいいなと思い書きました!!
何か質問などございましたらお気軽にどうぞ!!
ご連絡ございましたらメールかtwitterにてどうぞ!!
メールアドレス:yamasey_guchi@icloud.com
teittwr:https://twitter.com/yamasey712