Compare commits
1 Commits
main
...
alpine-ima
| Author | SHA1 | Date | |
|---|---|---|---|
| 3abc6bb5a8 |
34
Dockerfile
34
Dockerfile
@ -2,7 +2,8 @@
|
||||
|
||||
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
|
||||
ARG RUBY_VERSION=3.4.3
|
||||
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim AS base
|
||||
FROM ghcr.io/surnet/alpine-wkhtmltopdf:3.22.0-024b2b2-full as wkhtmltopdf
|
||||
FROM ruby:${RUBY_VERSION}-alpine3.21 AS base
|
||||
|
||||
# Rails app lives here
|
||||
WORKDIR /rails
|
||||
@ -13,14 +14,24 @@ ENV RAILS_ENV="production" \
|
||||
BUNDLE_PATH="/usr/local/bundle" \
|
||||
BUNDLE_WITHOUT="development"
|
||||
|
||||
RUN apt-get update && apt-get install -y nodejs wkhtmltopdf
|
||||
# Install runtime dependencies
|
||||
RUN apk update && \
|
||||
apk add --no-cache nodejs
|
||||
|
||||
COPY --from=wkhtmltopdf /bin/wkhtmltopdf /bin/
|
||||
|
||||
# Throw-away build stage to reduce size of final image
|
||||
FROM base AS build
|
||||
|
||||
# Install packages needed to build gems
|
||||
RUN apt-get update -qq && \
|
||||
apt-get install --no-install-recommends -y build-essential git libpq-dev libvips pkg-config libyaml-dev
|
||||
RUN apk update && \
|
||||
apk add --no-cache \
|
||||
build-base \
|
||||
git \
|
||||
postgresql-dev \
|
||||
vips-dev \
|
||||
pkgconfig \
|
||||
yaml-dev
|
||||
|
||||
# Install application gems
|
||||
COPY Gemfile Gemfile.lock ./
|
||||
@ -37,23 +48,24 @@ RUN bundle exec bootsnap precompile app/ lib/
|
||||
# Precompiling assets for production without requiring secret RAILS_MASTER_KEY
|
||||
RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile
|
||||
|
||||
|
||||
# Final stage for app image
|
||||
FROM base
|
||||
|
||||
# Install packages needed for deployment
|
||||
RUN apt-get update -qq && \
|
||||
apt-get install --no-install-recommends -y curl libvips postgresql-client && \
|
||||
rm -rf /var/lib/apt/lists /var/cache/apt/archives
|
||||
RUN apk update && \
|
||||
apk add --no-cache \
|
||||
curl \
|
||||
vips \
|
||||
postgresql-client
|
||||
|
||||
# Copy built artifacts: gems, application
|
||||
COPY --from=build /usr/local/bundle /usr/local/bundle
|
||||
COPY --from=build /rails /rails
|
||||
|
||||
# Run and own only the runtime files as a non-root user for security
|
||||
RUN useradd rails --create-home --shell /bin/bash && \
|
||||
chown -R rails:rails db log storage tmp
|
||||
USER rails:rails
|
||||
RUN adduser -D -h /home/rails rails && \
|
||||
chown -R rails:rails db log storage tmp || true
|
||||
USER rails
|
||||
|
||||
# Entrypoint prepares the database.
|
||||
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user