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

Приклад деплою App на Ruby On Rails

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

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

Під root’ом:

Для нашого проекту створюємо окремого користувача deployer:

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

Налаштовуємо часовий пояс

Задаємо UTF-8 локаль, редагуємо /etc/default/locale до наступного вигляду:

У /etc/environment добавляємо наступне:

Далі виконаємо наступні команди

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

Під юзером deployer:

Інсталюємо RVM

актуальна інструкція на офіційному сайті – https://rvm.io/

на момент написання замітки, порядок був наступний:

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

Інсталюємо Passenger + Nginx

актуальна інструкція на оф.сайт, на момент написання замітки, порядок дій наступний:

Створюємо файл-конфіг хосту:

із наступним змістом

Підключаємо хост та перегружаємо nginx

cd /etc/nginx/sites-enabled/

ln -s /etc/nginx/site-available/mydomain.com

/etc/init.d/nginx restart

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

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

читаємо ключ та копіюємо його

та додаємо на git-сервер

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

Для деплоя проекту, нам потрібний 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!