前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー