Files

74 lines
2.1 KiB
Docker
Raw Permalink Normal View History

2025-11-24 08:22:44 -05:00
# ----- Build Stage -----
# Using a specific Ruby version (e.g., 3.3) for stability
ARG RUBY_VERSION=3.3.9
FROM ruby:$RUBY_VERSION as builder
# Install system dependencies needed for Ruby gems and asset building
RUN apt-get update -qq && apt-get install -y \
build-essential \
libpq-dev \
libvips \
nodejs \
npm \
git \
curl \
watchman \
&& rm -rf /var/lib/apt/lists/* \
# For TailwindCSS, install the npm package instead of relying on the system executable
# as there have been issues with architecture mismatches in containers
&& npm install -g tailwindcss
# Set the working directory inside the container
WORKDIR /usr/src/app
# Copy and install Ruby dependencies
COPY Gemfile Gemfile.lock ./
RUN bundle install
# Copy the rest of the application code
COPY . .
# Precompile assets for production using the installed Tailwind CLI
# This uses the installed 'tailwindcss' executable rather than the gem's wrapper
# RUN bundle exec rails assets:precompile
# ----- Production Stage -----
# Use a smaller Ruby image for the final production build
FROM ruby:$RUBY_VERSION-slim
# Install production system dependencies
RUN --mount=type=cache,target=/var/cache/apt \
--mount=type=cache,target=/var/lib/apt,sharing=locked \
--mount=type=tmpfs,target=/var/log \
rm -f /etc/apt/apt.conf.d/docker-clean; \
apt-get update -qq \
&& apt-get install -yq --no-install-recommends \
build-essential \
less \
git \
tdsodbc \
freetds-dev \
libvips \
libpq-dev
ENV LANG=C.UTF-8 \
BUNDLE_JOBS=4 \
BUNDLE_RETRY=3
WORKDIR /usr/src/app
# Copy runtime Ruby dependencies and the precompiled assets from the builder stage
COPY --from=builder /usr/local/bundle /usr/local/bundle
COPY --from=builder /usr/src/app /usr/src/app
COPY --from=builder /usr/local/bin/watchman /usr/local/bin/watchman
COPY --from=builder /usr/local/bin/watchman-wait /usr/local/bin/watchman-wai
# The entrypoint script is a good practice for handling Rails server startup
ENTRYPOINT ["./bin/docker-entrypoint-development"]
# Expose the application port
EXPOSE 3002
# Set the default command to run the Rails server
CMD ["./bin/rails", "server"]