Эта статья является результатом недельного поиска весьма разрозненной информации о том, как же настроить деплой web-сервиса на Go. Не на Heroku, не на Docker, не на Digital Ocean, а просто на старомодный VDS с CentOS 7x64. Почему-то в сети нет этой информации, а большинство туториалов начинаются с того, как настроить билд, и заканчиваются запуском тестов.
Сразу предупрежу, что впервые настраивал CI/CD процесс, так что это статья от новичка новичку.
Наверняка здесь многое можно будет поправить, так что любые замечания с удовольствием приму в комментариях и постараюсь обновить изменения как можно скорее. Так же, возможно, что такая статья уже есть, и я просто ужасно пользуюсь поисковиком. Тогда дайте, пожалуйста, ссылку на неё, и в этом случае, я удалю статью и пойду посыпать голову пеплом.
Сначала создадим сервис для нашего приложения. В CentOS 7 это делается довольно просто. Нужно написать вот такой скрипт в файле под названием serviceName.service:
[Unit]
# Описание сервиса
Description=Service Description
After=network.target
[Service]
Type=simple
# Имя пользователя, от имени которого будет запускаться сервис
User=username
# Путь до сервиса
ExecStart=/username/service/binaryFile
Restart=on-abort
[Install]
WantedBy=multi-user.target
Сам скрипт необходимо положить в папку etc/systemd/system/
Настройка SSH
На сервере запускаем команду:
ssh-keygen -f /etc/ssh/hmp.key
На просьбу
Enter passphrase (empty for no passphrase)
не вводим пароль, просто нажимаем на Enter.
В папке /etc/ssh/ сгенерируется два файла:
hmp.key — приватный ключ
hmp.key.pub — публичный ключ
Нам нужен приватный ключ. Просматриваем его содержимое с помощью команды:
cat /etc/ssh/hmp.key
Оно будет выглядеть примерно так:
-----BEGIN RSA PRIVATE KEY-----
{Здесь сам по себе ключ}
-----END RSA PRIVATE KEY-----
Все полностью копируем себе в буфер обмена
ВНИМАНИЕ! — не только сам ключ, но и
-----BEGIN RSA PRIVATE KEY----- и -----END RSA PRIVATE KEY-----
Настройка Gitlab
Сначала заполним данные, важные для деполя, (имя пользователя, пароль и.т.п.).
Даже если Ваш репозиторий публичный, они останутся закрытыми.
В Gitlab в репозитории заходим в Settings --> CI/CD --> Variables. Создаем там следующие переменные:
SSH_PRIVATE_KEY — сюда вставляем значение, скопированное в предыдущем пункте
USER_PASS — пароль пользователя, из под которого будет запускаться приложение
USER — имя пользователя, из под которого будет запускаться приложение