如何dockerize Ruby on Rails的生产?

我使用Docker为我的开发环境设置了Ruby on Rails,但我不确定此configuration是否适合生产。 目前我使用nginx +独angular兽作为networking服务器,但nginx +乘客或nginx +美洲狮呢?

我告诉你我的docker设置,希望你有一些改进。

泊坞窗,compose.yml

web: image: nginx:latest ports: - "80" - "443" links: - "rails" environment: VIRTUAL_HOST: blog.dev.lvh volumes: - ./log/nginx:/var/log/nginx - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf - ./docker/nginx/sites-enabled:/etc/nginx/sites-enabled - ./docker/nginx/ssl:/etc/nginx/ssl volumes_from: - rails rails: image: mc388/rails:latest environment: RACK_ENV: development RAILS_ENV: development command: bundle exec unicorn -c config/unicorn.rb volumes: - ./:/var/www/html links: - mysql mysql: image: mysql:latest volumes: - ./mysql/dev:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: somepw MYSQL_DATABASE: mablen_dev 

nginx.conf

 user nginx; worker_processes 1; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; #default_type text/html; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; sendfile on; keepalive_timeout 65; include /etc/nginx/sites-enabled/*; } 

网站-endable / rails.conf

 upstream app { # Path to Unicorn SOCK file, as defined previously server unix:/var/www/html/unicorn/sockets/unicorn.sock fail_timeout=0; } server { listen 80 default_server; listen 443 default_server ssl; ssl_certificate /etc/nginx/ssl/blog.dev.io.crt; ssl_certificate_key /etc/nginx/ssl/blog.dev.io.key; # Application root, as defined previously root /var/www/html/public; try_files $uri/index.html $uri @app; location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://app; } error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 10; include /etc/nginx/includes/gzip; # For Lets Encrypt location /.well-known/acme-challenge { root /var/www/html; default_type application/jose+json; } } 

configuration/ unicorn.rb

 # set path to application app_dir = File.expand_path("../..", __FILE__) shared_dir = "#{app_dir}/unicorn" working_directory app_dir # Set unicorn options worker_processes 2 preload_app true timeout 30 before_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn master intercepting TERM and sending myself QUIT instead' Process.kill 'QUIT', Process.pid end defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! end after_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT' end defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end # Set up socket location listen "#{shared_dir}/sockets/unicorn.sock", :backlog => 64 # Logging stderr_path "#{shared_dir}/log/unicorn.stderr.log" stdout_path "#{shared_dir}/log/unicorn.stdout.log" # Set master PID location pid "#{shared_dir}/pids/unicorn.pid"