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
1FROM ruby:2.7.1 2 3# リポジトリを更新し依存モジュールをインストール 4RUN apt-get update -qq && \ 5 apt-get install -y build-essential \ 6 nodejs 7 8# yarnパッケージ管理ツールインストール 9RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 10 curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 11 echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 12 apt-get update && apt-get install -y yarn 13# Node.jsをインストール 14RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - && \ 15 apt-get install -y nodejs 16 17# ルート直下にwebappという名前で作業ディレクトリを作成(コンテナ内のアプリケーションディレクトリ) 18RUN mkdir /myapp 19WORKDIR /myapp 20 21# ホストのGemfileとGemfile.lockをコンテナにコピー 22ADD Gemfile /myapp/Gemfile 23ADD Gemfile.lock /myapp/Gemfile.lock 24 25# bundle installの実行 26RUN gem install bundler 27RUN bundle install 28# RUN bundle update 29 30# ホストのアプリケーションディレクトリ内をすべてコンテナにコピー 31ADD . /myapp 32 33# puma.sockを配置するディレクトリを作成 34RUN mkdir -p tmp/sockets
Gemfile
1 2source 'https://rubygems.org' 3git_source(:github) { |repo| "https://github.com/#{repo}.git" } 4 5gem 'rails', '6.0.3' 6gem 'mysql2' 7gem 'aws-sdk-s3', '1.46.0', require: false 8gem 'image_processing', '1.9.3' 9gem 'mini_magick', '4.9.5' 10gem 'active_storage_validations', '0.8.2' 11gem 'bcrypt', '3.1.13' 12gem 'faker', '2.1.2' 13gem 'will_paginate', '3.1.8' 14gem 'bootstrap-will_paginate', '1.0.0' 15gem 'bootstrap-sass', '3.4.1' 16gem 'puma', '4.3.6' 17gem 'sassc', '2.1.0' 18gem 'sass-rails', '6' 19gem 'webpacker', '4.0.7' 20gem 'turbolinks', '5.2.0' 21gem 'jbuilder', '2.9.1' 22gem 'bootsnap', '1.4.5', require: false 23#API_KEYを環境変数として管理する(Keyを外部流出させないための措置) 24gem 'dotenv-rails' 25#アプリケーション内でHTTPリクエストを投げたい場合に使うクラス 26gem 'httpclient' 27 28group :development, :test do 29 gem 'sqlite3', '1.4.1' 30 gem 'byebug', '11.0.1', platforms: [:mri, :mingw, :x64_mingw] 31end 32 33group :development do 34 gem 'web-console', '4.0.1' 35 gem 'listen', '3.1.5' 36 gem 'spring', '2.1.0' 37 gem 'spring-watcher-listen', '2.0.1' 38end 39 40 41group :production do 42end
# 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にSSHで接続し、docker logs myapp_web_1でログを確認したところ、以下のようになるため、Nginxまでは到達しているような気がしているのですが、どうでしょうか。
回答2件
あなたの回答
tips
プレビュー