Deploy Ruby on Rails – Nginx/Passenger/Postgres/Capistrano

 

Приклад деплоя app на Ruby On Rails

В даній замітці розглядається приклад деплою проетку під назвою tools на   VPS-сервер Ubuntu 16.04 в каталог /home/deployer/apps/project/, код проекту знаходиться на git-сервері bitbucket.org у приватному репозиторію. Використовуємо Ruby 2.4.0 та Ruby On Rails 5

 

Підготовка VPS-серверу

Створюємо користувача deployer, в цілях деплоя нашого app

Додаємо його в sudo (/etc/sudoers)

Оновлюємо встановлений софт та інсталюємо необхідне ПО

Якщо виникає warning на кшталт

виконуємо наступні дії:

якщо у warning'у фігурує 'uk_UA.UTF-8', то відповідно
 

(у мене ця помилка виникала в Ubuntu 14.04. Без її усунення будемо мати проблеми при інсталяції Postgres)

Інсталюємо RVM

Створюємо базу даних та користувача

Інсталюємо Bundler та Passenger

Знищуємо nginx, якщо він був встановлений

Інсталюємо Nginx та редагуємо конфігураційни файл default-хосту

Вище наведена команда скачає, скомпілює та заінсталює ngnix (за змовчанням в /opt/nginx) з підтримкою passenger (в інтерактивному режимі вибераємо Ruby, потім варіант установки – 1)

Конфігураційний файл /opt/nginx/conf/nginx.conf

Автозапуска Nginx

Оскільки nginx ми встановлювали не з пакета, а компілювали, скрипт запуска в /etc/ini.d/ відсутній. Тому, створюємо файл /usr/sbin/nginx наступного вмісту

та надаємо права для виконання

Тепер добавимо в /etc/rc.local до рядка exit 0 наступне

Генерація ssh ключів

Оскільки користувачу deployer потрібний доступ до git-серверу а  репозиторій проекту у нас приватний,  ми генеруємо ssh-key

та додаємо ключ

Підготовка проекту на локальній машині для деплоя

Для деплоя проекту, нам потрібний ssh-доступ з докальної машини на VPS-сервер, для цього добавимо ssh-key на сервер deploy'я

якщо у config/secrets.yml  ми маємо

тоді генеруємо токен

та вставляємо його замість <%= ENV[“SECRET_KEY_BASE”] %> 

Якщо проект в стадії розробки, варто буде в config/environments/production.rb задати

щоб бачити реальні помилки замість сторінки із "we're sorry"

Capistrano

В нашому локальному проекті добавимо наступні gem'и (в Gemfile)


Виконуємо інсталяцію нових gem'ів та capistrano

В результаті у нас з'являться наступні два нові файли
config/deploy.rb
config/deploy/production.rb

 

Конфігурація config/deploy.rb

Конфігурація config/deploy/production.rb, полягає лише у втсавці ip-адресу vps-серверу

Якщо ви не захотіли по якійсь причині використовувати ключі для доступу до VPS-серверу, ми можете прописати ssh-параметри доступу в цьому файлі

Конфігурація Capfile

Виконуємо deploy!