Rails + Nginx + Unicorn

Настраиваем связку Ruby on Rails, Nginx, Unicorn. Posted on March 5, 2015

Предположим, что приложение у нас уже создано и находится в каталоге /home/avdyushin/food.

Все настройки актуальны для Ubuntu с установленным RVM и версией Ruby 2.0.0.

Сервер приложений Unicorn

Для начала устанавливаем сам unicorn:

apt-get install unicorn
gem install unicorn

Конфигурационный файл нашего приложения unicorn.conf.rb (можем положить в каталог с приложением):

# Путь к приложению Ruby on Rails
working_directory "/home/avdyushin/food"

# Пути к логам
stderr_path "/home/avdyushin/food/log/unicorn.log"
stdout_path "/home/avdyushin/food/log/unicorn.log"

# Слушаем сокет
listen "/tmp/unicorn.food.sock", :backlog => 64

# А также HTTP порт 8080
listen 8080, :tcp_nopush => true

#
pid "/run/unicorn.pid"

# Количество процессов
worker_processes 2

#
timeout 30

Конфигурация базового сервера находится здесь: /etc/default/unicorn

# Change paramentres below to appropriate values and set CONFIGURED to yes.
CONFIGURED=yes

# Default timeout until child process is killed during server upgrade,
# it has *no* relation to option "timeout" in server's config.rb.
TIMEOUT=60

# Path to your web application, sh'ld be also set in server's config.rb,
# option "working_directory". Rack's config.ru is located here.
APP_ROOT=/home/avdyushin/food

# Server's config.rb, it's not a rack's config.ru
CONFIG_RB="$APP_ROOT/unicorn.conf.rb"

# Where to store PID, sh'ld be also set in server's config.rb, option "pid".
PID=/run/unicorn.pid

# Additional arguments passed to unicorn, see man (1) unicorn.
UNICORN_OPTS="-D -c $CONFIG_RB"

PATH=/home/avdyushin/.rvm/rubies/ruby-2.0.0-p598/bin:/home/avdyushin/.rvm/gems/ruby-2.0.0-p598/bin:/home/avdyushin/.rvm/bin:/usr/local/sbin:/usr/bin:/bin:/sbin:$

export GEM_HOME=/home/avdyushin/.rvm/gems/ruby-2.0.0-p598
export GEM_PATH=/home/avdyushin/.rvm/gems/ruby-2.0.0-p598

DAEMON=/home/avdyushin/.rvm/gems/ruby-2.0.0-p598/bin/unicorn

HTTP сервер Nginx

Создадим файл настроек для сервера и добавим во включенные сайты:

cp /etc/nginx/sites-available/default /etc/nginx/sites-enabled/food
ln -s /etc/nginx/sites-available/food /etc/nginx/sites-enabled

Затем отредактируем конфиг /etc/nginx/sites-available/food:

upstream unicorn {
    server unix:/tmp/unicorn.food.sock fail_timeout=0;
    server 8080 fail_timeout=0;
}

server {

    listen 80;
    listen [::]:80;

    root /home/avdyushin/food/;
    server_name food.avdyushin.ru;

    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_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;

        proxy_redirect off;
        proxy_pass http://unicorn;
    }

    error_page 404 /404.html;

}

Перезапуск серверов

Теперь, когда все настроено, можно перезапустить службы.

service nginx restart
service unicorn restart

В идеале, все должно заработать. Если что-то пошло не так, можно посмотреть в логах.


ruby rails nginx unicorn
Previous
February 26, 2015
Расширения в Swift
Next
March 6, 2015
Парсим JSON в Ruby