Files
DeskcommCRM/Dockerfile.scheduler
T
bonito-systemandClaude Opus 5.5 61c4b46dd2 perf(imagens): o ARG de versão vem depois das camadas caras
No BuildKit a instrução ARG entra na chave de cache de tudo o que vem depois,
e APP_VERSION muda a cada release. No worker ela vinha antes do pnpm install:
toda release reinstalava as dependências inteiras. No app (runner) e no
scheduler, antes do apk add. Agora declaração e uso descem para depois das
camadas caras, junto da cópia do artefato.

Medido com Docker real (Dockerfile.scheduler, cache limpo, duas versões):
main oficial → apk add DONE 1.2s nas duas; este commit → DONE e depois CACHED.
A imagem segue com APP_VERSION certo (conferido dentro do contêiner).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 02:23:56 +00:00

32 lines
1.4 KiB
Docker

# Scheduler dos crons — busybox crond batendo nas rotas /api/v1/cron/* pela rede
# interna do compose. Sem docker.sock: o contêiner não fala com o daemon, só HTTP.
#
# Existe como imagem (em vez de `alpine:3.20` + `apk add` no command do compose)
# porque instalar pacote em todo start amarra a recuperação do cron do cliente à
# internet da VPS e ao mirror do Alpine — dependência de rede num caminho que
# deveria ser offline. Doutrina: docs/doctrine/packaging.md, invariante 1.
FROM alpine:3.20
LABEL org.opencontainers.image.source="https://github.com/melgarafael/DeskcommCRM" \
org.opencontainers.image.licenses="MIT" \
org.opencontainers.image.title="DeskcommCRM scheduler"
ENV TZ=UTC
RUN apk add --no-cache curl tzdata
COPY docker/scheduler/entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
# A versão depois das camadas que custam (o `apk add`): a instrução `ARG` entra
# na chave de cache de tudo o que vem depois, e ela muda a cada release.
ARG APP_VERSION=dev
ENV APP_VERSION=$APP_VERSION
# Prova de vida: se o crond morrer, o contêiner cai e o `restart: unless-stopped`
# o traz de volta. Sem isto, um crond morto fica indistinguível de um cron ocioso.
HEALTHCHECK --interval=60s --timeout=5s --start-period=10s --retries=3 \
CMD pgrep crond >/dev/null || exit 1
CMD ["/usr/local/bin/entrypoint.sh"]