- сервис поднимается через `task up`/`task restart`, данные вынесены в ./data и переживают пересборку — поток с телефона не прерывается - `task gate` гоняет build/vet/lint/test/race/покрытие диффа/миграции, плюс два шага под healthlog: данные о здоровье в индексе и синхронность образцов конфига - `task review:context` собирает вход для архитектурного прохода ревью
25 lines
1.6 KiB
Docker
25 lines
1.6 KiB
Docker
# Упаковка готового статического бинаря в минимальный образ.
|
||
#
|
||
# Бинарь собирается СНАРУЖИ, а не внутри образа:
|
||
# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o healthlog ./cmd/healthlog
|
||
# Так пересборка идёт по горячему кэшу Go на хосте — секунды вместо минут,
|
||
# что важно при частом цикле «поправил → перезапустил». Готовит бинарь
|
||
# `task build`, от которой зависит `task up`.
|
||
#
|
||
# distroless/static: без shell и пакетного менеджера, только CA-сертификаты.
|
||
# Пользователь задаётся в compose (user: "1000:1000") — чтобы файлы в томе
|
||
# принадлежали хозяину каталога, а не root.
|
||
FROM gcr.io/distroless/static-debian12
|
||
|
||
COPY healthlog /usr/local/bin/healthlog
|
||
|
||
EXPOSE 8080
|
||
|
||
# В distroless нет ни shell, ни curl — проверку делает сам бинарь, порт берёт
|
||
# из конфига. Путь к конфигу задаём явно: умолчание загрузчика — config.toml
|
||
# в рабочей директории, а конфиг смонтирован в /config.
|
||
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
|
||
CMD ["/usr/local/bin/healthlog", "healthcheck", "--config", "/config/config.toml"]
|
||
|
||
ENTRYPOINT ["/usr/local/bin/healthlog", "serve", "--config", "/config/config.toml"]
|