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

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

新規登録して質問してみよう
ただいま回答率
86.12%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

解決済

nginxとpumaの接続が上手く行かないので解決したい (2: No such file or directory)

senseIY
senseIY

総合スコア277

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

1回答

0リアクション

0クリップ

494閲覧

投稿2022/08/26 01:31

編集2022/08/26 03:06

前提

現在こちらのサイトを参考にdocker-compose を使用してバックエンド側(Rails7系 APIモード)とフロントエンド側(React TypeScript)で開発したポートフォリオをAWSにデプロイしようとしています。現在サイトの通りに、一旦ローカル環境でRailsが本番環境で正常に作動するかチェックをしています。しかし、コンテナを起動すると以下のエラーが発生してしまいます。

発生している問題・エラーメッセージ(nginxコンテナで発生)

yml

web_1 | 2022/08/26 00:46:25 [crit] 7#7: *1 connect() to unix:///myapp/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 172.25.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://unix:///myapp/tmp/sockets/puma.sock:/", host: "localhost" web_1 | 2022/08/26 00:46:25 [crit] 7#7: *1 connect() to unix:///myapp/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 172.25.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://unix:///myapp/tmp/sockets/puma.sock:/500.html", host: "localhost" web_1 | 172.25.0.1 - - [26/Aug/2022:00:46:25 +0000] "GET / HTTP/1.1" 502 559 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" web_1 | 2022/08/26 00:46:25 [crit] 7#7: *1 connect() to unix:///myapp/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 172.25.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:///myapp/tmp/sockets/puma.sock:/favicon.ico", host: "localhost", referrer: "http://localhost/" web_1 | 2022/08/26 00:46:25 [crit] 7#7: *1 connect() to unix:///myapp/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 172.25.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:///myapp/tmp/sockets/puma.sock:/500.html", host: "localhost", referrer: "http://localhost/" web_1 | 172.25.0.1 - - [26/Aug/2022:00:46:25 +0000] "GET /favicon.ico HTTP/1.1" 502 559 "http://localhost/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36"

docker-compose.production.yml

yml

version: "3.3" services: api: build: context: ./backend/ dockerfile: Dockerfile command: bash -c "rm -f tmp/pids/server.pid && bundle exec puma -C config/puma.rb -e production" volumes: - ./backend:/myapp - ./backend/vendor/bundle:/myapp/vendor/bundle environment: TZ: Asia/Tokyo RAILS_ENV: development # ports: # - "3001:3000" depends_on: - db stdin_open: true tty: true env_file: - .env user: root front: build: context: ./frontend/ dockerfile: Dockerfile volumes: - ./frontend/app:/usr/src/app command: sh -c "yarn && yarn start" ports: - "4000:3000" environment: - WDS_SOCKET_PORT=0 db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} command: --default-authentication-plugin=mysql_native_password volumes: - mysql-data:/var/lib/mysql - /tmp/dockerdir:/etc/mysql/conf.d/ ports: - "3306:3306" cap_add: - SYS_NICE web: build: context: backend/containers/nginx volumes: - public-data:/myapp/public - tmp-data:/myapp/tmp ports: - 80:80 depends_on: - api volumes: db: driver: local public-data: tmp-data: log-data: mysql-data:

config/puma.rb

rb

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i threads threads_count, threads_count port ENV.fetch("PORT") { 3000 } environment ENV.fetch("RAILS_ENV") { "development" } plugin :tmp_restart app_root = File.expand_path("../..", __FILE__) # bind "unix:#{app_root}/tmp/sockets/puma.sock" bind "unix://#{app_root}/tmp/sockets/puma.sock" stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true

nginx.conf

json

# プロキシ先の指定 # Nginxが受け取ったリクエストをバックエンドのpumaに送信 upstream myapp { # ソケット通信したいのでpuma.sockを指定 # server unix:/myapp/tmp/sockets/puma.sock; server unix:///myapp/tmp/sockets/puma.sock; } server { listen 80; # ドメインもしくはIPを指定 server_name localhost; # server_name .*; 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; } }

試したこと

・まず、エラーの通り/myapp/tmp/sockets/puma.sockファイルがないのだと思い、以下を試しました。

1 パスの確認

 このサイトを参考に進めました。私の場合、docker-compose で同じサーバ(EC2インスタンス)上で同時にrailsとnginxを立ち上げるため、「1. WEB/APサーバが一体化された構成」というのが当てはまりそうです。
「上記の設定後はrails server起動時にsockファイルがlistenされるようになります。」とあるようにpuma.rbを設定後railsコンテナは

yml

api_1 | Puma starting in single mode... api_1 | * Puma version: 5.6.4 (ruby 3.1.2-p20) ("Birdie's Version") api_1 | * Min threads: 5 api_1 | * Max threads: 5 api_1 | * Environment: production api_1 | * PID: 1 api_1 | * Listening on http://0.0.0.0:3000 api_1 | * Listening on unix:///myapp/tmp/sockets/puma.sock api_1 | Use Ctrl-C to stop

となっているので正常に動作してそうです。
しかし、connect() to unix:///myapp/tmp/sockets/puma.sock failed (2: No such file or directory)というエラーがnginx側で出ています。

yml

$docker-compose -f docker-compose.production.yml exec web nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

となっているので恐らくnginxは起動はしています。

2なぜかファイルエラーが起きるので再度作成

イメージ説明
このように、puma.sockがvscodeで開けないようです。一度消して再度作り直した(pumaにより強制的に作られる)のですがこうなってしまいます。これは仕様でしょうか。

3 myappディレクトリが何なのかよくわからない

 私のディレクトリにはmyappというディレクトリは存在しません。appならあります。ですが、

rb

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

puma.rbにあるこの部分でパスを生成しているので合っている?と思われます。
・何かしらアドバイスがあればよろしくお願いいたします。不備があれば追記いたします。

追記

bind "unix://#{app_root}/backend/tmp/sockets/puma.sock" bind "unix:/backend/tmp/sockets/puma.sock"

puma.rb nginx.confのパスをそれぞれ書き換えましたが、今度は

bundler: failed to load command: puma (/usr/local/bundle/bin/puma)

というエラーでディレクトリやファイルが見つからないというエラーが起きました。
また、この記事を参考に

puma.rb

rb

bind "unix:#{app_root}/tmp/sockets/puma.sock"

nginx.conf

conf

upstream myapp { # ソケット通信したいのでpuma.sockを指定 server unix:/myapp/tmp/sockets/puma.sock; # server unix:///myapp/tmp/sockets/puma.sock; }

このように書き換え、再度ビルドしましたが

connect() to unix:/myapp/tmp/sockets/puma.sock failed (2: No such file or directory)

となってしまいます。どうすればいいのでしょうか。

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。