103 lines
No EOL
3.4 KiB
Docker
103 lines
No EOL
3.4 KiB
Docker
FROM node:12.16.1-slim
|
|
|
|
# Build arguments to change source url, branch or tag
|
|
ARG CODIMD_REPOSITORY=https://www.fs-infmath.uni-kiel.de/git/FS-InfMath/CodiMD.git
|
|
ARG VERSION=master
|
|
ARG UID=10000
|
|
|
|
# Set some default config variables
|
|
ARG DEBIAN_FRONTEND=noninteractive
|
|
ENV DOCKERIZE_VERSION=v0.6.1
|
|
ENV NODE_ENV=production
|
|
|
|
RUN apt-get update && \
|
|
apt-get install --no-install-recommends -y \
|
|
ca-certificates \
|
|
wget && \
|
|
rm -r /var/lib/apt/lists/*
|
|
|
|
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \
|
|
tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz && \
|
|
rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
|
|
|
|
ENV GOSU_VERSION 1.11
|
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
|
COPY ["resources/gosu-gpg.key", "/tmp/gosu.key"]
|
|
RUN set -ex; \
|
|
apt-get update && \
|
|
apt-get install --no-install-recommends -qy \
|
|
gpg && \
|
|
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
|
|
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
|
|
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
|
|
\
|
|
# verify the signature
|
|
export GNUPGHOME="$(mktemp -d)"; \
|
|
gpg --no-tty --import /tmp/gosu.key; \
|
|
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
|
|
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
|
|
\
|
|
chmod +x /usr/local/bin/gosu; \
|
|
# verify that the binary works
|
|
gosu nobody true && \
|
|
apt-get autoremove --purge -qy \
|
|
gpg && \
|
|
rm -r /var/lib/apt/lists/*
|
|
|
|
|
|
VOLUME ["/files/"]
|
|
|
|
|
|
RUN export dev_apt=( \
|
|
"bzip2" \
|
|
"git" \
|
|
"jq" \
|
|
) && \
|
|
apt-get update && \
|
|
apt-get install --no-install-recommends -y \
|
|
"${dev_apt[@]}" \
|
|
# Add fonts for PDF export
|
|
fonts-noto && \
|
|
\
|
|
# Clone the source
|
|
git clone --depth 1 --branch "$VERSION" "$CODIMD_REPOSITORY" /codimd && \
|
|
# Print the cloned version and clean up git files
|
|
cd /codimd && \
|
|
git log --pretty=format:'%ad %h %d' --abbrev-commit --date=short -1 && echo && \
|
|
git rev-parse HEAD > /tmp/gitref && \
|
|
rm -rf /codimd/.git && \
|
|
\
|
|
# Mime the git repository for fullversion
|
|
mkdir /codimd/.git && \
|
|
mv /tmp/gitref /codimd/.git/HEAD && \
|
|
jq ".repository.url = \"${CODIMD_REPOSITORY}\"" /codimd/package.json > /codimd/package.new.json && \
|
|
mv /codimd/package.new.json /codimd/package.json && \
|
|
\
|
|
# Symlink configuration files
|
|
rm -f /codimd/config.json && \
|
|
ln -s /files/config.json /codimd/config.json && \
|
|
rm -f /codimd/.sequelizerc && \
|
|
ln -s /files/.sequelizerc /codimd/.sequelizerc && \
|
|
\
|
|
# Install NPM dependencies and build project
|
|
yarn install --pure-lockfile && \
|
|
yarn install --production=false --pure-lockfile && \
|
|
npm run build && \
|
|
\
|
|
# Clean up this layer
|
|
yarn install && \
|
|
yarn cache clean && \
|
|
apt-get autoremove --purge -qy "${dev_apt[@]}" && \
|
|
rm -r /var/lib/apt/lists/* && \
|
|
# Create codimd user
|
|
adduser --uid $UID --home /codimd/ --disabled-password --system codimd && \
|
|
chown -R codimd /codimd/
|
|
|
|
WORKDIR /codimd
|
|
EXPOSE 3000
|
|
|
|
COPY ["resources/docker-entrypoint.sh", "/usr/local/bin/docker-entrypoint.sh"]
|
|
|
|
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|
|
|
|
CMD ["node", "app.js"] |