a11yist/Dockerfile

148 lines
3.4 KiB
Text
Raw Normal View History

2025-05-16 18:01:29 +02:00
ARG RUBY_VERSION=3.4
2024-11-25 00:06:53 +01: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
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
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} && \
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 && \
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-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"]