На практике
На сервере не должно быть никаких утилит для деплоя, миграций и т.д., go мы туда не ставим. То есть deb пакет это самостоятельная единица, поставил заапдейтился, откалился - заролбечился.
тебе придется или хранить последовательность внедрения версий за пределами пакета или версию, которая была перед данным пакетом. А потом еще написать логику, как обработать различные варианты - есть версия, нет версии и тп
Работа демонов через systemd (или альтернативу)
тк альтернативы постепенно выпиливают из дистрибутивов, то и выбора та собственно -- нет
В теории
Как организовать репозиторий с сорцами go кода, нужно ли добавлять туда каркас deb пакета, может бинарники. Или нужно каждый раз создавать новую папку под новый пакет?
достаточно будет скрипта для обновления гита
сборки проекта на го
копирование файла, который будет делать миграции
копирования пары файлов, которые нужны пакетному менеджеру
Как при установке запускать миграции? Должно ли это быть решение в основном приложении на go, а deb пакете прокидывать миграции, например, в /etc/app/migrations. Или создавать для этого отдельный бинарник, который сможет работать с конфигами нашего приложения.
в деб пакете у тебя должны быть все миграции (или все миграции, которые могут понадобиться хоть какой-то инсталяции)
В окружении у тебя должен быть файл или переменная окружения последней рабочей версии
Читаем переменную - запускаем свой файл для миграции для поднятия версии до текущей версии из пакета
Учти, что хороший тон, создавать как upgrade так и downgrade миграции
Роллбечить пакеты, я б не советовал -- проще поднять версию пакета и указать в нем, что ты хочешь откатиться на предыдущую версию