実現したいこと
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/
不足情報等ございましたら、お手数をお掛けし恐縮ではございますが、
ご指摘いただけますと幸いです。
何卒宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/18 10:50