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

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

新規登録して質問してみよう
ただいま回答率
85.50%
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つです

Q&A

解決済

1回答

1691閲覧

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

otdsh9432

総合スコア55

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つです

0グッド

0クリップ

投稿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

1# プロキシ先の指定 2# Nginxが受け取ったリクエストをバックエンドのpumaに送信 3upstream myapp { 4 # ソケット通信したいのでpuma.sockを指定 5 server unix:///myapp/tmp/sockets/puma.sock; 6} 7 8server { 9 10 listen 80; 11 # ドメインもしくはIPを指定 12 server_name 192.168.99.100; 13 14 access_log /var/log/nginx/access.log; 15 error_log /var/log/nginx/error.log; 16 17 # ドキュメントルートの指定 18 root /app/public; 19 20 client_max_body_size 100m; 21 error_page 404 /404.html; 22 error_page 505 502 503 504 /500.html; 23 try_files $uri/index.html $uri @myapp; 24 keepalive_timeout 5; 25 26 # リバースプロキシ関連の設定 27 location @myapp { 28 proxy_set_header X-Real-IP $remote_addr; 29 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 30 proxy_set_header Host $http_host; 31 proxy_pass http://myapp; 32 } 33 34} 35 36# エラーを受けて追加したが動作変わらず(2020/6/17) 37worker_rlimit_nofile 83000; 38 39events { 40 worker_connections 4096; # 1つのworkerプロセスが開ける最大コネクション数 41}

docker-compose.yml

yml

1version: '3' 2services: 3 db: 4 (他情報は略) 5 volumes: 6 - db-volume:/var/lib/mysql 7 ports: 8 - "3306:3306" 9 test-db: 10 image: mysql:5.7 11 environment: 12 (他情報は略) 13 ports: 14 - '3307:3306' # ローカルPCから接続するために設定 15 app: 16 build: 17 context: . 18 dockerfile: ./docker/rails/Dockerfile 19 command: bundle exec pumactl start 20 tty: true 21 stdin_open: true 22 volumes: 23 - .:/myapp 24 - public-data:/myapp/public 25 - tmp-data:/myapp/tmp 26 - log-data:/myapp/log 27 - sockets:/myapp/tmp/sockets 28 privileged: true 29 depends_on: 30 - db 31 web: 32 build: 33 context: . 34 dockerfile: ./docker/nginx/Dockerfile 35 ports: 36 - '80:80' 37 volumes: 38 - public-data:/myapp/public 39 - tmp-data:/myapp/tmp 40 - sockets:/myapp/tmp/sockets 41 depends_on: 42 - app 43volumes: 44 db-volume: 45 public-data: 46 tmp-data: 47 log-data: 48 sockets:

Puma.rbの内容

ruby

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

NginxのDockerfile

Dockerfile

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

railsのDockerfile

Dockerfile

1FROM ruby:2.6.5 2# apt-utils関連のエラーを表示させないようにする 3ENV DEBCONF_NOWARNINGS yes 4RUN apt-get update -qq && \ 5 apt-get install -y --no-install-recommends build-essential \ 6 libpq-dev \ 7 nodejs \ 8 && rm -rf /var/lib/apt/lists/* 9 10# 作業ディレクトリの作成、設定 11RUN mkdir /myapp 12WORKDIR /myapp 13 14# ホスト側(ローカル)のGemfileを追加する 15COPY Gemfile /myapp/Gemfile 16COPY Gemfile.lock /myapp/Gemfile.lock 17 18# Gemfileのbundle install 19RUN bundle install 20COPY . /myapp 21RUN mkdir -p tmp/sockets 22 23# Expose volumes to frontend 24VOLUME /app/public 25VOLUME /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/

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この nginx.conf では正常に動作しないと思います.
worker_rlimit_nofile は設定ファイルのトップレベルに記載すべき項目(参考→ context: main)ですが,
実際には /etc/nginx/nginx.conf の httpディレクティブにincludeされているので.

ビルドしたdockerイメージに設定が反映されていないのではないでしょうか.
nginx.confを書き換えた後はdocker-compose build等でイメージビルドし直していますか?

投稿2020/06/18 00:24

thaim

総合スコア175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otdsh9432

2020/06/18 10:50

ご回答いただきありがとうございます。 ディレクティブを考慮できておりませんでした。worker_rlimit_nofileを削除し、 イメージビルドし直したところ、正常にブラウザでアクセスすることができました。 nginx.confはビルドと関係ないと思ってしまっていたため、ビルドしたdockerイメージに設定が反映されていないことが原因でした。ご指摘誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問