86 lines
3.1 KiB
Docker
86 lines
3.1 KiB
Docker
FROM docker.io/library/node:20.17.0-alpine@sha256:2d07db07a2df6830718ae2a47db6fedce6745f5bcd174c398f2acdda90a11c03 AS builder
|
|
|
|
# Build arguments to change source url, branch or tag
|
|
ARG CODIMD_REPOSITORY
|
|
ARG HEDGEDOC_REPOSITORY=https://gitea.finnvanreenen.nl/LailaTheElf/hedgedoc.git
|
|
ARG VERSION=master
|
|
#necessary on ARM because puppeteer doesn't provide a prebuilt binary
|
|
ENV PUPPETEER_SKIP_DOWNLOAD=true
|
|
ENV YARN_CACHE_FOLDER=/tmp/.yarn
|
|
|
|
RUN if [ -n "${CODIMD_REPOSITORY}" ]; then echo "CODIMD_REPOSITORY is deprecated. Please use HEDGEDOC_REPOSITORY instead" && exit 1; fi
|
|
|
|
# Clone the source and remove git repository but keep the HEAD file
|
|
RUN --mount=target=/var/cache/apk,type=cache,sharing=locked \
|
|
apk update && \
|
|
apk add git jq python3 build-base
|
|
# RUN git clone --depth 1 --branch "$VERSION" "$HEDGEDOC_REPOSITORY" /hedgedoc
|
|
COPY . /hedgedoc
|
|
# RUN git -C /hedgedoc log --pretty=format:'%ad %h %d' --abbrev-commit --date=short -1
|
|
# RUN git -C /hedgedoc rev-parse HEAD > /tmp/gitref
|
|
RUN rm -rf /hedgedoc/.git/*
|
|
# RUN mv /tmp/gitref /hedgedoc/.git/HEAD
|
|
# RUN jq ".repository.url = \"${HEDGEDOC_REPOSITORY}\"" /hedgedoc/package.json > /hedgedoc/package.new.json
|
|
# RUN mv /hedgedoc/package.new.json /hedgedoc/package.json
|
|
|
|
# Install app dependencies and build
|
|
WORKDIR /hedgedoc
|
|
RUN --mount=type=cache,sharing=locked,target=/tmp/.yarn yarn install
|
|
RUN yarn run build
|
|
|
|
FROM docker.io/library/node:20.17.0-alpine@sha256:2d07db07a2df6830718ae2a47db6fedce6745f5bcd174c398f2acdda90a11c03 AS modules-installer
|
|
WORKDIR /hedgedoc
|
|
|
|
ENV NODE_ENV=production
|
|
ENV YARN_CACHE_FOLDER=/tmp/.yarn
|
|
|
|
COPY --from=builder /hedgedoc /hedgedoc
|
|
|
|
RUN --mount=target=/var/cache/apk,type=cache,sharing=locked \
|
|
apk update && \
|
|
apk add git python3 build-base
|
|
|
|
RUN --mount=type=cache,sharing=locked,target=/tmp/.yarn yarn workspaces focus --production
|
|
|
|
FROM docker.io/library/node:20.17.0-alpine@sha256:2d07db07a2df6830718ae2a47db6fedce6745f5bcd174c398f2acdda90a11c03 AS app
|
|
|
|
LABEL org.opencontainers.image.title='HedgeDoc production image(alpine)'
|
|
LABEL org.opencontainers.image.url='https://hedgedoc.org'
|
|
LABEL org.opencontainers.image.source='https://gitea.finnvanreenen.nl/LailaTheElf/hedgedoc'
|
|
LABEL org.opencontainers.image.documentation='https://github.com/hedgedoc/container/blob/master/README.md'
|
|
LABEL org.opencontainers.image.licenses='AGPL-3.0'
|
|
|
|
WORKDIR /hedgedoc
|
|
|
|
ENV NODE_ENV=production
|
|
ARG UID=10000
|
|
ENV UPLOADS_MODE=0700
|
|
|
|
RUN apk add --no-cache --no-progress --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing/ gosu
|
|
|
|
# Create hedgedoc user
|
|
RUN adduser -u $UID -h /hedgedoc/ -D -S hedgedoc
|
|
|
|
COPY --chown=$UID --from=modules-installer /hedgedoc /hedgedoc
|
|
|
|
# Add configuraton files
|
|
COPY ["resources/config.json", "/files/"]
|
|
|
|
# Healthcheck
|
|
COPY --chown=$UID /resources/healthcheck.mjs /hedgedoc/healthcheck.mjs
|
|
HEALTHCHECK --interval=15s CMD node healthcheck.mjs
|
|
|
|
# For backwards compatibility
|
|
RUN ln -s /hedgedoc /codimd
|
|
|
|
# Symlink configuration files
|
|
RUN rm -f /hedgedoc/config.json
|
|
RUN ln -s /files/config.json /hedgedoc/config.json
|
|
|
|
EXPOSE 3000
|
|
|
|
COPY ["resources/docker-entrypoint.sh", "/usr/local/bin/docker-entrypoint.sh"]
|
|
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|
|
|
|
CMD ["node", "app.js"]
|