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

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

ただいまの
回答率

88.92%

Rails on DockerをAWSにデプロイしても、時間が経つとサイトにアクセスできなくなってしまう

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 228

nippledrill

score 11

問題

ポートフォリオ制作中のプログラミング初学者です。
Webサーバーにnginx、アプリケーションサーバーにpumaを使うようなDocker構成を、AWSに無事デプロイできたと思っていたのですが、
時間が経つとサイトにアクセスできない現象がここ数日起きています(夜アクセスできても翌朝にはできなくなっている)。

ややこしいことにその原因と思われるパターンが二通り起きていまして、
ec2にssh接続しようとするとport 22: Connection timed outと出ること(EC2コンソール上でステータスチェックが1/2になっているのも関係あり?)。
➁ssh接続はできるがdocker-compose psでコンテナ状況を確認するとappコンテナだけExitとなっていることです(db、webコンテナはup状態)。

感覚的には、これが日ごとに入れ替わり起きているような状況です。

➀Connection timed outの方は、ec2インスタンスを停止→開始するとssh接続が可能になります(ステータスチェックも2/2になってくれます)。
その後docker-compose up -dでapp, web, dbすべてのコンテナを立ち上げることでサイトにアクセスできるようになります。

➁appコンテナだけExitとなる方は、そのままdocker-compose up -dでappコンテナを立ち上げることでアクセス可能になります。
ただし、どちらの場合も翌朝にはアクセスできなくなってしまいます(502 gateway timeout)。

原因がわからず困っています…

ファイル

GitHub

FROM ruby:2.5.3

RUN apt-get update -qq && \
    apt-get install -y build-essential \
                       libpq-dev \
                       nodejs \
                       vim
RUN apt-get update && apt-get install -y unzip && \
    CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
    wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
    unzip ~/chromedriver_linux64.zip -d ~/ && \
    rm ~/chromedriver_linux64.zip && \
    chown root:root ~/chromedriver && \
    chmod 755 ~/chromedriver && \
    mv ~/chromedriver /usr/bin/chromedriver && \
    sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
    sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
    apt-get update && apt-get install -y google-chrome-stable

RUN apt-get install -y 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

RUN mkdir -p tmp/sockets
RUN mkdir -p tmp/pids

docker-compose.yml↓

version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: user
      MYSQL_PASSWORD: 1234
      MYSQL_DATABASE: myapp_db
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "4306:3306"

  app:
    build: .
    command: bundle exec puma -C config/puma.rb
    volumes:
      - .:/myapp
      - public-data:/myapp/public
      - tmp-data:/myapp/tmp
      - log-data:/myapp/log

  web:
    build:
      context: containers/nginx
    volumes:
      - public-data:/myapp/public
      - tmp-data:/myapp/tmp
    ports:
      - 80:80

volumes:
  mysql-data:
  public-data:
  tmp-data:
  log-data:


nginx.conf↓

upstream myapp {
  server unix:///myapp/tmp/sockets/puma.sock;
}

server {
  listen 80;
  server_name www.home-study.work;

  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;
  }
}

思い当たる事

サイトにアクセスできる状態でdocker-compose logsを実行すると、
ズラーっと結果が返ってきますが、一部同じエラーがしばらく続く箇所があります。
イメージ説明
localhostとあるので、nginx.confあたりが怪しいでしょうか?

返信

satoshihさん、記事紹介してくださりありがとうございます。
エラー文は一緒なのですが

bundle exec pumactl start

を実行したところ、

Address already in use - bind(2) for "0.0.0.0" port 3000

と出ました。さらに調べてps -axでプロセス一覧を表示して、何かをキルすればよいということは分かったのですが、

