Docker nginx和应用程序正在运行,但应用程序未在浏览器上显示

时间:2018-05-30 18:24:00

标签: ruby-on-rails docker nginx docker-compose

我已经使用docker + nginx + puma部署了应用程序,它似乎正常运行,但应用程序未在浏览器上打开

我的配置如下

  

Dockerfile

FROM ruby:2.3.3

RUN apt-get update -qq && apt-get install -y build-essential libmysqlclient-dev mysql-client libmagickwand-dev imagemagick nodejs cron

# Define where our application will live inside the image
ENV RAILS_ROOT /home/ubuntu/myapp

# Create application home. App server will need the pids dir so just create everything in one shot
RUN mkdir -p $RAILS_ROOT/tmp/pids

# Set our working directory inside the image
WORKDIR $RAILS_ROOT


# Use the Gemfiles as Docker cache markers. Always bundle before copying app src.
# (the src likely changed and we don't want to invalidate Docker's cache too early)
# http://ilikestuffblog.com/2014/01/06/how-to-skip-bundle-install-when-deploying-a-rails-app-to-docker/
COPY Gemfile Gemfile

COPY Gemfile.lock Gemfile.lock

# Prevent bundler warnings; ensure that the bundler version executed is >= that which created Gemfile.lock
RUN gem install bundler

# Finish establishing our Ruby enviornment
RUN bundle install

COPY config/puma.rb config/puma.rb

# Copy the Rails application into place
COPY . .
RUN bundle exec rake assets:precompile

RUN bundle exec whenever -i
EXPOSE 3000



# Define the script we want run once the container boots
# Use the "exec" form of CMD so our script shuts down gracefully on SIGTERM (i.e. `docker stop`)
#CMD [ "config/containers/app_cmd.sh" ]

CMD bundle exec puma -e production
  

Dockerfile-nginx的

FROM nginx

RUN apt-get update -qq && apt-get -y install apache2-utils wget


ENV RAILS_ROOT /home/ubuntu/myapp
WORKDIR $RAILS_ROOT

RUN mkdir log

COPY public public/

COPY config/nginx.conf /etc/docker_example.nginx

RUN envsubst '$RAILS_ROOT' < /etc/docker_example.nginx > /etc/nginx/conf.d/default.conf

EXPOSE 80

CMD ["nginx","-g","daemon off;"]
  

搬运工-compose.yml

version: '2'
services:
  app:
    build: .
    command: bundle exec puma -e production
    env_file:
      - /home/ubuntu/myapp/.env
    expose:
      - "3000"
  web:
    build:
      context: .
      dockerfile: Dockerfile-nginx
    links:
      - app
    ports:
      - "80:80"

  sidekiq:
    build: .
    command: bundle exec sidekiq -e production -C config/sidekiq.yml
    env_file:
      - /home/ubuntu/myapp/.env

enter image description here

所有内容似乎都有效但应用程序无法在浏览器上打开。

任何帮助都将受到高度赞赏。提前谢谢

修改

  

nginx.conf

upstream puma_rails {
  server app:3000;
}

server {
  listen 80;
  client_max_body_size 4G;
  keepalive_timeout 10;

  error_page 500 502 504 /500.html;
  error_page 503 @503;

  server_name localhost puma_rails;
  root /home/ubuntu/myapp/public;
  try_files $uri/index.html $uri @puma_rails;

  location @puma_rails {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma_rails;
    # limit_req zone=one;
    access_log /home/ubuntu/myapp/log/nginx.access.log;
    error_log /home/ubuntu/myapp/log/nginx.error.log;
  }

  location = /50x.html {
    root html;
  }

  location = /404.html {
    root html;
  }

  location @503 {
    error_page 405 = /system/maintenance.html;
    if (-f $document_root/system/maintenance.html) {
      rewrite ^(.*)$ /system/maintenance.html break;
    }
    rewrite ^(.*)$ /503.html break;
  }

  if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){
    return 405;
  }

  if (-f $document_root/system/maintenance.html) {
    return 503;
  }

  location ~ \.(php|html)$ {
    return 405;
  }
}

0 个答案:

没有答案