お世話になっております。
現在、個人アプリにて、Docker環境でunicornとnginxを導入しています。
#解決したいこと
docker-compose upとunicornを起動しても、本番環境にアクセスできない。
#現状
nginx、unicorn共に起動はできています。
dockerのコンテナ、イメージも確認できています。
docker-compose up とbuildはエラーは出ません。
URLは
http://54.178.22.150:3000/
http://54.178.22.150
共にアクセスできません。
nginxを導入するにあたって色々といじってしまった事が原因でアクセスできなくなってしまいました。
元々は、http://54.178.22.150:3000/でアクセスができておりました。
不明点は追記しますので、コメントで教えていただけますと幸いです。
Dockerfile
FROM ruby:2.5.3 ENV DOCKERIZE_VERSION v0.6.1 RUN apt-get update && \ apt-get install -y --no-install-recommends\ nodejs \ mariadb-client \ build-essential \ wget \ && wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN mkdir /app_name ENV APP_ROOT /app_name WORKDIR $APP_ROOT ADD ./Gemfile $APP_ROOT/Gemfile ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock RUN gem install bundler # Gemfileのbundle install RUN bundle install ADD . $APP_ROOT
docker-compose.yml
version: '3' services: db: image: mysql:5.6.49 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: root ports: - "4306:3306" web: build: . command: dockerize -wait tcp://db:3306 -timeout 20s bundle exec unicorn -p 3000 -c /L-MGMT/config/unicorn.conf.rb volumes: - .:/app_name ports: - "3000:3000" links: - db nginx: build: context: ./nginx dockerfile: Dockerfile ports: - 81:80 restart: always depends_on: - web
nginx/Dockerfile
FROM nginx:stable RUN rm -f /etc/nginx/conf.d/* COPY nginx.conf /etc/nginx/conf.d/myapp.conf CMD /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
nginx.conf
upstream unicorn { #ユニコーンソケットの設定 server unix:/L-MGMT/tmp/sockets/.unicorn.sock fail_timeout=0; } server { #IPとポートの指定 listen 80 default; #サーバーネームの指定 server_name localhost; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; #ドキュメントルートの指定 root /L-MGMT/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 @unicorn; keepalive_timeout 5; location @unicorn { 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://unicorn; } }
unicorn.conf
$worker = 2 $timeout = 30 $app_dir = "/L-MGMT" $listen = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir $pid = File.expand_path 'tmp/pids/unicorn.pid', $app_dir $std_log = File.expand_path 'log/unicorn.log', $app_dir # set config worker_processes $worker working_directory $app_dir stderr_path $std_log stdout_path $std_log timeout $timeout listen $listen pid $pid # loading booster preload_app true # before starting processes before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin Process.kill "QUIT", File.read(old_pid).to_i rescue Errno::ENOENT, Errno::ESRCH end end end # after finishing processes after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end
unicorn.rb
app_path = File.expand_path('../../', __FILE__) worker_processes 1 working_directory app_path pid "#{app_path}/tmp/pids/unicorn.pid" listen "#{app_path}/tmp/sockets/unicorn.sock" stderr_path "#{app_path}/log/unicorn.stderr.log" stdout_path "#{app_path}/log/unicorn.stdout.log" timeout 60 preload_app true GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true check_client_connection false run_once = true before_fork do |server, worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.connection if run_once run_once = false # prevent from firing again end old_pid = "#{server.config[:pid]}.oldbin" if File.exist?(old_pid) && server.pid != old_pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH => e logger.error e end end end after_fork do |_server, _worker| defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection end
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。