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

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

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

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

Docker

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

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

Q&A

1回答

1159閲覧

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

nippledrill

総合スコア11

Ruby on Rails

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

Docker

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

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

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

0グッド

1クリップ

投稿2020/07/21 05:05

編集2022/01/12 10:55

問題

ポートフォリオ制作中のプログラミング初学者です。
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

Dockerfile

1FROM ruby:2.5.3 2 3RUN apt-get update -qq && \ 4 apt-get install -y build-essential \ 5 libpq-dev \ 6 nodejs \ 7 vim 8RUN apt-get update && apt-get install -y unzip && \ 9 CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \ 10 wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \ 11 unzip ~/chromedriver_linux64.zip -d ~/ && \ 12 rm ~/chromedriver_linux64.zip && \ 13 chown root:root ~/chromedriver && \ 14 chmod 755 ~/chromedriver && \ 15 mv ~/chromedriver /usr/bin/chromedriver && \ 16 sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \ 17 sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \ 18 apt-get update && apt-get install -y google-chrome-stable 19 20RUN apt-get install -y vim 21 22RUN mkdir /myapp 23 24WORKDIR /myapp 25 26ADD Gemfile /myapp/Gemfile 27ADD Gemfile.lock /myapp/Gemfile.lock 28 29RUN gem install bundler 30RUN bundle install 31 32ADD . /myapp 33 34RUN mkdir -p tmp/sockets 35RUN 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
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などのファイルは[こちら](https://qiita.com/somagawa/items/18dae771163a02a53a37)を参考にコピペしてきたもののため、 単純な勉強不足で申し訳ないのですが、参考になる記事などありましたら教えて頂きたいです。 --- yu_1985さん、コメントありがとうございます。 恥ずかしながら、railsやpumaのログを確認する方法なのですが、調べても分かりませんでした... すみませんが、教えて頂けますでしょうか。

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

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

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

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

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

yu_1985

2020/07/21 06:09

Railsやpumaのログにはなにか出ていませんか? エラー内容的に問題があるのはアプリの方に見えますが…。
yu_1985

2020/07/21 06:54

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

2020/07/21 07:14

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

2020/07/21 07:21

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

回答1

0

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

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

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

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

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

投稿2020/07/22 02:14

inductor

総合スコア428

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

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

nippledrill

2020/07/24 09:34 編集

お返事が遅れ大変申し訳ありません。 >>ここをTCPソケットに変えた上で、appに向けて設定してあげたら動くと思います。 これについてなのですが、もしよろしければ具体的に教えて頂けないでしょうか? または参考になるサイトを紹介してくださるのでも大変助かります>< ttps://qiita.com/na-o-ys/items/1a863419e1f6c3063ace こちらのサイトの2例目で「Docker ComposeでRailsとNginxを分ける構成」が紹介されており、偶然ほとんど同じ書き方でした。しかし、やはり server unix:///myapp/tmp/sockets/puma.sock; と書かれており、力不足故何が問題なのかすらも分かりません…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問