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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby on Rails 6

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

nginx

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

AWS(Amazon Web Services)

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

解決済

Dockerで開発したRailsコンテナ, NginxをAWS EC2にデプロイしてRDS MySQLに接続したい。

taig
taig

総合スコア3

Ruby on Rails 6

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

nginx

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

AWS(Amazon Web Services)

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

2回答

0評価

1クリップ

891閲覧

投稿2021/12/10 05:27

編集2021/12/10 06:32

Dockerで開発したappコンテナ(railsアプリケーション)と、webコンテナ(Nginx)をAWS EC2にデプロイしてRDS MySQLに接続したいと考えています。

以下のリンクを参考にして、AWSの設定や、Dockerでの開発を行いました。
リンク

自身のローカルで動かした場合には正しく動いていたのですが、AWSにデプロイする作業のときに上手く動かなかったため、質問させていただきます.

.env等gitignoreに含まれるファイルの転送やDBの作成、migrateを行ったあと、
http://ipアドレス にアクセスしたところ、ERR_CONNECTION_TIMED_OUTとなってしまいます。

EC2からRDSのMySQLに接続したところ、テーブルは作成されていたため、問題ないと考えています。
また、webコンテナのログを確認したところ、アクセスログはついているため、
外部 → webコンテナ 問題なし
webコンテナ → appコンテナ の部分で問題が発生しているような気がします。

解決方法について、ご教示いただけますと幸いです。
宜しくお願い致します。

問題がありそうなファイルについては以下のようになっています。

#nginx.conf # プロキシ先の指定 # Nginxが受け取ったリクエストをバックエンドのpumaに送信 upstream myapp { # ソケット通信したいのでpuma.sockを指定 server unix:///myapp/tmp/sockets/puma.sock; } server { listen 80; # ドメインもしくはIPを指定 ローカル server_name IPアドレス;  #server_name localhost; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # ドキュメントルートの指定 root /myapp/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; } }
#puma.rb 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
#database.yml default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> # PasswordとUsernameはdocker-compose.ymlと合わせます username: root password: password host: db development: <<: *default database: myapp_development test: <<: *default database: myapp_test production: <<: *default database: <%= ENV['DB_DATABASE'] %> adapter: mysql2 encoding: utf8mb4 charset: utf8mb4 collation: utf8mb4_general_ci host: <%= ENV['DB_HOST'] %> username: <%= ENV['DB_USERNAME'] %> password: <%= ENV['DB_PASSWORD'] %>

Dockerfile

FROM ruby:2.7.1 # リポジトリを更新し依存モジュールをインストール RUN apt-get update -qq && \ apt-get install -y build-essential \ nodejs # yarnパッケージ管理ツールインストール 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 # Node.jsをインストール RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - && \ apt-get install -y nodejs # ルート直下にwebappという名前で作業ディレクトリを作成(コンテナ内のアプリケーションディレクトリ) RUN mkdir /myapp WORKDIR /myapp # ホストのGemfileとGemfile.lockをコンテナにコピー ADD Gemfile /myapp/Gemfile ADD Gemfile.lock /myapp/Gemfile.lock # bundle installの実行 RUN gem install bundler RUN bundle install # RUN bundle update # ホストのアプリケーションディレクトリ内をすべてコンテナにコピー ADD . /myapp # puma.sockを配置するディレクトリを作成 RUN mkdir -p tmp/sockets

Gemfile

source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } gem 'rails', '6.0.3' gem 'mysql2' gem 'aws-sdk-s3', '1.46.0', require: false gem 'image_processing', '1.9.3' gem 'mini_magick', '4.9.5' gem 'active_storage_validations', '0.8.2' gem 'bcrypt', '3.1.13' gem 'faker', '2.1.2' gem 'will_paginate', '3.1.8' gem 'bootstrap-will_paginate', '1.0.0' gem 'bootstrap-sass', '3.4.1' gem 'puma', '4.3.6' gem 'sassc', '2.1.0' gem 'sass-rails', '6' gem 'webpacker', '4.0.7' gem 'turbolinks', '5.2.0' gem 'jbuilder', '2.9.1' gem 'bootsnap', '1.4.5', require: false #API_KEYを環境変数として管理する(Keyを外部流出させないための措置) gem 'dotenv-rails' #アプリケーション内でHTTPリクエストを投げたい場合に使うクラス gem 'httpclient' group :development, :test do gem 'sqlite3', '1.4.1' gem 'byebug', '11.0.1', platforms: [:mri, :mingw, :x64_mingw] end group :development do gem 'web-console', '4.0.1' gem 'listen', '3.1.5' gem 'spring', '2.1.0' gem 'spring-watcher-listen', '2.0.1' end group :production do end

以下、タイムアウト時の画面
タイムアウト時の画面

# docker-compose.yml version: '3' services: app: build: context: . # ローカルと本番の切り替え command: bundle exec puma -C config/puma.rb -e production # command: bundle exec puma -C config/puma.rb # ======================== volumes: - .:/myapp - public-data:/myapp/public - tmp-data:/myapp/tmp - log-data:/myapp/log networks: - myapp-network # ローカルの場合はコメントアウトを解除 # depends_on: # - db # db: # image: mysql:5.7 # environment: # MYSQL_ROOT_PASSWORD: password # MYSQL_USER: user # MYSQL_PASSWORD: password # MYSQL_DATABASE: myapp_development # volumes: # - db-data:/var/lib/mysql # networks: # - myapp-network # ================================= web: build: context: ./nginx_docker volumes: - public-data:/myapp/public - tmp-data:/myapp/tmp ports: - 80:80 depends_on: - app networks: - myapp-network volumes: public-data: tmp-data: log-data: db-data: networks: myapp-network: external: true

以下、EC2のセキュリティグループ
イメージ説明

EC2にSSHで接続し、docker logs myapp_web_1でログを確認したところ、以下のようになるため、Nginxまでは到達しているような気がしているのですが、どうでしょうか。
イメージ説明

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

yu_1985

2021/12/10 06:00

タイムアウトってことはそもそもEC2にリクエストが届いていないのでは、と思うのですが、どこでタイムアウトになってますか? タイムアウトが出た画面のスクリーンショットを貼ってください。 また、docker-compose.ymlの内容とEC2のセキュリティグループの設定も貼ってください。
taig

2021/12/10 06:33

タイムアウトが出た画面、 docker-compose.ymlの内容、 EC2のセキュリティグループの設定 を追記致しました。 ご確認していただけると幸いです。 よろしくお願いいたします。
yu_1985

2021/12/10 06:40

全部301になってますけど、もしかしてrailsの設定でforce_sslを設定してたりしませんか? それかnginxでやってるかですが そのあたりの設定はどうなってますかね
taig

2021/12/10 06:58 編集

production.rbのforce sslがtrueとなっており、先程falseに変更して確認してみたところ、無事解決することができました。 ありがとうございます。 先程のご指摘で解決することでき、ベストアンサーにさせていただきたいので、再度回答に返信していただくことは可能でしょうか。 また、もしよろしければ、このforce sslがtrueであることによって、どのような問題があったのか、教えていただくことは可能でしょうか。 宜しくお願い致します。
yu_1985

2021/12/10 07:02

回答にまとめて書きます

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Ruby on Rails 6

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

nginx

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

AWS(Amazon Web Services)

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