ps -ax
     PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
    2 ?        S      0:00 [kthreadd]
    4 ?        I<     0:00 [kworker/0:0H]
    6 ?        I<     0:00 [mm_percpu_wq]
    7 ?        S      0:00 [ksoftirqd/0]
    8 ?        I      0:00 [rcu_sched]
    9 ?        I      0:00 [rcu_bh]
   10 ?        S      0:00 [migration/0]
   11 ?        S      0:00 [watchdog/0]
   12 ?        S      0:00 [cpuhp/0]
   14 ?        S      0:00 [kdevtmpfs]
   15 ?        I<     0:00 [netns]
   21 ?        S      0:00 [xenbus]
   22 ?        S      0:00 [xenwatch]
  172 ?        S      0:00 [khungtaskd]
  173 ?        S      0:00 [oom_reaper]
  174 ?        I<     0:00 [writeback]
  176 ?        S      0:00 [kcompactd0]
  177 ?        SN     0:00 [ksmd]
  178 ?        SN     0:00 [khugepaged]
  179 ?        I<     0:00 [crypto]
  180 ?        I<     0:00 [kintegrityd]
  182 ?        I<     0:00 [kblockd]
  535 ?        I<     0:00 [md]
  538 ?        I<     0:00 [edac-poller]
  543 ?        I<     0:00 [watchdogd]
  684 ?        S      0:00 [kauditd]
  690 ?        S      0:00 [kswapd0]
  822 ?        I<     0:00 [kthrotld]
  872 ?        I<     0:00 [kstrp]
  900 ?        I<     0:00 [ipv6_addrconf]
 1730 ?        I<     0:00 [ata_sff]
 1751 ?        S      0:00 [scsi_eh_0]
 1753 ?        I<     0:00 [scsi_tmf_0]
 1757 ?        S      0:00 [scsi_eh_1]
 1759 ?        I<     0:00 [scsi_tmf_1]
 1772 ?        I      0:00 [kworker/u30:4]
 1855 ?        I<     0:00 [xfsalloc]
 1856 ?        I<     0:00 [xfs_mru_cache]
 1858 ?        I<     0:00 [xfs-buf/xvda1]
 1859 ?        I<     0:00 [xfs-data/xvda1]
 1860 ?        I<     0:00 [xfs-conv/xvda1]
 1861 ?        I<     0:00 [xfs-cil/xvda1]
 1862 ?        I<     0:00 [xfs-reclaim/xvd]
 1863 ?        I<     0:00 [xfs-log/xvda1]
 1864 ?        I<     0:00 [xfs-eofblocks/x]
 1865 ?        S      0:01 [xfsaild/xvda1]
 1866 ?        I<     0:00 [kworker/0:1H]
 1932 ?        Ss     0:00 /usr/lib/systemd/systemd-journald
 2272 ?        Ss     0:00 /usr/sbin/lvmetad -f
 2331 ?        Ss     0:00 /usr/lib/systemd/systemd-udevd
 2343 ?        I<     0:00 [ena]
 3203 ?        I<     0:00 [rpciod]
 3204 ?        I<     0:00 [xprtiod]
 3233 ?        S<sl   0:00 /sbin/auditd
 3291 ?        Ss     0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
 3319 ?        Ss     0:00 /sbin/rpcbind -w
 3328 ?        Ss     0:00 /sbin/rngd -f
 3341 ?        Ss     0:00 /usr/lib/systemd/systemd-logind
 3342 ?        Ss     0:00 /usr/bin/lsmd -d
 3505 ?        S      0:00 /usr/sbin/chronyd
 3565 ?        Ssl    0:00 /usr/sbin/gssproxy -D
 3817 ?        Ss     0:00 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid -
 3942 ?        Ss     0:00 /sbin/dhclient -6 -nw -lf /var/lib/dhclient/dhclient6--eth0.lease -pf /var/run/dhclient6-eth0
 4029 ?        Ssl    0:03 /usr/bin/containerd
 4146 ?        Ss     0:00 /usr/libexec/postfix/master -w
 4148 ?        S      0:00 qmgr -l -t unix -u
 4218 ?        Ssl    0:00 /usr/bin/amazon-ssm-agent
 4225 ?        Ssl    0:00 /usr/sbin/rsyslogd -n
 4321 ?        Ss     0:00 /usr/sbin/atd -f
 4322 ?        Ss     0:00 /usr/sbin/crond -n
 4410 ?        Ssl    0:08 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit nofil
 4535 tty1     Ss+    0:00 /sbin/agetty --noclear tty1 linux
 4536 ttyS0    Ss+    0:00 /sbin/agetty --keep-baud 115200,38400,9600 ttyS0 vt220
 4599 ?        Ss     0:00 /usr/sbin/sshd -D
 4819 ?        Ss     0:00 /usr/sbin/acpid
 6102 ?        Ss     0:00 sshd: sue [priv]
 6120 ?        S      0:00 sshd: sue@pts/0
 6121 pts/0    Ss     0:00 -bash
 6260 ?        S      0:00 pickup -l -t unix -u
 6453 ?        I      0:00 [kworker/u30:0]
