質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.91%

ECS on Fargateでnginxとpumaの連携ができない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 270

koichi8888

score 24

前提・実現したいこと

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 can serve each request in a thread from an internal thread pool.
# The `threads` method setting takes two numbers: a minimum and maximum.
# Any libraries that use thread pools should be configured to match
# the maximum value specified for Puma. Default is set to 5 threads for minimum
# and maximum; this matches the default thread size of Active Record.
#
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count

# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
#
# ポートでのlistenは不要なのでコメントアウト
#port        ENV.fetch("PORT") { 3000 }

# Specifies the `environment` that Puma will run in.
#
environment ENV.fetch("RAILS_ENV") { "development" }

# Specifies the `pidfile` that Puma will use.
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }

# Specifies the number of `workers` to boot in clustered mode.
# Workers are forked web server processes. If using threads and workers together
# the concurrency of the application would be max `threads` * `workers`.
# Workers do not work on JRuby or Windows (both of which do not support
# processes).
#
# workers ENV.fetch("WEB_CONCURRENCY") { 2 }

# Use the `preload_app!` method when specifying a `workers` number.
# This directive tells Puma to first boot the application and load code
# before forking the application. This takes advantage of Copy On Write
# process behavior so workers use less memory.
#
# preload_app!

# Allow puma to be restarted by `rails restart` command.
plugin :tmp_restart

app_root = File.expand_path("../..", __FILE__)
bind "unix://#{app_root}/tmp/sockets/puma.sock"

stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true
# プロキシ先の指定
# Nginxが受け取ったリクエストをバックエンドのpumaに送信
upstream myapp {
  # ソケット通信したいのでpuma.sockを指定
  server unix:///myapp/tmp/sockets/puma.sock;
}

# httpでのアクセスはhttpsにリダイレクトさせる
#server {
#  listen 80;
#  server_name  _;
#  return 301 https://$host$request_uri;
#}

server {
  # ポート443をリスン
  listen 80;
  # ドメインもしくはIPを指定
  server_name localhost;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  # ドキュメントルートの指定
  root /myapp/public;

  client_max_body_size 100m;
  error_page 404             /404.html;
  error_page 505 502 503 504 /500.html;
  try_files  $uri/index.html $uri @myapp;
  keepalive_timeout 5;

  # リバースプロキシ関連の設定
  location @myapp {
    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://myapp;
  }
}

試したこと

ローカルではpuma.sockが作成され、アプリにアクセスできることを確認ずみ
ECSではpuma.sockが作成されてない

補足情報(FW/ツールのバージョンなど)

ECS on Fargate(rails6)
nginx
puma

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る