Deploy Ruby on Rails – Nginx/Passenger/Postgres/Capistrano (ОНОВЛЕНО)

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

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

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

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

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

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

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

А в /etc/environment добавивмо наступне

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

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

Інсталюємо RVM

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

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

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

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

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

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

В моєму випадку було встановлено ruby 2.4.1 та passenger 5.1.11 (для інших версій правимо конфіг у відповідних місцях)

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

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

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

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

в 17.04 відсутній /etc/rc.local – створюємо його як описану тут

Генерація 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!