Dockerfile.web
############################
# STEP 1 build base image
############################
FROM ruby:2.7.8-bullseye as base
RUN apt-get update \
&& apt-get install -y apt-transport-https \
&& apt-get update \
&& apt-get install -y --no-install-recommends \
bash curl nginx sudo libjemalloc-dev \
postgresql-client apt-transport-https
ENV RAILS_ENV "production"
ENV RACK_ENV "production"
ENV RAILS_SERVE_STATIC_FILES "enabled"
ENV RAILS_LOG_TO_STDOUT "enabled"
ENV WORKDIR /app/cheidelacoriera
WORKDIR "${WORKDIR}"
COPY .ruby-version Gemfile Gemfile.lock "${WORKDIR}/"
RUN gem install bundler -v "$(tail -n 1 Gemfile.lock | tr -d '[:blank:]')"
# RUN bundle config set deployment 'true' && \
RUN bundle config set no-cache 'true' && \
bundle config set without 'development test lint'
RUN bundle install --jobs 4 || bundle check
COPY Rakefile config.ru "${WORKDIR}/"
COPY ./app "${WORKDIR}/app"
COPY ./bin "${WORKDIR}/bin"
COPY ./config "${WORKDIR}/config"
COPY ./data "${WORKDIR}/data"
COPY ./db "${WORKDIR}/db"
COPY ./lib "${WORKDIR}/lib"
COPY ./public "${WORKDIR}/public"
COPY ./vendor "${WORKDIR}/vendor"
############################
# STEP 2 compile assets
############################
FROM base as assets
ENV NODE_ENV "production"
# Install node and yarn
ADD https://deb.nodesource.com/gpgkey/nodesource.gpg.key /tmp/node-pubkey.gpgkey
RUN apt-key add /tmp/node-pubkey.gpgkey && rm /tmp/node-pubkey.gpgkey
ADD https://dl.yarnpkg.com/debian/pubkey.gpg /tmp/yarn-pubkey.gpg
RUN apt-key add /tmp/yarn-pubkey.gpg && rm /tmp/yarn-pubkey.gpg
RUN echo "deb https://deb.nodesource.com/node_16.x/ stretch main" > /etc/apt/sources.list.d/nodesource.list \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
# Need to update debian version
&& rm /etc/apt/sources.list.d/nodesource.* \
&& apt-get update --allow-releaseinfo-change\
&& apt-get install -y --no-install-recommends \
nodejs yarn
COPY .yarnclean yarn.lock package.json .browserslistrc babel.config.js postcss.config.js tsconfig.json "${WORKDIR}/"
RUN rm -rf ./public/assets ./public/packs ./public/packs-test
RUN ./bin/compile_assets
############################
# STEP 3 build web image
############################
FROM base
# Cleanup apt repositories
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Copy the assets from the previous step
COPY --from=assets "${WORKDIR}/public" "${WORKDIR}/public"
COPY ./stack "${WORKDIR}/stack"
COPY ./stack/nginx/default-site.conf /etc/nginx/sites-available/default
COPY ./stack/nginx/nginx.conf /etc/nginx/nginx.conf
ENV SECRET_KEY_BASE $(bundle exec rake secret)
ENTRYPOINT ["./stack/docker/entrypoint.sh"]
CMD ["./stack/docker/start.sh"]