Так сложилось, что мои пет-проекты хранятся на гитхабе, а разворачиваю я их на арендованном виртуальном сервере (VPS).
В этом посте хочу вкратце описать то, как я делаю настройку деплоя и запуска/перезапуска приложения.
Настройки на стороне сервера
Как правило, для каждого приложения я создаю отдельного пользователя. Для этого нужно подключится к серверу от рута и запустить следующую команду.
Для управления приложением я использую стандартный линуксовый менеджер служб systemd, поскольку через него можно достаточно быстро и гибко настроить запуск/перезапуск/контроль приложения.
Для добавления нового сервиса нужно создать файл, в моем случае /etc/systemd/system/botbek.service, с примерно следующим содержимым.
Видно, что я указал необходимые зависимости, переменные для запуска приложения, а также команды для запуска и остановки.
И последний штрих - нужно дать возможность нашему пользователю вызывать systemctl
. Для этого нужно выдать права поправив файлик sudoers. Это делается через команду visudo
Где нужно добавить строку
botbek ALL=NOPASSWD: /usr/bin/systemctl status botbek.service, /usr/bin/systemctl start botbek.service, /usr/bin/systemctl restart botbek.service
Где говорим, что пользователь botbek может вызывать systemctl для проверки статуса и старта/рестарта приложения.
Настройки на стороне GitHub
В репозитории проекта, для настройки/запуска пайплайнов существует Github Actions. В зависимости от того на каком языке вы пишете настройка может отличаться, но суть одна - нужно собрать проект, (опционально) прогнать тесты, загрузить сборку на сервер и при необходимости запустить/перезапустить приложение. В моем случае для проекта написанного на языке Scala у меня будет создан файл .github/workflows/scala.yml
в который добавляю следующие правила.
По содержимому видно, что пайплайн запускается в ветке master при каждом пуше в него. Джоба состоит из трех шагов:
- сначала настраивается java с требуемой версией
- далее выполняется сборка
- и, собственно, деплой на виртуальный сервер по scp
Так же видим, что для подключения к серверу используются секреты - хост (SSH_HOST
), пользователь (SSH_USER
) и пароль (SSH_PASSWORD
). Их можно добавить в настройках репозитория в следующей вкладке Settings -> Security -> Secrets -> Actions
.
Проверка
После успешного завершения пайплайна, подключимся на сервер по ssh.
И проверим, что файл был успешно загружен.
Запускаем и проверяем, что служба активна