Rails 5.0.2 + Unicorn + Nginx で本番環境の構築 (編集中)
本番環境構築にハマりまくったので備忘録として残す
一番悩んだポイントは、nginxとunicornの設定ファイルの記述。
お悩みポイント
- apacheなのか、nginxなのかで悩む
- unicornなのかpassengerなのかpumaなのか、webrickなのかで悩む(そもそもなんで種類があるのかで悩む)
- nginx、unicornの設定ファイルの記述で悩む
1と2は記事の紹介にとどめて、3に関して詳しく書こうと思います。
この記事が大変役に立ちました!m(_ _)m
Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳)
これをそのまま参考にしました
世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
最初に結論
Nginx + Unicorn + Rails の構成を取るのが一般的(らしい?)との記述があったので、その通りの構成にした。
参考:Unicorn と Nginx と Rails の関係
Unicorn + Rails でも動かせるので、一旦これで動作を確認した後、Nginxをかまして設定するのがいいかも
(Nginxもuniornも設定ファイルを手探りで書いたのでどっちに原因があるか分からなかったため)
Nginx単体では、Rackの機能をサポートしていない為、Nginx + Rails ではアプリケーションは動作しない。
unicornとnginxをサーバーにインストールする
世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで
configファイルを書く
アプリが/var/www/rails/sampleAppにあるとして進めて行きます
必要に応じて適宜読み替えてくださいm(_ _)m
!!下記の3つのファイルが重要です!!
- /var/www/rails/sampleApp/config/unicorn.rb
- /etc/nginx/nginx.conf
- /etc/nginx/sites-enabled/sampleApp.conf
[重要]
・unicornを起動する時にどのconfigファイルを読み込むか指定するので、unicorn.rbという名前じゃなくても良い
・/etc/nginx/nginx.confの中で、sites-enabledの配下にある.confファイルを読み込むように指定するのでsampleApp.confという名前じゃなくても良いし、sites-enabledというディレクトリ名じゃなくても良い
/var/www/rails/sampleApp/config/unicorn.rb
@app_path = '/var/www/rails/sampleApp'
working_directory @app_path
worker_processes 2
preload_app true
timeout 30
# Unicorn socket
#listen 80 # unicorn単体で動かす時
listen '/var/www/rails/sampleApp/tmp/unicorn.sock'
# Unicorn PID file location
pid '/var/www/rails/sampleApp/pids/unicorn.pid'
# Path to logs
stderr_path '/var/www/rails/sampleApp/log/unicorn.error.log'
stdout_path '/var/www/rails/sampleApp/log/unicorn.access.log'
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
/etc/nginx/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
include sites-enabled/*.conf; # ここで追加で読み込むファイルを指定
sendfile on;
}
http {} の中に include sites-enabled/*.conf;
を追加してください
/etc/nginx/sites-enabled/sampleApp.conf
/etc/nginx/sites-enabledのディレクトリがない場合はmkdirで作成し、sampleApp.confファイルをディレクトリ内部に作成してください
# log directory
error_log /var/www/rails/sampleApp/log/nginx.error.log;
access_log /var/www/rails/sampleApp/log/nginx.access.log;
# max body size
client_max_body_size 4G;
upstream unicorn_server {
# for UNIX domain socket setups
server unix:/var/www/rails/sampleApp/tmp/unicorn.sock fail_timeout=0;
}
server {
listen 80;
server_name {グローバルIPアドレス};
# nginx so increasing this is generally safe...
keepalive_timeout 5;
# path for static files
root /var/www/rails/sampleApp/public;
# page cache loading
location / {
try_files $uri/index.html $uri.html $uri @unicorn_server;
}
location ~ ^/assets/ {
root /var/www/rails/sampleApp/public;
}
location @unicorn_server {
# HTTP headers
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn_server;
}
# Rails error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/rails/sampleApp/public;
}
}
その他
サーバーはAWSのEC2で構築、DBサーバーは建てなかった
お名前.comで独自ドメインを取得している。勿論、なくても問題ないけど、本番で動かすならドメインはとる人の方が多いかなと。
Author And Source
この問題について(Rails 5.0.2 + Unicorn + Nginx で本番環境の構築 (編集中)), 我々は、より多くの情報をここで見つけました https://qiita.com/matsuda_sinsuke/items/616cf32d277c6d081688著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .