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

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

新規登録して質問してみよう
ただいま回答率
85.48%
unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

nginx

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

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サーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

2264閲覧

dockerを使用したアプリのec2へのデプロイ

Rikuto7

総合スコア4

unicorn

Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

nginx

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

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サーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

1クリップ

投稿2020/10/05 00:16

編集2020/10/05 01:48

前提・実現したいこと

ec2にdockerを立ち上げrailsアプリをunicorn,nginx,postgresqlにてデプロイしたいと思っております。
現状として開発環境ではdocker-compose up を実行するとunicorn,nginx,postgresqlらが起動し問題なく動いております
しかしec2環境ではエラーが発生している為質問させて頂きますよろしくお願い致します。

発生している問題・エラーメッセージ

docker-compose upをするとpgapp_web_1 exited with code 1
web_1 | bundler: failed to load command: unicorn (/usr/local/bundle/bin/unicorn)
web_1 | Errno::ENOENT: No such file or directory @ dir_s_chdir - /var/pg_app
このようなエラーが発生します

該当のソースコード

unicorn

1$worker = 2 2 $timeout = 30 3 $app_dir = "/var/pg-app" 4 $listen = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir 5 $pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir 6 $std_log = File.expand_path 'log/unicorn.log', $app_dir 7 8 worker_processes $worker 9 working_directory $app_dir 10 stderr_path $std_log 11 stdout_path $std_log 12 timeout $timeout 13 listen $listen 14 pid $pid 15 16 preload_app true 17 18 before_fork do |server, worker| 19 defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! 20 old_pid = "#{server.config[:pid]}.oldbin" 21 if old_pid != server.pid 22 begin 23 Process.kill "QUIT", File.read(old_pid).to_i 24 rescue Errno::ENOENT, Errno::ESRCH 25 end 26 end 27 end

docker-compose.yml

docker

1version: '3' 2services: 3 db: 4 image: postgres 5 ports: 6 - '5432:5432' 7 volumes: 8 - postgresql-data:/var/lib/postgresql/data 9 environment: 10 POSTGRES_PASSWORD: 'postgres' 11 web: 12 build: 13 context: . 14 dockerfile: Dockerfile 15 command: bundle exec unicorn -p 3000 -c /myproject/config/unicorn.conf.rb 16 tty: true 17 stdin_open: true 18 depends_on: 19 - db 20 ports: 21 - "3000:3000" 22 volumes: 23 - .:/myproject:cached 24 - tmp-data:/myproject/tmp/sockets 25 - public-data:/myproject/public 26 nginx: 27 build: 28 context: ./nginx 29 dockerfile: Dockerfile 30 ports: 31 - 8080:80 32 restart: always 33 volumes: 34 - tmp-data:/myproject/tmp/sockets 35 - public-data:/myproject/public 36 depends_on: 37 - web 38volumes: 39 public-data: 40 tmp-data: 41 postgresql-data: 42 driver: local

nginx

1upstream unicorn { 2 3 server unix:/myproject/tmp/sockets/.unicorn.sock fail_timeout=0; 4} 5 6server { 7 8 listen 80 default; 9 10 server_name 18.177.59.141; 11 12 access_log /var/log/nginx/access.log; 13 error_log /var/log/nginx/error.log; 14 15 root /myproject/public; 16 17 client_max_body_size 100m; 18 error_page 404 /404.html; 19 error_page 505 502 503 504 /500.html; 20 try_files $uri/index.html $uri @unicorn; 21 keepalive_timeout 5; 22 23 location @unicorn { 24 proxy_set_header X-Real-IP $remote_addr; 25 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 26 proxy_set_header Host $http_host; 27 proxy_pass http://unicorn; 28 } 29}

dockerfile

1FROM ruby:2.6.5 2ENV DOCKERIZE_VERSION v0.6.1 3RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/* 4RUN apt-get update && apt-get install -y postgresql-client --no-install-recommends && rm -rf /var/lib/apt/lists/* 5RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs 6RUN apt-get update && apt-get install -y curl apt-transport-https wget && \ 7curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ 8echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ 9apt-get update && apt-get install -y yarn 10 11WORKDIR /myproject 12 13ADD Gemfile /myproject/Gemfile 14ADD Gemfile.lock /myproject/Gemfile.lock 15 16RUN gem install bundler 17RUN bundle install 18 19ADD . /myproject

nginxdockerfile

1FROM nginx:stable 2 3RUN rm -f /etc/nginx/conf.d/* 4 5COPY nginx.conf /etc/nginx/conf.d/myapp.conf 6 7CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf

試したこと

rm -r tmp/pids/unicorn.pidをし再度docker-compose biuld,docker-compose upしたが解決せず
webがexitedしているのでログを確認したがログがなくcommitにてコンテナの中を確認してもログが確認できておりません
開発環境では動いている為unicorn.conf.rbの$app_dir問題がありそうだったので確認する為アプリのディレクトリにてpwdしたが/var/pg-appとなっており間違って無さそう(自信がない)調べる限りみんな/var/www/アプリのようになっている様子(var/www/配下にアプリをおかないといけないのだろうか)

補足情報(FW/ツールのバージョンなど)

ec2にはamazon linux 2を使っておりec2には確実にログインできておりdocker、docker-composeも確実にインストール済み
gem 'unicorn'も記載済み
開発環境ではhomeの直下にpg-appがありec2ではvar配下にあり開発環境では動いていることからディレクトリの指定に問題がありそう
docker-compose upにてdbには問題がなさそう、nginxもおそらく問題なし
ruby2.6.5
一応yarnもdockerfileにて記載済み

分かる方いましたらどうかよろしくお願い致します。

追記
cat tmp/pids/unicorn.pidにてlogが確認でき上記のエラーに加えてこのようなエラーが確認できました。
error adding listener addr=/pg-app/tmp/sockets/.unicorn.sock

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

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

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

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

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

Rikuto7

2020/10/05 02:58

確認してみたところディレクトリの指定に問題がありそうです。
guest

回答1

0

ベストアンサー

/var/pg-app (/var/pg_app?) はコンテナー内に存在しません
ホスト側のディレクトリーを指定していませんか?

Dockerfile では /myproject を作業ディレクトリーとしており、
docker-compose.yml でも /myproject 配下しか volume をマウントしていません

投稿2020/10/05 02:51

y_shinoda

総合スコア3272

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

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

Rikuto7

2020/10/05 03:08

ご回答ありがとうございます! unicorn.conf.rbの$app_dirにてホスト側を指定しているかと思います。 こちらでホスト側を指定しているのが問題という事でしょうか? 一応開発環境の時点でも$app_dirにはホスト側を指定おり動いております 知識が少なく申し訳ないですがよろしくお願い致します。
y_shinoda

2020/10/05 03:13 編集

もし開発環境のホストに依存しているのであれば 本番環境でも開発環境と同じホスト環境を構築し同じ手順で実行する必要がありますが、 そもそもDocker を使うのであればホストに極力依存しない構築を行うべきです
Rikuto7

2020/10/05 03:33

助かります。 一度、本番環境と開発環境の確認をしてみます! ちなみにホストに依存しないコードにする場合$app_dirを書き換える認識でよろしいでしょうか?
y_shinoda

2020/10/05 03:44

書き換えるのもそうですが、 まずホストと Docker コンテナーのどちらで何が動作しているのかを 確認してみることをお奨めします 本当に質問欄の Docker 関係のコードで開発環境で動いているのであれば それは Docker で動いているのではないでしょう Docker の Dashboard で色々見てみてください Docker Dashboard | Docker Documentation https://docs.docker.com/desktop/dashboard/ Docker Desktop で 開発用 Web アプリを起動してみよう | ultra code https://futureys.tokyo/lets-run-the-web-application-for-development-by-docker-desktop-and-access-it-by-browser/
Rikuto7

2020/10/05 03:51

ありがとうございます! 確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問