失敗したこと
これまでherokuにデプロイしていたRailsアプリをAWSのEC2を使ってデプロイしたいと思い、この記事を参考にチャレンジしました。
デプロイ編②までとりあえず進めることができました。
自分の設定したElastic IP(IPv4 パブリック IP)にアクセスしたところ
このサイトにアクセスできません。~~~で接続が拒否されました。
と表示されました。
元記事の情報量が多いため質問のための情報も多く記載することになりますが、よろしくお願いします。
調べたこと、試したこと
・Nginx
まず最初にNginxがec2インスタンス内で起動できているを確認しました。
#SSHでEC2インスタンスに接続 ps ax | grep nginx >>> 25575 ? Ss 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf 26853 ? S 0:00 nginx: worker process
master, wokerを確認できたので起動はしていると考えています。
次にcurlコマンドを使って応答があるかを確認しました。
$ curl https://IPアドレス/ curl: (7) Failed to connect to IP アドレス port 443: Connection timed out
応答には失敗しています。
次にブラウザから直接確認してみました。
冒頭にも記述しましたがElastic IP(IPv4 パブリック IP)にアクセスしたところ
このサイトにアクセスできません。~~~で接続が拒否されました。
と表示されました。
また、パブリックDNS(IPv4) ec2-~~~compute.amazonaws.comでアクセスしたところ
と表示されました。
Nginxのエラーログを確認したところ、このようなログが出力されていました。
# /var/www/rails/play_with/log/nginx.error.log 2019/10/08 07:08:56 [crit] 25232#0: *1 connect() to unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock failed (2: No such file or directory) while connecting to upstream, client: IPアドレス, server: iPアドレス, request: "GET / HTTP/1.1", upstream: "http://unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock:/", host: "Elastic IP(IPv4 パブリック IP)" 2019/10/08 07:14:22 [error] 25358#0: *6 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: IPアドレス, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "ec2-ap-northeast-1.compute.amazonaws.com", referrer: "http://ec2-ap-northeast-1.compute.amazonaws.com/" 2019/10/08 10:13:13 [error] 26853#0: *2 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: iPアドレス, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "ec2-ap-northeast-1.compute.amazonaws.com"
一行目のエラーは.unicorn.sockが読みこめていないようです。
#.unicorn.sockが存在しているか確認 ls -la /var/www/rails/play_with/tmp/sockets/ >>> srwxrwxrwx 1 mashio mashio 0 Oct 8 12:06 .unicorn.sock
ファイルは存在していますが、読み込めていないようです。
同じ状況で解決された方がいないか調べてみましたが、CentOSの方しか見つけることができませんでした。
(参考にさせて頂いた記事と同じAMIである、Amazon Linuxを使用)
・unicorn
unicornに関して起動確認、ログ確認を記載させていただきます。
ps -ef | grep unicorn | grep -v grep >>>mashio 27744 1 0 12:06 ? 00:00:02 unicorn_rails master -c /var/www/rails/play_with/config/unicorn.conf.rb -D -E production mashio 27749 27744 0 12:06 ? 00:00:00 unicorn_rails worker[0] -c /var/www/rails/play_with/config/unicorn.conf.rb -D -E production mashio 27751 27744 0 12:06 ? 00:00:00 unicorn_rails worker[1] -c /var/www/rails/play_with/config/unicorn.conf.rb -D -E production
起動は確認できました。
# /var/www/rails/play_with/log/unicorn.log >>>I, [2019-10-08T09:06:18.972221 #26577] INFO -- : Refreshing Gem list I, [2019-10-08T09:06:21.063404 #26577] INFO -- : listening on addr=/var/www/rails/play_with/tmp/sockets/unicorn.sock fd=11 I, [2019-10-08T09:06:21.069533 #26577] INFO -- : master process ready I, [2019-10-08T09:06:21.073400 #26582] INFO -- : worker=0 ready I, [2019-10-08T09:06:21.074532 #26584] INFO -- : worker=1 ready I, [2019-10-08T09:12:07.734052 #26577] INFO -- : reaped #<Process::Status: pid 26582 exit 0> worker=0 I, [2019-10-08T09:12:07.734169 #26577] INFO -- : reaped #<Process::Status: pid 26584 exit 0> worker=1 I, [2019-10-08T09:12:07.734232 #26577] INFO -- : master complete
記事をもとに作成したconfig/unicorn.conf.rb
ruby
1# set lets 2 $worker = 2 3 $timeout = 30 4 $app_dir = "/var/www/rails/play_with" #自分のアプリケーション名 5 $listen = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir 6 $pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir 7 #$listen = File.expand_path "/var/run/.unicorn.sock" 8 #$pid = File.expand_path "/var/run/unicorn.pid" 9 $std_log = File.expand_path 'log/unicorn.log', $app_dir 10 # set config 11 worker_processes $worker 12 working_directory $app_dir 13 stderr_path $std_log 14 stdout_path $std_log 15 timeout $timeout 16 listen $listen 17 pid $pid 18 # loading booster 19 preload_app true 20 # before starting processes 21 before_fork do |server, worker| 22 defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! 23 old_pid = "#{server.config[:pid]}.oldbin" 24 if old_pid != server.pid 25 begin 26 Process.kill "QUIT", File.read(old_pid).to_i 27 rescue Errno::ENOENT, Errno::ESRCH 28 end 29 end 30 end 31 # after finishing processes 32 after_fork do |server, worker| 33 defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection 34 end
記事をもとに作成した/etc/nginx/conf.d/play_with.conf
error_log /var/www/rails/play_with/log/nginx.error.log; access_log /var/www/rails/play_with/log/nginx.access.log; # max body size client_max_body_size 2G; upstream app_server { # for UNIX domain socket setups server unix:/var/www/rails/play_with/tmp/sockets/.unicorn.sock fail_timeout=0; } server { listen 80; server_name ; Elastic IP(IPv4 パブリック IP) # nginx so increasing this is generally safe... keepalive_timeout 5; # path for static files root /var/www/rails/play_with/public; # page cache loading try_files $uri/index.html $uri.html $uri @app; location @app { # 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://app_server; } # Rails error pages error_page 500 502 503 504 /500.html; location = /500.html { root /var/www/rails/play_with/public; } }
教えていただきたいこと
・.unicorn.sockを読み込めるようにするにはどうしたらよいか
・動作確認するべきファイル、確認方法
羅列的になり読みにくいかと思いますがよろしくお願いします。
ソースコードは参考にさせて頂いた記事と同じです。(異なっている点は、IPアドレス、アプリ名)
他に、ログ、ソースなど必要でしたらコメントお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。