2025-05-16 18:01:29 +02:00
|
|
|
ARG RUBY_VERSION=3.4
|
2024-11-25 00:06:53 +01:00
|
|
|
|
2024-07-15 02:19:27 +02:00
|
|
|
ARG NAME=app
|
|
|
|
|
ARG UID=1000
|
|
|
|
|
ARG GID=1000
|
2025-05-16 18:01:29 +02:00
|
|
|
ARG INSTALL_DIR=/home/${NAME}/src
|
|
|
|
|
|
|
|
|
|
FROM ruby:${RUBY_VERSION} as development
|
|
|
|
|
|
|
|
|
|
LABEL maintainer='david@hohl.cloud'
|
|
|
|
|
|
2024-07-20 16:52:12 +02:00
|
|
|
ARG NAME
|
|
|
|
|
ARG UID
|
|
|
|
|
ARG GID
|
|
|
|
|
ARG INSTALL_DIR
|
|
|
|
|
|
2024-07-15 02:19:27 +02:00
|
|
|
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 \
|
2024-11-25 00:06:53 +01:00
|
|
|
EDITOR=vim
|
2024-07-15 02:19:27 +02:00
|
|
|
|
|
|
|
|
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} && \
|
2025-05-16 18:01:29 +02:00
|
|
|
chown -R ${NAME}:${NAME} /home/${NAME} && \
|
2024-07-15 02:19:27 +02:00
|
|
|
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 \
|
2025-05-16 18:01:29 +02:00
|
|
|
sqlite3 nodejs npm sassc yarn libvips libjemalloc2 && \
|
2024-07-15 02:19:27 +02:00
|
|
|
apt-get clean && \
|
|
|
|
|
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
|
|
|
|
|
truncate -s 0 /var/log/*log && \
|
|
|
|
|
gem update --system && \
|
2025-05-16 18:01:29 +02:00
|
|
|
bundle config set app_config ${GEM_HOME}
|
2024-07-15 02:19:27 +02:00
|
|
|
|
2024-09-05 22:54:38 +02:00
|
|
|
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
|
2024-11-25 00:06:53 +01:00
|
|
|
|
2025-05-16 18:01:29 +02:00
|
|
|
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
|
2024-11-25 00:06:53 +01:00
|
|
|
|
2025-05-16 18:01:29 +02:00
|
|
|
USER root
|
2024-11-25 00:06:53 +01:00
|
|
|
|
2025-05-16 18:01:29 +02:00
|
|
|
# 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
|
2024-11-25 00:06:53 +01:00
|
|
|
|
2025-05-16 18:01:29 +02:00
|
|
|
ENV PATH=${INSTALL_DIR}/bin:$GEM_HOME/bin:$GEM_HOME/gems/bin:$PATH
|
2024-09-05 22:54:38 +02:00
|
|
|
|
2025-05-16 18:01:29 +02:00
|
|
|
COPY ./Gemfile ./Gemfile.lock ./
|
2024-09-05 22:54:38 +02:00
|
|
|
|
|
|
|
|
|
2025-05-16 18:01:29 +02:00
|
|
|
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 . .
|
2024-09-05 22:54:38 +02:00
|
|
|
|
2025-05-16 18:01:29 +02:00
|
|
|
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"]
|
2024-09-05 22:54:38 +02:00
|
|
|
|
|
|
|
|
USER ${NAME}
|
2024-07-20 16:52:12 +02:00
|
|
|
|
2025-05-16 18:01:29 +02:00
|
|
|
CMD ["./bin/rails", "server", "-b", "0"]
|
|
|
|
|
|
|
|
|
|
|