sggr
@sggr
PHP, Ruby, GO

Как организовать деплой Go приложения?

В общем задача в следующем:
  • Собирать из бинарников(http api + несколько демонов) deb пакет
  • Работа демонов через systemd (или альтернативу)
  • Запускать миграции для базы данных, при установке или запуске новой версии deb пакета
  • На сервере не должно быть никаких утилит для деплоя, миграций и т.д., go мы туда не ставим. То есть deb пакет это самостоятельная единица, поставил заапдейтился, откалился - заролбечился.

Best way в интернетах не нашел, может кто может подсказать по следующим вопросам:
  1. Как организовать репозиторий с сорцами go кода, нужно ли добавлять туда каркас deb пакета, может бинарники. Или нужно каждый раз создавать новую папку под новый пакет?
  2. Как при установке запускать миграции? Должно ли это быть решение в основном приложении на go, а deb пакете прокидывать миграции, например, в /etc/app/migrations. Или создавать для этого отдельный бинарник, который сможет работать с конфигами нашего приложения.
  3. Организация работы с systemd. Опыта работы с ним не имел. На что обратить внимание, натыкались ли на грабли? Может есть лучшие альтернативы?
  • Вопрос задан
  • 1989 просмотров
Решения вопроса 1
sim3x
@sim3x
На практике
На сервере не должно быть никаких утилит для деплоя, миграций и т.д., go мы туда не ставим. То есть deb пакет это самостоятельная единица, поставил заапдейтился, откалился - заролбечился.
тебе придется или хранить последовательность внедрения версий за пределами пакета или версию, которая была перед данным пакетом. А потом еще написать логику, как обработать различные варианты - есть версия, нет версии и тп

Работа демонов через systemd (или альтернативу)
тк альтернативы постепенно выпиливают из дистрибутивов, то и выбора та собственно -- нет

В теории
Как организовать репозиторий с сорцами go кода, нужно ли добавлять туда каркас deb пакета, может бинарники. Или нужно каждый раз создавать новую папку под новый пакет?

достаточно будет скрипта для обновления гита
сборки проекта на го
копирование файла, который будет делать миграции
копирования пары файлов, которые нужны пакетному менеджеру

Как при установке запускать миграции? Должно ли это быть решение в основном приложении на go, а deb пакете прокидывать миграции, например, в /etc/app/migrations. Или создавать для этого отдельный бинарник, который сможет работать с конфигами нашего приложения.

в деб пакете у тебя должны быть все миграции (или все миграции, которые могут понадобиться хоть какой-то инсталяции)

В окружении у тебя должен быть файл или переменная окружения последней рабочей версии
Читаем переменную - запускаем свой файл для миграции для поднятия версии до текущей версии из пакета

Учти, что хороший тон, создавать как upgrade так и downgrade миграции

Роллбечить пакеты, я б не советовал -- проще поднять версию пакета и указать в нем, что ты хочешь откатиться на предыдущую версию
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
zoonman
@zoonman
⋆⋆⋆⋆⋆
capistrano
Ответ написан
Комментировать
vyachin
@vyachin
Ищу работу
ansible лучше)) нет нужды засорять систему установкой ruby . Ansible использует python, а он есть почти в любой linux системе
Ответ написан
Комментировать
@NikiN
сисадмин
Может вообще в docker-е сделать и не париться?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы