* Use premade development image. * Use prebuilt container for podman-compose too! * Fix bundle bundle_finished path. * Fix docker-compose to work with the Multistage Containerfile Add root user for Forem containers, fix bundle_finished path and make webpacker wait for the bundle to finish. Switch Redis to redis:6.0.9-alpine * Remove build steps and fix bundle path. * Merge dev entrypoint into the main one. * Use merged entrypoint.sh, remove old entrypoint directives, and fix a dockerize bug. * Make sure unset BUNDLE_WITHOUT and remove without in bundle config. * Unset BUNDLE_WITHOUT="development:test" as a global ENV. Also ensure that we remove the without directives for development and testing. This will make sure that the right gems are installed for each environment. Removed some unneeded COPYs and remove a commented out RUN. * Fix ENTRYPOINT on development and testing containers. * Fix entrypoint and command on rails container. * Ignore bundle_finished file. * Fix REDIS_ env vars and adjust podman-compose file. * Change bundle_finished path and update Yarn docker-compose command.
128 lines
4.5 KiB
Docker
128 lines
4.5 KiB
Docker
FROM quay.io/forem/ruby:2.7.2 as builder
|
|
|
|
USER root
|
|
|
|
RUN curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo && \
|
|
dnf install --setopt install_weak_deps=false -y \
|
|
ImageMagick iproute jemalloc less libcurl libcurl-devel \
|
|
libffi-devel libxml2-devel libxslt-devel nodejs pcre-devel \
|
|
postgresql postgresql-devel tzdata yarn && \
|
|
dnf -y clean all && \
|
|
rm -rf /var/cache/yum
|
|
|
|
ENV BUNDLER_VERSION=2.1.4 BUNDLE_SILENCE_ROOT_WARNING=true BUNDLE_SILENCE_DEPRECATIONS=true
|
|
RUN gem install -N bundler:"${BUNDLER_VERSION}"
|
|
|
|
ENV APP_USER=forem APP_UID=1000 APP_GID=1000 APP_HOME=/opt/apps/forem \
|
|
LD_PRELOAD=/usr/lib64/libjemalloc.so.2
|
|
RUN mkdir -p ${APP_HOME} && chown "${APP_UID}":"${APP_GID}" "${APP_HOME}" && \
|
|
groupadd -g "${APP_GID}" "${APP_USER}" && \
|
|
adduser -u "${APP_UID}" -g "${APP_GID}" -d "${APP_HOME}" "${APP_USER}"
|
|
|
|
ENV DOCKERIZE_VERSION=v0.6.1
|
|
RUN wget https://github.com/jwilder/dockerize/releases/download/"${DOCKERIZE_VERSION}"/dockerize-linux-amd64-"${DOCKERIZE_VERSION}".tar.gz \
|
|
&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-"${DOCKERIZE_VERSION}".tar.gz \
|
|
&& rm dockerize-linux-amd64-"${DOCKERIZE_VERSION}".tar.gz \
|
|
&& chown root:root /usr/local/bin/dockerize
|
|
|
|
WORKDIR "${APP_HOME}"
|
|
|
|
COPY ./.ruby-version "${APP_HOME}"/
|
|
COPY ./Gemfile ./Gemfile.lock "${APP_HOME}"/
|
|
COPY ./vendor/cache "${APP_HOME}"/vendor/cache
|
|
|
|
RUN bundle config --local build.sassc --disable-march-tune-native && \
|
|
BUNDLE_WITHOUT="development:test" bundle install --deployment --jobs 4 --retry 5 && \
|
|
find "${APP_HOME}"/vendor/bundle -name "*.c" -delete && \
|
|
find "${APP_HOME}"/vendor/bundle -name "*.o" -delete
|
|
|
|
COPY . "${APP_HOME}"
|
|
|
|
RUN mkdir -p "${APP_HOME}"/public/{assets,images,packs,podcasts,uploads}
|
|
|
|
RUN RAILS_ENV=production NODE_ENV=production bundle exec rake assets:precompile
|
|
|
|
RUN echo $(date -u +'%Y-%m-%dT%H:%M:%SZ') >> "${APP_HOME}"/FOREM_BUILD_DATE && \
|
|
echo $(git rev-parse --short HEAD) >> "${APP_HOME}"/FOREM_BUILD_SHA && \
|
|
rm -rf "${APP_HOME}"/.git/
|
|
|
|
RUN rm -rf node_modules vendor/assets spec
|
|
|
|
## Production
|
|
FROM quay.io/forem/ruby:2.7.2 as production
|
|
|
|
USER root
|
|
|
|
RUN dnf install --setopt install_weak_deps=false -y bash curl ImageMagick \
|
|
iproute jemalloc less libcurl \
|
|
postgresql tzdata \
|
|
&& dnf -y clean all \
|
|
&& rm -rf /var/cache/yum
|
|
|
|
ENV BUNDLER_VERSION=2.1.4 BUNDLE_SILENCE_ROOT_WARNING=1
|
|
RUN gem install -N bundler:"${BUNDLER_VERSION}"
|
|
|
|
ENV APP_USER=forem APP_UID=1000 APP_GID=1000 APP_HOME=/opt/apps/forem \
|
|
LD_PRELOAD=/usr/lib64/libjemalloc.so.2
|
|
RUN mkdir -p ${APP_HOME} && chown "${APP_UID}":"${APP_GID}" "${APP_HOME}" && \
|
|
groupadd -g "${APP_GID}" "${APP_USER}" && \
|
|
adduser -u "${APP_UID}" -g "${APP_GID}" -d "${APP_HOME}" "${APP_USER}"
|
|
|
|
COPY --from=builder --chown="${APP_USER}":"${APP_USER}" ${APP_HOME} ${APP_HOME}
|
|
|
|
USER "${APP_USER}"
|
|
WORKDIR "${APP_HOME}"
|
|
|
|
VOLUME "${APP_HOME}"/public/
|
|
|
|
ENTRYPOINT ["./scripts/entrypoint.sh"]
|
|
|
|
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-p", "3000"]
|
|
|
|
## Testing
|
|
FROM builder AS testing
|
|
|
|
USER root
|
|
|
|
RUN dnf install --setopt install_weak_deps=false -y \
|
|
chromium-headless chromedriver && \
|
|
yum clean all && \
|
|
rm -rf /var/cache/yum
|
|
|
|
COPY --chown="${APP_USER}":"${APP_USER}" ./spec "${APP_HOME}"/spec
|
|
COPY --from=builder /usr/local/bin/dockerize /usr/local/bin/dockerize
|
|
|
|
RUN chown "${APP_USER}":"${APP_USER}" -R "${APP_HOME}"
|
|
|
|
USER "${APP_USER}"
|
|
|
|
RUN bundle config --local build.sassc --disable-march-tune-native && \
|
|
bundle config --delete without && \
|
|
bundle install --deployment --jobs 4 --retry 5 && \
|
|
find "${APP_HOME}"/vendor/bundle -name "*.c" -delete && \
|
|
find "${APP_HOME}"/vendor/bundle -name "*.o" -delete
|
|
|
|
ENTRYPOINT ["./scripts/entrypoint.sh"]
|
|
|
|
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-p", "3000"]
|
|
|
|
## Development
|
|
FROM builder AS development
|
|
|
|
COPY --chown="${APP_USER}":"${APP_USER}" ./spec "${APP_HOME}"/spec
|
|
COPY --from=builder /usr/local/bin/dockerize /usr/local/bin/dockerize
|
|
|
|
RUN chown "${APP_USER}":"${APP_USER}" -R "${APP_HOME}"
|
|
|
|
USER "${APP_USER}"
|
|
|
|
RUN bundle config --local build.sassc --disable-march-tune-native && \
|
|
bundle config --delete without && \
|
|
bundle install --deployment --jobs 4 --retry 5 && \
|
|
find "${APP_HOME}"/vendor/bundle -name "*.c" -delete && \
|
|
find "${APP_HOME}"/vendor/bundle -name "*.o" -delete
|
|
|
|
ENTRYPOINT ["./scripts/entrypoint.sh"]
|
|
|
|
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0", "-p", "3000"]
|
|
|