3.9 KiB
3.9 KiB
Go и доставка одним бинарём
- Дата: 2026-06-13
Контекст
Jellybit — новый сервис, который будет жить на домашнем медиа-сервере umbar. Нужно выбрать язык и способ доставки. Силы и ограничения:
- Это домашняя лаборатория, хочется максимально простой доставки: собрал здесь — скопировал готовый артефакт на сервер, без рантайма и лишних зависимостей на самой машине.
- В umbar уже устоялось разделение: Python+uv используется вместе с Ansible (инфраструктура), а не для прикладных сервисов.
- У автора уже есть несколько сервисов на Go — это знакомый и привычный стек именно под сервисы.
- Сервису нужны: клиент qBittorrent, обращения к LLM, опц. клиенты TMDB/TVDB, разбор имён релизов.
Рассмотренные варианты
- Go — один статический бинарь (
CGO_ENABLED=0), копируется на сервер; минимальный docker-образ. Знакомый стек. Минус: нет хорошего аналога питоновскогоguessitдля разбора имён релизов. - Python + uv — богатая экосистема распознавания (
guessit), но тянет рантайм и зависимости на сервер; в проекте уже занят инфра-ролью при Ansible. Смешивать прикладной сервис с инфра-тулингом не хочется. - TypeScript / Node — экосистема есть, но рантайм на сервере и не основной стек автора для сервисов.
Решение
Пишем jellybit на Go, доставляем одним статическим бинарём: сборка в этом репозитории → готовый артефакт с нужной обвязкой копируется на umbar. На сервере не нужны ни рантайм, ни менеджер пакетов.
Причина: при домашней лаборатории решающее — простота доставки и
знакомство со стеком, а не богатство библиотек распознавания. Слабость Go
в разборе имён релизов закрываем дешёвым go-ptn плюс основной разбор всё
равно делает LLM; при нехватке точности guessit можно завернуть лёгким
сервисом-спутником рядом с бинарём (тоже один файл). Python остаётся за
инфраструктурой (umbar, Ansible).
Последствия
+Доставка тривиальна: один файл, без рантайма и зависимостей на сервере; минимальный docker-образ.+Стек знаком автору, переиспользуется опыт других Go-сервисов.+Чёткая граница: Go — прикладные сервисы, Python+uv — инфра.-Нет первоклассногоguessit; точность пред-парса ниже. Митигация:go-ptn+ LLM, при необходимости — guessit-спутник.-Часть клиентов (например, TVDB v4) придётся писать руками — зрелых готовых библиотек меньше, чем в Python.