前提・実現したいこと
未経験エンジニアです。ご覧いただき、誠にありがとうございます。
現在転職活動に向けて、某プログラミングスクール卒業後、ポートフォリオアプリを作成し、いざAWSのEC2上にデプロイを試みていますが、エラーとなり、うまくできない状況が1週間ほど続いています。
○開発環境におけるアプリの動作は確認済みです。(Rails、puma、nginx、mysql、Docker)
解決に必要な情報等ございましたら、おっしゃっていただければ都度追加させていただきます。
ぜひ先輩エンジニアの皆様のお力をお借りしたく投稿させていただきました。
お手数をお掛けしますが、何卒よろしくお願いいたします。
発生している問題・エラーメッセージ
EC2コンソール上の当該ディレクトリにて下記コマンドを入力
docker-compose build
→docker-compose run app rails assets:precompile RAILS_ENV=production
→docker-compose exec app rails db:create db:migrate RAILS_ENV=production
→docker-compose up
Creating Myapp_app_1 ... done Creating Myapp_web_1 ... done Attaching to Myapp_app_1, Myapp_web_1 app_1 | Puma starting in single mode... app_1 | * Version 3.12.6 (ruby 2.6.5-p114), codename: Llamas in Pajamas app_1 | * Min threads: 5, max threads: 5 app_1 | * Environment: production web_1 | 2021/10/25 16:21:52 [notice] 6#6: using the "epoll" event method web_1 | 2021/10/25 16:21:52 [notice] 6#6: nginx/1.21.3 web_1 | 2021/10/25 16:21:52 [notice] 6#6: built by gcc 8.3.0 (Debian 8.3.0-6) web_1 | 2021/10/25 16:21:52 [notice] 6#6: OS: Linux 4.14.248-189.473.amzn2.x86_64 web_1 | 2021/10/25 16:21:52 [notice] 6#6: getrlimit(RLIMIT_NOFILE): 32768:65536 web_1 | 2021/10/25 16:21:52 [notice] 6#6: start worker processes web_1 | 2021/10/25 16:21:52 [notice] 6#6: start worker process 7 app_1 | * Listening on unix:///Myapp/tmp/sockets/puma.sock app_1 | Use Ctrl-C to stop
コマンド入力後、http://xx.xxx.xx.xxx(パブリックIPアドレス)へアクセスすると下記エラーメッセージのページが表示されます。
We're sorry, but something went wrong.
Dockerfile
FROM ruby:2.6.5 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 libmariadb-dev vim RUN mkdir /Myapp WORKDIR /Myapp ADD Gemfile /Myapp/Gemfile ADD Gemfile.lock /Myapp/Gemfile.lock RUN gem install bundler RUN bundle install ADD . /Myapp COPY entrypoint.sh /usr/bin/ RUN chmod +x /usr/bin/entrypoint.sh ENTRYPOINT ["entrypoint.sh"] EXPOSE 80 RUN mkdir -p tmp/sockets RUN mkdir -p tmp/pids CMD ["rails", "server", "-b", "0.0.0.0"]
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 tty: true stdin_open: true # =========本番はコメントアウト============ # depends_on: # - db # db: # image: mysql:5.6.51 # environment: # MYSQL_DATABASE: ${MYSQL_DATABASE} # MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} # MYSQL_USER: ${MYSQL_USERNAME} # MYSQL_PASSWORD: ${MYSQL_PASSWORD} # TZ: "Asia/Tokyo" # command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci # ports: # - "4306:3306" # volumes: # - db-data:/var/lib/mysql # ====================================== web: build: context: containers/nginx volumes: - public-data:/Myapp/public - tmp-data:/Myapp/tmp - gem_data:/usr/local/bundle ports: - 80:80 depends_on: - app volumes: public-data: tmp-data: log-data: gem_data: # db-data: #本番はコメントアウト
containers/nginx/Dockerfile
FROM nginx:1.21.3 RUN rm -f /etc/nginx/conf.d/* ADD nginx.conf /etc/nginx/conf.d/Myapp.conf CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
containers/nginx/nginx.conf
upstream Myapp { server unix:///Myapp/tmp/sockets/puma.sock; } server { listen 80; # =========ローカルと本番切り替え=========== server_name xx.xxx.xx.xxx(パブリック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; } location /cable { proxy_pass http://Myapp/cable; proxy_http_version 1.1; proxy_set_header Upgrade websocket; proxy_set_header Connection Upgrade; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
config/puma.rb
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count } threads min_threads_count, max_threads_count 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
試したこと
・EC2インスタンス作成済み
・セキュリティグループ(ポート 22,80,443,3306(MySQL/Aurora)許可済み)
・master.key 及び.env ファイルはEC2上に追加済み
下記コマンドでnginxの起動を確認しましたが、コンテナを立ち上げた際にnginxがうまく作動していないことが原因なのではないかと考えております。(見当違いでしたら申し訳ありません、、、)
$(EC2上) systemctl status nginx.service ● nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled) Active: failed (Result: exit-code) since 月 2021-10-25 09:00:11 UTC; 7h ago Process: 31526 ExecStart=/usr/sbin/nginx (code=exited, status=1/FAILURE) Process: 31519 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS) Process: 31503 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
補足情報(FW/ツールのバージョンなど)
開発環境
MacOS Big Sur
・Ruby 2.6.5
・Rails 6.0.0
・nginx
・puma
・Docker
・AWS(EC2,RDS(MySQL))
あなたの回答
tips
プレビュー