Add `foreman` to the base Docker image. This way you can do this: docker run --rm -it -v $PWD:/danbooru ghcr.io/danbooru/danbooru foreman start to start everything needed to run Danbooru in development mode (except for the Postgres database). This will start everything listed in the Procfile: bin/rails server bin/good_job start bin/rails danbooru:cron bin/webpack-dev-server
80 lines
2.2 KiB
Docker
80 lines
2.2 KiB
Docker
FROM ubuntu:21.04 AS base
|
|
|
|
WORKDIR /danbooru
|
|
ENV PATH="/root/.asdf/bin:/root/.asdf/shims:$PATH:/usr/lib/postgresql/14/bin"
|
|
|
|
COPY config/docker/build-base-image.sh .
|
|
|
|
RUN \
|
|
./build-base-image.sh && \
|
|
chmod go+rx /root && \
|
|
useradd --home-dir /root --user-group danbooru && \
|
|
rm build-base-image.sh
|
|
|
|
|
|
|
|
FROM base AS development
|
|
ARG NODE_VERSION=14.15.5
|
|
|
|
RUN \
|
|
apt-get update && \
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
build-essential libpq-dev libvips-dev zlib1g-dev \
|
|
curl ca-certificates dirmngr git gpg && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN \
|
|
asdf plugin add nodejs && \
|
|
asdf install nodejs "$NODE_VERSION" && \
|
|
asdf global nodejs "$NODE_VERSION" && \
|
|
npm install --unsafe-perm=true -g yarn && \
|
|
chmod -R go+rx /root/.config # make Yarn config dir readable for non-root
|
|
|
|
COPY Gemfile Gemfile.lock ./
|
|
RUN \
|
|
bundle install --jobs "$(nproc)" && \
|
|
rm -rf "$(gem environment gemdir)/cache" && \
|
|
find "$(gem environment gemdir)" -name "*.o" -delete
|
|
|
|
COPY .yarnrc.yml package.json yarn.lock ./
|
|
COPY .yarn/ ./.yarn/
|
|
RUN yarn install
|
|
|
|
COPY postcss.config.js Rakefile ./
|
|
COPY bin/rails bin/webpack ./bin/
|
|
COPY config/application.rb config/boot.rb config/danbooru_default_config.rb config/webpacker.yml ./config/
|
|
COPY config/webpack/ ./config/webpack/
|
|
COPY public/images ./public/images
|
|
COPY public/fonts ./public/fonts
|
|
COPY app/components/ ./app/components/
|
|
COPY app/javascript/ ./app/javascript/
|
|
|
|
RUN \
|
|
bin/rails assets:precompile && \
|
|
rm -rf \
|
|
node_modules .yarn/cache tmp /usr/local/share/.cache/yarn \
|
|
/root/.yarn/berry/cache /root/.bundle/cache /root/.npm && \
|
|
ln -s /tmp tmp && \
|
|
ln -s packs public/packs-test
|
|
|
|
|
|
|
|
FROM base as production
|
|
|
|
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2
|
|
ENV MALLOC_CONF=background_thread:true,narenas:2,dirty_decay_ms:1000,muzzy_decay_ms:0,tcache:false
|
|
|
|
COPY --from=development /root /root
|
|
COPY --from=development /danbooru /danbooru
|
|
|
|
COPY . .
|
|
ARG SOURCE_COMMIT
|
|
RUN echo "$SOURCE_COMMIT" > REVISION
|
|
|
|
USER danbooru
|
|
ENTRYPOINT ["tini", "--"]
|
|
CMD ["bin/rails", "server"]
|
|
|
|
# https://github.com/opencontainers/image-spec/blob/main/annotations.md
|
|
LABEL org.opencontainers.image.source https://github.com/danbooru/danbooru
|