Развертывание приложения Rails 5 с помощью Docker + Puma + Nginx

Я действительно изо всех сил пытаюсь развернуть свое приложение Rails в моей недавно созданной дропле DigitalOcean.

Моя установка выглядит следующим образом:

У меня есть локальное приложение Rails 5 с Postgres и Redis в контейнерах Docker.

Я просто хочу развернуть это в производственной среде, используя 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 для обслуживания такого простого приложения в производственной среде? Я искал, но не могу понять.

Заранее спасибо!


person DaniG2k    schedule 22.08.2017    source источник
comment
Просто совет: никогда не используйте Docker для баз данных в производственной среде, если вы не знаете, что делаете. Это можно сделать, но действительно сложно сделать правильно ...   -  person jdno    schedule 22.08.2017
comment
Да, я тоже это замечаю ... кажется, довольно плохая сделка. Данные не сохраняются, как хотелось бы, и т. Д. Можно вообще избавиться от Docker   -  person DaniG2k    schedule 22.08.2017
comment
Как вы настраивали Puma и т. Д. И поддерживали работу службы puma? Если NGINX развернут вне Docker, я не понимаю, почему его конфигурация действительно будет отличаться от нормальной. Сделайте NGINX напрямую сервером / общедоступным каталогом, затем либо используйте сокет домена unix и сделайте для него прокси NGINX, либо, если вам нужен полный сокет TCP, используйте его (конфигурация по умолчанию - для порта 3000).   -  person Fire Lancer    schedule 22.08.2017
comment
DaniG2k что не так с томами, где вы можете хранить данные БД вне вашего контейнера? Вот как я недавно оказался с докером - erudinsky.com/2017/05/15/   -  person Evgeny    schedule 04.09.2017


Ответы (1)


Если ваше приложение rails развернуто строго до капли, а не в докере, вы можете попробовать простую конфигурацию, такую ​​как ниже:

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"
person cnnr    schedule 22.08.2017
comment
Это явно не отвечает на вопрос - person Gardner Bickford; 12.07.2020