iachat/docker/Dockerfile
2026-02-25 17:03:14 -03:00

102 lines
2.8 KiB
Docker

# pre-build stage
FROM node:23-alpine as node
FROM ruby:3.4.4-alpine3.21 AS pre-builder
ARG PNPM_VERSION="10.2.0"
ENV PNPM_VERSION=${PNPM_VERSION}
# install node
COPY --from=node /usr/local/bin/node /usr/local/bin/node
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
COPY --from=node /usr/local/include/node /usr/local/include/node
RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs \
&& ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
&& ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx
# Install system dependencies
RUN apk update && apk add --no-cache \
build-base \
git \
tzdata \
postgresql-dev \
postgresql-client \
curl \
xz \
vips-dev \
imagemagick \
libffi-dev \
shared-mime-info
WORKDIR /app
# Install pnpm
RUN npm install -g pnpm@${PNPM_VERSION}
# Copy dependency files first for caching
COPY Gemfile Gemfile.lock ./
RUN bundle config set --local force_ruby_platform true \
&& bundle config set --local without 'development test' \
&& bundle install -j "$(getconf _NPROCESSORS_ONLN)" -r 3
COPY package.json pnpm-lock.yaml ./
RUN pnpm config set store-dir /pnpm/store \
&& pnpm i --frozen-lockfile
# Copy application code
COPY . .
# Generate production assets
# Usando RAILS_ENV=production explicitamente e garantindo que não tente conectar ao DB/Redis
RUN bundle exec rake assets:precompile \
RAILS_ENV=production \
SECRET_KEY_BASE=placeholder_for_compilation \
RAILS_LOG_TO_STDOUT=enabled \
DATABASE_URL=postgresql://fake_user:fake_password@localhost:5432/fake_db \
REDIS_URL=redis://localhost:6379/0 \
&& rm -rf spec node_modules tmp/cache
# Generate .git_sha file
RUN git rev-parse HEAD > /app/.git_sha || echo "no-git" > /app/.git_sha
# final build stage
FROM ruby:3.4.4-alpine3.21
ARG PNPM_VERSION="10.2.0"
ENV PNPM_VERSION=${PNPM_VERSION}
# Adicionando dependências de runtime necessárias para as gemas compiladas
RUN apk update && apk add --no-cache \
openssl \
tzdata \
postgresql-client \
imagemagick \
git \
vips \
ffmpeg \
shared-mime-info \
libstdc++ \
libffi \
gcompat
WORKDIR /app
COPY --from=node /usr/local/bin/node /usr/local/bin/node
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
RUN ln -s /usr/local/bin/node /usr/local/bin/nodejs \
&& ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
&& ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx \
&& npm install -g pnpm@${PNPM_VERSION}
COPY --from=pre-builder /usr/local/bundle /usr/local/bundle
COPY --from=pre-builder /app /app
ENV RAILS_ENV=production
ENV NODE_ENV=production
ENV RAILS_SERVE_STATIC_FILES=true
ENV RAILS_LOG_TO_STDOUT=true
EXPOSE 3000
CMD ["bundle", "exec", "rails", "s", "-b", "0.0.0.0"]