102 lines
2.8 KiB
Docker
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"]
|