前提・実現したいこと
ECS(fargate)
へデプロイ後にRailsアプリケーションを表示させたいと思い、現在実装を進めております。
その中で、ブラウザにアクセスした際に正常にRailsアプリケーションが表示されないためご相談させて下さい。
(ECS上へデプロイは完了済み。ビルドはCircleCI/CD
で実装)
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
現在発生しているエラー内容は、パブリックIPアドレス
やロードバランサーDNS名
でブラウザにアクセスすると下記のようなエラーが表示されます。
502 Bad Gateway nginx/1.19.1
また、ロードバランサー経由のドメインでブラウザにアクセスした際には、下記のようにアクセスできない状態になっています。
ECSタスク定義内のNginxコンテナのログの確認をしたところエラー内容が確認できました。
- nginxコンテナ(CloudWatch)
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: error: /etc/nginx/conf.d/default.conf differs from the packaged version /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/08/23 03:12:47 [crit] 28#28: *1 connect() to unix:///locat/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 10.0.10.162, server: locat-app.com, request: "GET / HTTP/1.1", upstream: "http://unix:///locat/tmp/sockets/puma.sock:/", host: "10.0.0.119" 2021/08/23 03:12:47 [crit] 28#28: *1 connect() to unix:///locat/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 10.0.10.162, server: locat-app.com, request: "GET / HTTP/1.1", upstream: "http://unix:///locat/tmp/sockets/puma.sock:/500.html", host: "10.0.0.119" 10.0.10.162 - - [23/Aug/2021:03:12:47 +0000] "GET / HTTP/1.1" 502 157 "-" "ELB-HealthChecker/2.0" "-" 2021/08/23 03:12:48 [crit] 28#28: *4 connect() to unix:///locat/tmp/sockets/puma.sock failed (2: No such file or directory) while connecting to upstream, client: 10.0.1.4, server: locat-app.com, request: "GET / HTTP/1.1", upstream: "http://unix:///locat/tmp/sockets/puma.sock:/", host: "10.0.0.119"
該当のソースコード
- nginx/Dockerfile
FROM nginx:1.19.1 RUN apt-get update && \ apt-get install -y apt-utils \ locales && \ sed -i -e 's/# ja_JP.UTF-8/ja_JP.UTF-8/g' /etc/locale.gen && \ locale-gen ja_JP.UTF-8 ENV LANG ja_JP.UTF-8 ENV LC_TIME C ADD ./nginx/nginx.conf /etc/nginx/nginx.conf ADD ./nginx/default.conf /etc/nginx/conf.d/default.conf
- nginx/default.conf
upstream locat { server unix:///locat-app/tmp/sockets/puma.sock; } server { listen 80 default_server; server_name locat-app.com localhost; root /locat-app/public; try_files $uri/index.html $uri @locat; proxy_connect_timeout 600; proxy_read_timeout 600; proxy_send_timeout 600; client_max_body_size 100m; error_page 404 /404.html; error_page 505 502 503 504 /500.html; location @locat { 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://locat; } }
- nginx/nginx.conf
user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 600; include /etc/nginx/conf.d/*.conf; }
- prod.Dockerfile
FROM ruby:3.0.1 #ENV LANG C.UTF-8 RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn RUN mkdir /locat-app WORKDIR /locat-app COPY Gemfile /locat-app/Gemfile COPY Gemfile.lock /locat-app/Gemfile.lock RUN gem install bundler -v 2.2.24 RUN bundle install ADD . /locat-app COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] # Nginxと通信を行うための準備 RUN mkdir -p tmp/sockets RUN mkdir -p tmp/pids VOLUME /locat-app/public VOLUME /locat-app/tmp #RUN yarn install --check-files #RUN SECRET_KEY_BASE=placeholder bundle exec rails assets:precompile CMD bash -c "rm -f tmp/pids/server.pid && bundle exec pumactl start"
試したこと
-
こちらの記事を参考にしたところ、sockファイルの設定方法に誤りがあることがわかったのですが、nginxのsockファイルをどのように修正すればいいのかわからない状態です。
-
おそらく
niginx/default.conf
に設定しているserverの部分を修正すれば解決できそうな気がしますが、どの部分に合わせて接続先の修正をすればいいのでしょうか?、
補足情報(FW/ツールのバージョンなど)
- rubymine
- ruby(3.0.1)
- Ruby on rails (6.1.3.1)
- Docker (20.10.7)
- AWS (VPC/ECS Fargate/ECR/RDS/S3/ALB/ACM/Route53)
- Github
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。