Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # syntax=docker/dockerfile:1
- # check=error=true
- # This Dockerfile is designed for production, not development. Use with Kamal or build'n'run by hand:
- # docker build -t jumpstart .
- # docker run -d -p 80:80 -e RAILS_MASTER_KEY=<value from config/master.key> --name jumpstart jumpstart
- # For a containerized dev environment, see Dev Containers: https://guides.rubyonrails.org/getting_started_with_devcontainer.html
- # Make sure RUBY_VERSION matches the Ruby version in .ruby-version
- ARG RUBY_VERSION=3.3
- FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim AS base
- # Rails app lives here
- WORKDIR /rails
- # Install base packages
- RUN apt-get update -qq && \
- apt-get install --no-install-recommends -y curl wget libjemalloc2 libvips sqlite3 postgresql-client && \
- rm -rf /var/lib/apt/lists /var/cache/apt/archives
- # Install dependencies for Chrome
- RUN apt-get update -qq && \
- apt-get install --no-install-recommends -y \
- wget \
- gnupg2 \
- ca-certificates
- # Add Google Chrome repository and install Chrome properly
- RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - && \
- echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list && \
- apt-get update -qq && \
- apt-get install -y google-chrome-stable && \
- rm -rf /var/lib/apt/lists/*
- # Update the PATH to use the properly installed Chrome
- ENV CHROME_PATH=/usr/bin/google-chrome
- ENV PATH="${PATH}:/usr/bin"
- # Set environment variables
- ENV PATH="${PATH}:/opt/chrome/opt/google/chrome"
- # Set production environment
- ENV RAILS_ENV="production" \
- BUNDLE_DEPLOYMENT="1" \
- BUNDLE_PATH="/usr/local/bundle" \
- BUNDLE_WITHOUT="development"
- # Throw-away build stage to reduce size of final image
- FROM base AS build
- # Install packages needed to build gems and node modules
- RUN apt-get update -qq && \
- apt-get install --no-install-recommends -y build-essential git libpq-dev node-gyp pkg-config python-is-python3 imagemagick libvips libvips-dev libvips-tools poppler-utils && \
- rm -rf /var/lib/apt/lists /var/cache/apt/archives
- # Install JavaScript dependencies
- ARG NODE_VERSION=20.17.0
- ARG YARN_VERSION=1.22.22
- ENV PATH=/usr/local/node/bin:$PATH
- RUN curl -sL https://github.com/nodenv/node-build/archive/master.tar.gz | tar xz -C /tmp/ && \
- /tmp/node-build-master/bin/node-build "${NODE_VERSION}" /usr/local/node && \
- npm install -g yarn@$YARN_VERSION && \
- rm -rf /tmp/node-build-master
- # Install application gems
- COPY Gemfile Gemfile.jumpstart Gemfile.lock ./.ruby-version ./
- COPY ./lib/jumpstart/ ./lib/jumpstart/
- COPY ./config/jumpstart.yml* ./config/jumpstart.yml
- RUN bundle install && \
- rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git && \
- bundle exec bootsnap precompile --gemfile
- RUN gem install foreman
- # Install node modules
- COPY package.json yarn.lock ./
- RUN yarn install --frozen-lockfile
- # Copy application code
- COPY . .
- # Precompile bootsnap code for faster boot times
- 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
- # Copy built artifacts: gems, application
- COPY --from=build "${BUNDLE_PATH}" "${BUNDLE_PATH}"
- COPY --from=build /rails /rails
- # Run and own only the runtime files as a non-root user for security
- RUN groupadd --system --gid 1000 rails && \
- useradd rails --uid 1000 --gid 1000 --create-home --shell /bin/bash && \
- chown -R rails:rails db log storage tmp
- USER 1000:1000
- # Entrypoint prepares the database.
- ENTRYPOINT ["./bin/docker-entrypoint"]
- # Start the server by default, this can be overwritten at runtime
- EXPOSE 3000
- CMD ["./bin/rails", "server"]
- #CMD ["foreman", "start"]
Advertisement
Add Comment
Please, Sign In to add comment