使用Docker + Puma + Nginx部署Rails 5应用程序

时间:2017-08-22 06:36:16

标签: ruby-on-rails postgresql docker nginx puma

我真的很难将我的Rails应用程序部署到我新创建的DigitalOcean Droplet。

我的设置如下:

我在Docker容器中有 Postgres Redis 的本地 Rails 5 应用。

我只是想使用 Puma + Nginx 作为网络服务器将其部署到制作中。

我无法为我的生活做到这一点。这是我的docker-compose.yml文件:

version: "2"
services:
  postgres:
    image: postgres:9.6
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: "${DATABASE_NAME}"
      POSTGRES_PASSWORD: "${DATABASE_PASSWORD}"
    volumes:
      - postgres-data:/var/lib/postgresql/data
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
volumes:
  # This allows the data to persist to disk without being lost on
  # Docker container restarts:
  postgres-data:
    driver: local

在生产中为这样一个简单的应用程序提供正确的Puma / Nginx配置是什么?我一直在寻找,但似乎无法弄明白。

提前致谢!

1 个答案:

答案 0 :(得分:0)

如果你的rails应用程序已经严格部署了Droplet,而不是docker,你可以尝试下面的简单配置:

<强> nginx.conf

upstream your_app {
  server unix:/path_to_app_home/shared/tmp/sockets/puma.sock 
  fail_timeout=0;
}

server {
  listen 80;
  server_name yor_domain.tld;

  root /path_to_app/current/public;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @your_app;
  location @your_app {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    proxy_pass http://your_app;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 1G;
}

<强> /path_to_your_app/shared/config/puma.rb

environment "production"

bind  "unix:///path_to_your_app/shared/tmp/sockets/puma.sock"
pidfile "/path_to_your_app/shared/tmp/pids/puma.pid"
state_path "/path_to_your_app/shared/tmp/sockets/puma.state"
directory "/path_to_your_app/current"

workers 1
threads 1,2

daemonize true

activate_control_app 'unix:///path_to_your_app/shared/tmp/sockets/pumactl.sock'

prune_bundler

stdout_redirect "/path_to_your_app/shared/log/puma.stdout.log", "/path_to_your_app/shared/log/puma.stderr.log"