ARG RUBY_VERSION=3.4 ARG NAME=app ARG UID=1000 ARG GID=1000 ARG INSTALL_DIR=/home/${NAME}/src FROM ruby:${RUBY_VERSION} as development LABEL maintainer='david@hohl.cloud' ARG NAME ARG UID ARG GID ARG INSTALL_DIR WORKDIR ${INSTALL_DIR} ENV GEM_HOME=${INSTALL_DIR}/.bundle ENV \ LANG=C.UTF-8 \ INSTALL_DIR=${INSTALL_DIR} \ RAILS_ENV=development \ TZ=Europe/Zurich \ PATH=${INSTALL_DIR}/bin:$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH \ EDITOR=vim RUN \ ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ echo $TZ > /etc/timezone && \ addgroup --gid ${GID} ${NAME} && \ adduser \ --gecos GECOS \ --home /home/${NAME} \ --uid ${UID} \ --gid ${GID} \ --disabled-password \ --disabled-login \ --shell /bin/bash \ ${NAME} && \ chown -R ${NAME}:${NAME} /home/${NAME} && \ apt-get update && \ apt-get install -yqq --no-install-recommends \ gnupg2 \ curl && \ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \ apt-get update -yqq && \ apt-get install -yqq --no-install-recommends \ sqlite3 nodejs npm sassc yarn libvips libjemalloc2 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ truncate -s 0 /var/log/*log && \ gem update --system && \ bundle config set app_config ${GEM_HOME} ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 COPY bin/dev_entrypoint /usr/local/bin/dev_entrypoint USER ${NAME} ENTRYPOINT ["/usr/local/bin/dev_entrypoint"] CMD ["/bin/sh", "-c", "dev"] FROM development AS build USER root # Wir wollen die bundles nicht im app directory ENV GEM_HOME=/usr/local/bundle \ BUNDLE_WITHOUT="development test" \ RAILS_ENV=production \ SECRET_KEY_BASE_DUMMY=1 ENV PATH=${INSTALL_DIR}/bin:$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH COPY ./Gemfile ./Gemfile.lock ./ RUN bundle config set app_config ${GEM_HOME} && \ bundle config && \ bundle install && \ rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git && \ bundle exec bootsnap precompile --gemfile RUN bundle config COPY . . RUN bundle exec bootsnap precompile app/ lib/ && \ rails assets:precompile && \ rm -rf log/* tmp/* && \ chown -R ${NAME}:${NAME} log tmp FROM ruby:${RUBY_VERSION}-slim AS release ARG UID ARG GID ARG NAME=app ARG INSTALL_DIR ARG BUILD_DIR=${INSTALL_DIR} ARG INSTALL_DIR=/app ENV GEM_HOME=/usr/local/bundle \ BUNDLE_WITHOUT="development test" \ BUNDLE_SYSTEM=1 \ RAILS_ENV=production \ LANG=C.UTF-8 \ INSTALL_DIR=${INSTALL_DIR} \ TZ=Europe/Zurich ENV PATH=${INSTALL_DIR}/bin:$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH WORKDIR ${INSTALL_DIR} RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && \ echo $TZ > /etc/timezone && \ adduser --disabled-password --disabled-login ${NAME} &&\ apt-get update -yqq && \ apt-get install -yqq --no-install-recommends \ sqlite3 libjemalloc2 && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ gem update --system && \ truncate -s 0 /var/log/*log ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 RUN pwd COPY --from=build ${GEM_HOME} ${GEM_HOME} COPY --from=build ${BUILD_DIR} . RUN ls -la && chown -R ${NAME}:${NAME} ./tmp ./log ./storage EXPOSE 3000 ENTRYPOINT ["bin/docker-entrypoint"] USER ${NAME} CMD ["./bin/rails", "server", "-b", "0"]