17943 ?        I      0:00 [kworker/0:3]
17944 ?        I      0:00 [kworker/0:4]
18140 ?        I      0:00 [kworker/0:0]
18201 ?        I      0:00 [kworker/u30:1]
18216 ?        Sl     0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 4306 -container-ip 172.18.0.2 -c
18230 ?        Sl     0:00 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/m
18249 ?        Sl     0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.18.0.3 -con
18269 ?        Sl     0:00 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/m
18274 ?        Ssl    0:03 puma 3.12.6 (tcp://0.0.0.0:3000,unix:///myapp/tmp/sockets/puma.sock) [myapp]
18304 ?        Sl     0:00 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/m
18334 ?        Ssl    0:00 mysqld
18363 ?        Ss     0:00 /bin/sh -c /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
18520 ?        S      0:00 nginx: master process /usr/sbin/nginx -g daemon off; -c /etc/nginx/nginx.conf
18527 ?        S      0:00 nginx: worker process
18681 pts/0    R+     0:00 ps -ax


このようにズラーっと出てきてしまいどうすればよいかわからなくなってしまいました。
pumaやnginx.confなどのファイルはこちらを参考にコピペしてきたもののため、
単純な勉強不足で申し訳ないのですが、参考になる記事などありましたら教えて頂きたいです。


yu_1985さん、コメントありがとうございます。
恥ずかしながら、railsやpumaのログを確認する方法なのですが、調べても分かりませんでした...
すみませんが、教えて頂けますでしょうか。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yu_1985

    2020/07/21 15:54

    設定を変えてなければRailsのプロジェクトのlogディレクトリの下にあるかと。

    キャンセル

  • nippledrill

    2020/07/21 16:14

    logディレクトリの中に何もない状況なのですが、おそらく今日既にEC2の再起動とコンテナの起動を済ませてしまったためでしょうか。
    また明日になって、コンテナを起動する前にlogを確認したら何かエラーを吐いているかもしれません(?)

    キャンセル

  • yu_1985

    2020/07/21 16:21

    コンテナの中にログを出力しているのなら、コンテナを停止したら消えます。
    docker-compose.ymlを修正して、logディレクトリもボリュームアタッチしてコンテナの外に出力させたほうが良いのでは?

    キャンセル

回答 1

0

Docker ComposeでRailsとNginxを分けていますよね。

にもかかわらず、nginxのConfigでは

server unix:///myapp/tmp/sockets/puma.sock; 

と書かれています。これは、unix domain socketといって、ファイルシステムを共有する同一のサーバー(もしくはコンテナ)内でなければ読み込めないので、動かないのも頷けます。

ここをTCPソケットに変えた上で、appに向けて設定してあげたら動くと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/24 18:34 編集

    お返事が遅れ大変申し訳ありません。
    >>ここをTCPソケットに変えた上で、appに向けて設定してあげたら動くと思います。
    これについてなのですが、もしよろしければ具体的に教えて頂けないでしょうか?
    または参考になるサイトを紹介してくださるのでも大変助かります><

    ttps://qiita.com/na-o-ys/items/1a863419e1f6c3063ace
    こちらのサイトの2例目で「Docker ComposeでRailsとNginxを分ける構成」が紹介されており、偶然ほとんど同じ書き方でした。しかし、やはり
    server unix:///myapp/tmp/sockets/puma.sock;
    と書かれており、力不足故何が問題なのかすらも分かりません…

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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