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

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

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

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

nginx

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

解決済

【Nginx】Nginx+Railsコンテナでdocker-composeしてブラウザでアクセスすると500の内部サーバエラーが出る

otdsh9432
otdsh9432

総合スコア51

docker-compose

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

nginx

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

1回答

0評価

0クリップ

407閲覧

投稿2020/06/17 14:50

編集2020/06/18 00:04

実現したいこと

docker-composeで立ち上げたRailsアプリに、ブラウザからアクセスする。

解決したい事象

下記のコンテナ構成でdocker-compose upでコンテナを立ち上げました。

  • APサーバ:Rails
  • Webサーバ:Nginx
  • DBサーバ:MySQL

そして、docker-compose upではエラーが出なかったので、ブラウザでアプリへアクセスしたところ、下記のエラー画面(500 Internal Server Error)が表示され、アプリの画面が正常に表示できません。
何が原因として考えられるか、また解決方法についてお伺いしたい次第です。
イメージ説明

なお、先日までは、「Rails」+「MySQL」という構成でDockerを使用しており(Nginxなし)、
その際は問題なくアプリの画面が表示できていました。
この度、Nginxを使用したいと思い、Nginxのコンテナも追加しました。

試したこと

サーバ側のエラーメッセージに
「worker_connections are not enough while connecting to upstream」
とあったので、その内容を調査し、下記のQiita記事の内容から、
worker_connectionsを増加させる記述をNginx設定ファイル(nginx.conf)へ行いました。
しかし、事象・エラーメッセージ共に変化せずでした。
[Nginx]worker_connectionsとworker_rlimit_nofileの値は何がいいのか?

現在、nginx.confの内容に原因があるのではと推測し、
エラーメッセージで検索し、調査を続けているところですが、
並行してご質問させていただきました。

サーバ側エラーメッセージ

イメージ説明

nginx.conf

conf

# プロキシ先の指定 # Nginxが受け取ったリクエストをバックエンドのpumaに送信 upstream myapp { # ソケット通信したいのでpuma.sockを指定 server unix:///myapp/tmp/sockets/puma.sock; } server { listen 80; # ドメインもしくはIPを指定 server_name 192.168.99.100; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # ドキュメントルートの指定 root /app/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; } } # エラーを受けて追加したが動作変わらず(2020/6/17) worker_rlimit_nofile 83000; events { worker_connections 4096; # 1つのworkerプロセスが開ける最大コネクション数 }

docker-compose.yml

yml

version: '3' services: db: (他情報は略) volumes: - db-volume:/var/lib/mysql ports: - "3306:3306" test-db: image: mysql:5.7 environment: (他情報は略) ports: - '3307:3306' # ローカルPCから接続するために設定 app: build: context: . dockerfile: ./docker/rails/Dockerfile command: bundle exec pumactl start tty: true stdin_open: true volumes: - .:/myapp - public-data:/myapp/public - tmp-data:/myapp/tmp - log-data:/myapp/log - sockets:/myapp/tmp/sockets privileged: true depends_on: - db web: build: context: . dockerfile: ./docker/nginx/Dockerfile ports: - '80:80' volumes: - public-data:/myapp/public - tmp-data:/myapp/tmp - sockets:/myapp/tmp/sockets depends_on: - app volumes: db-volume: public-data: tmp-data: log-data: sockets:

Puma.rbの内容

ruby

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" stdout_redirect "#{app_root}/log/puma.stdout.log", "#{app_root}/log/puma.stderr.log", true

NginxのDockerfile

Dockerfile

FROM nginx # インクルード用のディレクトリ内を削除 RUN rm -f /etc/nginx/conf.d/* # Nginxの設定ファイルをコンテナにコピー COPY nginx.conf /etc/nginx/conf.d/myapp.conf # ビルド完了後にNginxを起動 CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

railsのDockerfile

Dockerfile

FROM ruby:2.6.5 # apt-utils関連のエラーを表示させないようにする ENV DEBCONF_NOWARNINGS yes RUN apt-get update -qq && \ apt-get install -y --no-install-recommends build-essential \ libpq-dev \ nodejs \ && rm -rf /var/lib/apt/lists/* # 作業ディレクトリの作成、設定 RUN mkdir /myapp WORKDIR /myapp # ホスト側(ローカル)のGemfileを追加する COPY Gemfile /myapp/Gemfile COPY Gemfile.lock /myapp/Gemfile.lock # Gemfileのbundle install RUN bundle install COPY . /myapp RUN mkdir -p tmp/sockets # Expose volumes to frontend VOLUME /app/public VOLUME /app/tmp

ディレクトリ構成

app/ bin/ config/ -puma.rb (ほかは省略) core db/ docker/  -nginx/ -Dockerfile -nginx.conf -rails/ -Dockerfile docker-compose.yml Gemfile Gemfile.lock lib/ log/ nginx/ package.json public/ Rakefile README.md spec/ storage/ tmp/  -sockets/ -pids/ (他は省略) vendor/

不足情報等ございましたら、お手数をお掛けし恐縮ではございますが、
ご指摘いただけますと幸いです。

何卒宜しくお願い致します。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

docker-compose

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

nginx

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです