mirror of
https://github.com/melgarafael/DeskcommCRM.git
synced 2026-10-02 01:28:34 +08:00
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>
32 lines
1.4 KiB
Docker
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"]
|