前提・実現したいこと
ecs on fargateでnginxとpuma.sockが連携できず、困っています。
ローカルではpuma.sockも作成され、アプリに正常にアクセスできているので、ECSでの設定の不足かと思っています。
1つのタスク定義でrailsコンテナとnginxコンテナを追加しており、nginxコンテナではボリュームソースでrailsコンテナをソースコンテナとして設定し、puma.sockが参照できるようにしています。
また、nginxコンテナを追加する前の構成でECSでアプリに正常にアクセスできることは確認済みになります。
発生している問題・エラーメッセージ
ECSの管理画面のログで下記のログが出力されている状態です。
nginxコンテナ
unix:///myapp/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 10.0.2.97, server: localhost, request: "GET / HTTP/1.1", upstream: "http://unix:///myapp/tmp/sockets/puma.sock:/", host: "10.0.2.219"
railsコンテナ
2020-07-14 19:10:48* Listening on unix:///myapp/tmp/sockets/puma.sock 2020-07-14 19:10:48Use Ctrl-C to stop 2020-07-14 19:10:48Puma starting in single mode... 2020-07-14 19:10:48* Version 4.3.5 (ruby 2.7.1-p83), codename: Mysterious Traveller 2020-07-14 19:10:48* Min threads: 5, max threads: 5 2020-07-14 19:10:48* Environment: production 2020-07-14 19:10:43=> Booting Puma 2020-07-14 19:10:43=> Rails 6.0.3.1 application starting in production 2020-07-14 19:10:43=> Run `rails server --help` for more startup options
該当のソースコード
puma..rb
1# Puma can serve each request in a thread from an internal thread pool. 2# The `threads` method setting takes two numbers: a minimum and maximum. 3# Any libraries that use thread pools should be configured to match 4# the maximum value specified for Puma. Default is set to 5 threads for minimum 5# and maximum; this matches the default thread size of Active Record. 6# 7max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } 8min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } 9threads min_threads_count, max_threads_count 10 11# Specifies the `port` that Puma will listen on to receive requests; default is 3000. 12# 13# ポートでのlistenは不要なのでコメントアウト 14#port ENV.fetch("PORT") { 3000 } 15 16# Specifies the `environment` that Puma will run in. 17# 18environment ENV.fetch("RAILS_ENV") { "development" } 19 20# Specifies the `pidfile` that Puma will use. 21pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" } 22 23# Specifies the number of `workers` to boot in clustered mode. 24# Workers are forked web server processes. If using threads and workers together 25# the concurrency of the application would be max `threads` * `workers`. 26# Workers do not work on JRuby or Windows (both of which do not support 27# processes). 28# 29# workers ENV.fetch("WEB_CONCURRENCY") { 2 } 30 31# Use the `preload_app!` method when specifying a `workers` number. 32# This directive tells Puma to first boot the application and load code 33# before forking the application. This takes advantage of Copy On Write 34# process behavior so workers use less memory. 35# 36# preload_app! 37 38# Allow puma to be restarted by `rails restart` command. 39plugin :tmp_restart 40 41app_root = File.expand_path("../..", __FILE__) 42bind "unix://#{app_root}/tmp/sockets/puma.sock" 43 44stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
nginx.conf
1# プロキシ先の指定 2# Nginxが受け取ったリクエストをバックエンドのpumaに送信 3upstream myapp { 4 # ソケット通信したいのでpuma.sockを指定 5 server unix:///myapp/tmp/sockets/puma.sock; 6} 7 8# httpでのアクセスはhttpsにリダイレクトさせる 9#server { 10# listen 80; 11# server_name _; 12# return 301 https://$host$request_uri; 13#} 14 15server { 16 # ポート443をリスン 17 listen 80; 18 # ドメインもしくはIPを指定 19 server_name localhost; 20 21 access_log /var/log/nginx/access.log; 22 error_log /var/log/nginx/error.log; 23 24 # ドキュメントルートの指定 25 root /myapp/public; 26 27 client_max_body_size 100m; 28 error_page 404 /404.html; 29 error_page 505 502 503 504 /500.html; 30 try_files $uri/index.html $uri @myapp; 31 keepalive_timeout 5; 32 33 # リバースプロキシ関連の設定 34 location @myapp { 35 proxy_set_header X-Real-IP $remote_addr; 36 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 37 proxy_set_header Host $http_host; 38 proxy_pass http://myapp; 39 } 40}
試したこと
ローカルではpuma.sockが作成され、アプリにアクセスできることを確認ずみ
ECSではpuma.sockが作成されてない
補足情報(FW/ツールのバージョンなど)
ECS on Fargate(rails6)
nginx
puma
あなたの回答
tips
プレビュー