Ctrl K
ComunidadGuías…

Dockerfile.scheduler

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# 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"]