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

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

新規登録して質問してみよう
ただいま回答率
85.48%
nginx

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

Ruby on Rails

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

Docker

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

AWS(Amazon Web Services)

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

Q&A

解決済

1回答

4064閲覧

ECSインスタンス(Nginx,Railsコンテナ)にアクセスすると、「502 Bad Gateway」という表示が出ます。

rubicon44

総合スコア4

nginx

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

Ruby on Rails

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

Docker

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

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2020/03/06 05:07

前提

【ローカル開発環境】
ローカルでDockerを用いて、
WebサーバーにNginx、バックエンドにRailsを用いて、PumaとNginxをソケット通信させ開発を行っております。

※ローカルの開発環境では、PumaとNginxの通信はできております。

【AWS本番環境】
ECRにRailsとNginxのイメージをPushし、ECSでコンテナを起動させました。

※ECSのタスク定義で、Railsコンテナのポートに「host:未設定,コンテナ:未設定」、Nginxコンテナのポートに「host:80,コンテナ:80」を設定

※Nginxコンテナのネットワーク設定の「リンク」で、「grow-rails:grow-rails」と入力し、PumaとNginxとを連携

エラー内容・解決したいこと

起動したECSインスタンスのパブリックDNSにアクセスすると、「502 Bad Gateway」という表示が出ました。

どなたか解決方法を教えてくださいましたら幸いです。
よろしくお願いいたします。

試したこと

  • nginx.confの「servername」をECSコンテナのDNS名に変更したがエラーは解消されず

  • 稼働しているECSインスタンス内のNginxコンテナにssh接続し、Nginxのアクセスログ・エラーログを確認したが何も出力されなかった

開発環境構成図(初期フォルダ・ファイル)

.
├── containers
│ └── nginx
│ └── Dockerfile
│ └── nginx.conf

└── docker-compose.yml
└── Dockerfile
└── Gemfile
└── Gemfile.lock

ソースコード

【Dockerfile(Rails用)】 FROM ruby:2.6.0 RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && apt-get update -qq && apt-get install -y build-essential nodejs npm RUN apt-get update && apt-get install -y curl apt-transport-https wget && 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 && apt-get update && apt-get install -y yarn RUN mkdir /grow-rails ENV APP_ROOT /grow-rails WORKDIR $APP_ROOT COPY ./Gemfile $APP_ROOT/Gemfile COPY ./Gemfile.lock $APP_ROOT/Gemfile.lock RUN bundle install COPY . $APP_ROOT RUN mkdir -p tmp/sockets tmp/pids VOLUME /grow-rails/public VOLUME /grow-rails/tmp EXPOSE 3000 CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]
【Dockerfile(Nginx)】 FROM nginx:1.15.8 RUN rm -f /etc/nginx/conf.d/* COPY nginx.conf /etc/nginx/conf.d/grow-rails.conf CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf EXPOSE 80
【nginx.conf】 upstream grow-rails { server unix:///grow-rails/tmp/sockets/puma.sock; } server { listen 80; server_name localhost; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; root /grow-rails/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 @grow-rails; keepalive_timeout 5; location @grow-rails { 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://grow-rails; } }
【docker-compose.yml】 version: "3" services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 任意のパスワード MYSQL_USER: 任意のユーザー名 volumes: - db-data:/var/lib/mysql ports: - "3306:3306" app: build: . command: bundle exec puma -C config/puma.rb volumes: - .:/grow-rails - public-data:/grow-rails/public - tmp-data:/grow-rails/tmp - log-data:/grow-rails/log ports: - "3000:3000" links: - db tty: true stdin_open: true web: build: context: containers/nginx volumes: - public-data:/grow-rails/public - tmp-data:/grow-rails/tmp ports: - 80:80 depends_on: - app volumes: public-data: tmp-data: log-data: db-data:

補足情報(FW/ツールのバージョンなど)

【開発環境】
ruby:2.6
Rails:5.2.4.1
nginx:1.15.8

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

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

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

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

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

yu_1985

2020/03/06 05:43

Dockerfileでボリュームマウントしていますが、きちんとボリュームマウントできているのか、またマウントできているのならそこに必要なソースは配置されていますか? ファイルのツリー一覧にRailsのソースが含まれていないのが気になります。
rubicon44

2020/03/06 06:14

ご回答ありがとうございます。 ファイルツリー一覧は、開発環境でコンテナを立ち上げる前の”初期フォルダ・ファイル構成”です。 開発環境でコンテナを立ち上げた際、ECSでEC2コンテナを立ち上げた際には、しっかりとRailsのソースは含まれております。 わかりづらくて申し訳ございません!
guest

回答1

0

自己解決

ECSのタスク定義で、RailsコンテナとNginxコンテナのリンク設定、NginxコンテナがRailsコンテナ内を参照できるボリューム設定がしっかりとできていませんでした。

docker-compose.ymlファイルの内容を、ECSのタスク定義へしっかりと反映しきれていなかったことが原因です。
Dockerコンテナ・ボリュームに関してしっかりと理解すべきだと実感しました。

投稿2020/03/07 15:27

rubicon44

総合スコア4

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

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

cocoa-engineer

2020/08/08 02:38 編集

質問させていただいたのですが、自己解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問