78 lines
2.3 KiB
Docker
78 lines
2.3 KiB
Docker
|
FROM ruby:2.7.7-alpine3.16 AS base
|
||
|
|
||
|
# Set a variable for the install location.
|
||
|
ARG RAILS_ROOT=/usr/src/app
|
||
|
# Set Rails environment.
|
||
|
ENV RAILS_ENV production
|
||
|
ENV BUNDLE_APP_CONFIG="$RAILS_ROOT/.bundle"
|
||
|
|
||
|
# Make the directory and set as working.
|
||
|
RUN mkdir -p $RAILS_ROOT
|
||
|
WORKDIR $RAILS_ROOT
|
||
|
|
||
|
ARG BUILD_PACKAGES="build-base curl-dev git"
|
||
|
ARG DEV_PACKAGES="postgresql-dev sqlite-libs sqlite-dev yaml-dev zlib-dev nodejs yarn"
|
||
|
ARG RUBY_PACKAGES="tzdata"
|
||
|
|
||
|
# Install app dependencies.
|
||
|
RUN apk update \
|
||
|
&& apk upgrade \
|
||
|
&& apk add --update --no-cache $BUILD_PACKAGES $DEV_PACKAGES $RUBY_PACKAGES
|
||
|
|
||
|
COPY Gemfile* ./
|
||
|
COPY Gemfile Gemfile.lock $RAILS_ROOT/
|
||
|
|
||
|
RUN bundle config --global frozen 1 \
|
||
|
&& bundle config set deployment 'true' \
|
||
|
&& bundle config set without 'development:test:assets' \
|
||
|
&& bundle install -j4 --path=vendor/bundle
|
||
|
RUN rm -rf vendor/bundle/ruby/2.7.0/cache/*.gem \
|
||
|
&& find vendor/bundle/ruby/2.7.0/gems/ -name "*.c" -delete \
|
||
|
&& find vendor/bundle/ruby/2.7.0/gems/ -name "*.o" -delete
|
||
|
|
||
|
# Adding project files.
|
||
|
COPY . .
|
||
|
|
||
|
# Remove folders not needed in resulting image
|
||
|
RUN rm -rf tmp/cache spec
|
||
|
|
||
|
############### Build step done ###############
|
||
|
|
||
|
FROM base
|
||
|
|
||
|
# Set a variable for the install location.
|
||
|
ARG RAILS_ROOT=/usr/src/app
|
||
|
ARG PACKAGES="tzdata curl postgresql-client sqlite-libs yarn nodejs bash gcompat"
|
||
|
|
||
|
ENV RAILS_ENV=production
|
||
|
ENV BUNDLE_APP_CONFIG="$RAILS_ROOT/.bundle"
|
||
|
|
||
|
WORKDIR $RAILS_ROOT
|
||
|
|
||
|
RUN apk update \
|
||
|
&& apk upgrade \
|
||
|
&& apk add --update --no-cache $PACKAGES
|
||
|
|
||
|
|
||
|
COPY --from=base $RAILS_ROOT $RAILS_ROOT
|
||
|
|
||
|
# Expose port 80.
|
||
|
EXPOSE 80
|
||
|
|
||
|
# Sets the footer of greenlight application with current build version
|
||
|
ARG version_code
|
||
|
ENV VERSION_CODE=$version_code
|
||
|
|
||
|
# Set executable permission to start file
|
||
|
RUN chmod +x bin/start
|
||
|
# Update HTTPClient cacert.pem with the latest Mozilla cacert.pem
|
||
|
RUN wget https://curl.se/ca/cacert.pem https://curl.se/ca/cacert.pem.sha256 -P /tmp
|
||
|
RUN cd /tmp && sha256sum cacert.pem > cacert.pem.sha256sum && cd ${RAILS_ROOT}
|
||
|
RUN diff /tmp/cacert.pem.sha256sum /tmp/cacert.pem.sha256
|
||
|
RUN mv -v /tmp/cacert.pem $(bundle info httpclient --path)/lib/httpclient/ && rm -v /tmp/cacert*
|
||
|
|
||
|
# Update Openssl certs [This is for Faraday adapter for Net::HTTP]
|
||
|
RUN [[ $(id -u) -eq 0 ]] && update-ca-certificates
|
||
|
# Start the application.
|
||
|
CMD ["bin/start"]
|