21 Aug 2017 
Тех. и админ поддержка » База знаний » Настройка VPS для Ruby on Rails
 Настройка VPS для Ruby on Rails
Решение

Установка VPS


Для примера используем тарифный план VPS-0.
Устанавливаем ОС ubuntu-14.04-x86_64.


Создание пользователя deploy


Подключаюсь по SSH к серверу под пользователем root.
Создаю пользователя deploy и добавляю его в группу sudo:

      # adduser deploy

      # gpasswd -a deploy sudo


Переподключаюсь к серверу под пользователем deploy.


Обновление дистрибутива


Обновляю всё установленное ПО с помощью команд:

      $ sudo apt update

      $ sudo apt upgrade


и иду пить кофе.


Удаление Apache2


Удаляю старый веб-сервер apache2:

      $ sudo apt purge apache2*




Установка nginx, git, cURL


Ставлю curl, ядро git и веб-сервер nginx:

      $ sudo apt install curl git-core nginx




Установка RVM (Ruby Version Manager)


Импортируем GPG-ключ RVM:

Загружаем и запускаем установочный скрипт rvm:

Редактирую файл /home/deploy/.bashrc c помощью vim. Добавляю в конец файла строку:

      source ~/.rvm/scripts/rvm


Переподключаюсь к серверу.


Подготовка RVM для работы


Загружаю зависимости rvm:

      $ rvm requirements


Устанавливаю последнюю версию Ruby (на момент написания была 2.4.0, см. http://ruby-lang.org/).

      $ rvm install 2.4.0


Делаю версию 2.4.0 по умолчанию:

      $ rvm use 2.4.0 —default




Установка rails и bundler


Устанавливаю rails и bundler без Ri документации и RDoc:

      $ gem install rails --no-ri --no-rdoc

      $ gem install bundler --no-ri --no-rdoc




Создание тестового приложения


Перейдя в домашнюю папку:

      $ cd ~


Сделаем клон тестового приложения:

Зайдем в папку приложения и выполним подгрузку gem-ов:

      $ cd ~

      $ bundle


Внимание!
Если у вас появилась следующая ошибка:
Gem Load Error is: Could not find a JavaScript runtime.

то вам следует ввести команду:

      $ sudo apt install nodejs


В файле config/secrets.yml в группе production есть ссылка к переменной SECRET_KEY_BASE.
Зададим её.
Сгенерируем секретный ключ, выполнив команду:

      $ rake secret


Результат работы этой программы скопируем в буфер обмена.
Отредактируем файл config/secrets.yml. Вместо


      <%= ENV["SECRET_KEY_BASE"] %>



вставим из буфера обмена.


Конфигурирование веб-сервера Puma


После этого нужно изменить конфигурацию веб-сервера puma в файле confiv/puma.rb. Для этого я воспользовался текстовым редактором vim:

      $ vim config/puma.rb


Нужно удалить всё содержимое файла и вставить следующее:

# Change to match your CPU core count
workers 2

# Min and Max threads per worker
threads 1, 6

app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"

# Default to production
rails_env = ENV['RAILS_ENV'] || "production"
environment rails_env

# Set up socket location
bind "unix://#{shared_dir}/sockets/puma.sock"

# Logging
stdout_redirect "#{shared_dir}/log/puma.stdout.log", "#{shared_dir}/log/puma.stderr.log", true

# Set master PID and state locations
pidfile "#{shared_dir}/pids/puma.pid"
state_path "#{shared_dir}/pids/puma.state"
activate_control_app

on_worker_boot do
require "active_record"
ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[rails_env])
end

На второй строке нужно указать количество ядер виртуальной машины. Т.к. в самом начале я выбрал план VPS-0, то я поставлю:

      workers 1


Создадим рабочие папки:

      $ mkdir -p shared/pids shared/sockets shared/log


Теперь создадим скрипт, который будет запускать веб-сервер puma при включении виртуальной машины.
Перейдём в домашнюю папку и загрузим два скрипта:

Для начала откроем файл puma.conf с помощью текстового редактора.
На 24-25 строках заменим apps на deploy чтобы было вот так:

      setuid deploy

      setuid deploy


Скопируем файлы puma.conf и puma-manager.conf в папку автозагрузки /etc/init:

      $ sudo cp puma.conf puma-manager.conf /etc/init


Файл puma-manager.conf cсылается на файл /etc/puma.conf.
Создадим файл /etc/puma.conf, в котором пропишем путь к нашему приложению:

      /home/deploy/rortest_ruskyhost


Запустим веб-сервер puma со всеми приложениями:

      $ sudo start puma-manager


Сейчас наше приложение слушает сокет, расположенный в папке shared/sockets/puma.sock.


Конфигурирование веб-сервера nginx


Отредактируем конфигурацию веб-сервера nginx в файле /etc/nginx/sites-available/default.
Удалим все строки и вставим следующие:

upstream app {
# Path to Puma SOCK file, as defined previously
server unix:/home/deploy/rortest_ruskyhost/shared/sockets/puma.sock fail_timeout=0;
}

server {
listen 80;
server_name localhost;

root /home/deploy/rortest_ruskyhost/public;

try_files $uri/index.html $uri @app;

location @app {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}

error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}

Перезагрузим веб-сервер nginx:

      $ sudo service nginx restart




Подробности статьи
Cтатья №:200
Создано:16 Apr 2017 11:39 PM

 Этот ответ мне помог  Этот ответ мне не помог

 Назад
 Войти [Пароль утерян] 
Электронная почта:
Пароль:
Запомнить меня:
 
 Поиск
 Опции статьи
Главная | Регистрация | Отправить тикет | База знаний | Новости | Загрузки
Язык:

Support Service Ruskyhost.ru © 2004-2013