53 lines
1.6 KiB
Docker
53 lines
1.6 KiB
Docker
FROM ruby:3.2.2-slim
|
|
|
|
# Fuso horário do container.
|
|
#
|
|
# POR QUE ISSO IMPORTA (caso real): a imagem sobe em UTC. O Rails até mostra a
|
|
# hora certa (`config.time_zone = "America/Sao_Paulo"`), mas TUDO que é do
|
|
# sistema operacional continuava 3h adiantado — timestamp de log, `date` nos
|
|
# scripts de bin/ e, o pior, o CRON: `every "*/30 8-18"` no config/schedule.rb
|
|
# rodava das 05h às 15h de Brasília, não das 08h às 18h.
|
|
#
|
|
# O cron do Debian lê `/etc/localtime`, não a variável TZ — por isso o symlink
|
|
# além do ENV. Os dois juntos cobrem processo Ruby e daemon de cron.
|
|
ENV TZ=America/Sao_Paulo
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
# Dependências do sistema
|
|
# tzdata: explícito de propósito. O zoneinfo já vem na imagem hoje, mas se um
|
|
# rebuild futuro pegar uma base enxuta o symlink acima quebra em silêncio e a
|
|
# hora volta a ficar errada — que é exatamente o bug que estamos fechando.
|
|
RUN apt-get update -qq && apt-get install -y \
|
|
build-essential \
|
|
libpq-dev \
|
|
nodejs \
|
|
npm \
|
|
curl \
|
|
git \
|
|
libvips \
|
|
cron \
|
|
tzdata \
|
|
&& ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime \
|
|
&& echo "$TZ" > /etc/timezone \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Diretório da app
|
|
WORKDIR /app
|
|
|
|
# Instala gems
|
|
COPY Gemfile Gemfile.lock* ./
|
|
RUN bundle install --jobs 4 --retry 3
|
|
|
|
# Copia o restante do código
|
|
COPY . .
|
|
|
|
# Pré-compila assets (em produção)
|
|
# RUN bundle exec rails assets:precompile
|
|
|
|
EXPOSE 3000
|
|
|
|
# O boot real (migrations, cron, servidor) mora em bin/docker-boot — ver os
|
|
# comentários lá. CMD aqui é só o fallback de quem roda a imagem sem o compose.
|
|
# (via `bash` — ver o motivo no docker-compose.yml)
|
|
CMD ["bash", "bin/docker-boot"]
|