69 lines
1.9 KiB
Docker
69 lines
1.9 KiB
Docker
ARG RUBY_VERSION=2.7.2
|
|
|
|
## BUILD ENV
|
|
FROM ruby:${RUBY_VERSION}-alpine AS build_env
|
|
ARG BUILD_PACKAGES="build-base curl-dev git"
|
|
ARG DEV_PACKAGES="sqlite-dev"
|
|
ARG RUBY_PACKAGES="tzdata"
|
|
ARG RAILS_ROOT=/app
|
|
ENV RAILS_ENV=production
|
|
ENV BUNDLE_APP_CONFIG="$RAILS_ROOT/.bundle"
|
|
WORKDIR $RAILS_ROOT
|
|
|
|
# install packages
|
|
RUN apk update \
|
|
&& apk upgrade \
|
|
&& apk add --update --no-cache $BUILD_PACKAGES $DEV_PACKAGES $RUBY_PACKAGES
|
|
|
|
# copy app and cleanup dev environment in case this is not a clean git clone
|
|
COPY . .
|
|
RUN rm -rf .bundle vendor .vendor tmp/* db/*.sqlite3 log/* spec
|
|
|
|
# install gems
|
|
RUN gem install bundler:2.2.9 \
|
|
&& bundle config --global frozen 1 \
|
|
&& bundle config --local path 'vendor/bundle' \
|
|
&& bundle config set without 'development:test:assets' \
|
|
&& bundle install -j4 --retry 3 \
|
|
# Remove unneeded files (cached *.gem, *.o, *.c)
|
|
&& rm -rf vendor/bundle/ruby/*/cache/*.gem \
|
|
&& find vendor/bundle/ruby/*/gems/ -name "*.c" -delete \
|
|
&& find vendor/bundle/ruby/*/gems/ -name "*.o" -delete
|
|
|
|
# remove folders not needed in resulting image
|
|
RUN rm -rf tmp/cache app/assets vendor/assets spec docker
|
|
|
|
## DEPLOY ENV
|
|
FROM ruby:${RUBY_VERSION}-alpine
|
|
ARG PACKAGES="tzdata sqlite-libs"
|
|
ARG RAILS_ROOT=/app
|
|
ENV RAILS_ENV=production
|
|
ENV BUNDLE_APP_CONFIG="$RAILS_ROOT/.bundle"
|
|
ARG USER_UID=12001
|
|
ARG USER_GID=12001
|
|
ARG GROUP_NAME=ryndns
|
|
ARG USER_NAME=ryndns
|
|
WORKDIR $RAILS_ROOT
|
|
|
|
# make user
|
|
RUN set -eux; \
|
|
addgroup -g $USER_UID $GROUP_NAME; \
|
|
adduser -u $USER_UID -G $GROUP_NAME -s /sbin/nologin -D $USER_NAME;
|
|
|
|
# install packages
|
|
RUN apk update \
|
|
&& apk upgrade \
|
|
&& apk add --update --no-cache $PACKAGES
|
|
|
|
# get app from build env and add entrypoint
|
|
COPY --from=build_env $RAILS_ROOT $RAILS_ROOT
|
|
COPY ./docker/files/entrypoint.sh /
|
|
|
|
# create persistent folder and change permission of app
|
|
RUN mkdir -p $RAILS_ROOT/data \
|
|
&& chown -R $USER_NAME:$GROUP_NAME $RAILS_ROOT
|
|
|
|
USER $USER_NAME
|
|
|
|
EXPOSE 3000
|
|
ENTRYPOINT ["/entrypoint.sh"] |