2019-03-08 01:38:36 +01:00
# Etherpad Lite Dockerfile
#
2019-11-08 23:15:03 +01:00
# https://github.com/ether/etherpad-lite
2019-03-08 01:38:36 +01:00
#
# Author: muxator
2025-01-02 20:17:16 +01:00
ARG BUILD_ENV = git
2019-03-08 01:38:36 +01:00
2024-07-07 19:26:43 +02:00
FROM node:alpine AS adminbuild
2025-01-02 20:17:16 +01:00
RUN npm install -g pnpm@latest
2024-03-09 23:07:09 +01:00
WORKDIR /opt/etherpad-lite
2024-07-23 17:43:18 +02:00
COPY . .
RUN pnpm install
RUN pnpm run build:ui
2024-03-09 23:07:09 +01:00
2024-07-07 19:26:43 +02:00
FROM node:alpine AS build
2019-03-08 01:38:36 +01:00
LABEL maintainer = "Etherpad team, https://github.com/ether/etherpad-lite"
2024-03-06 13:50:14 +01:00
# Set these arguments when building the image from behind a proxy
ARG http_proxy =
ARG https_proxy =
ARG no_proxy =
2022-03-12 22:48:42 +01:00
ARG TIMEZONE =
2023-06-27 22:17:55 +02:00
2022-03-12 22:48:42 +01:00
RUN \
[ -z " ${ TIMEZONE } " ] || { \
2023-06-27 22:17:55 +02:00
apk add --no-cache tzdata && \
cp /usr/share/zoneinfo/${ TIMEZONE } /etc/localtime && \
echo " ${ TIMEZONE } " > /etc/timezone; \
2022-03-12 22:48:42 +01:00
}
2023-06-27 22:17:55 +02:00
ENV TIMEZONE = ${ TIMEZONE }
2022-03-12 22:48:42 +01:00
2023-09-23 11:46:14 +02:00
# Control the configuration file to be copied into the container.
ARG SETTINGS = ./settings.json.docker
2019-07-12 02:32:34 +02:00
# plugins to install while building the container. By default no plugins are
# installed.
# If given a value, it has to be a space-separated, quoted list of plugin names.
#
# EXAMPLE:
# ETHERPAD_PLUGINS="ep_codepad ep_author_neat"
ARG ETHERPAD_PLUGINS =
2024-03-19 12:51:11 +01:00
# local plugins to install while building the container. By default no plugins are
# installed.
# If given a value, it has to be a space-separated, quoted list of plugin names.
#
# EXAMPLE:
# ETHERPAD_LOCAL_PLUGINS="../ep_my_plugin ../ep_another_plugin"
ARG ETHERPAD_LOCAL_PLUGINS =
2024-08-23 15:20:28 +02:00
# github plugins to install while building the container. By default no plugins are
# installed.
# If given a value, it has to be a space-separated, quoted list of plugin names.
#
# EXAMPLE:
# ETHERPAD_GITHUB_PLUGINS="ether/ep_plugin"
ARG ETHERPAD_GITHUB_PLUGINS =
2021-02-18 10:27:52 +01:00
# Control whether abiword will be installed, enabling exports to DOC/PDF/ODT formats.
# By default, it is not installed.
# If given any value, abiword will be installed.
#
# EXAMPLE:
# INSTALL_ABIWORD=true
ARG INSTALL_ABIWORD =
# Control whether libreoffice will be installed, enabling exports to DOC/PDF/ODT formats.
# By default, it is not installed.
# If given any value, libreoffice will be installed.
#
# EXAMPLE:
# INSTALL_LIBREOFFICE=true
ARG INSTALL_SOFFICE =
2023-06-27 22:17:55 +02:00
# Install dependencies required for modifying access.
2024-03-23 07:37:06 +01:00
RUN apk add --no-cache shadow bash
2019-12-01 15:08:20 +01:00
# Follow the principle of least privilege: run as unprivileged user.
#
# Running as non-root enables running this image in platforms like OpenShift
# that do not allow images running as root.
2020-05-16 19:34:57 +02:00
#
# If any of the following args are set to the empty string, default
# values will be chosen.
ARG EP_HOME =
ARG EP_UID = 5001
ARG EP_GID = 0
ARG EP_SHELL =
2023-06-27 22:17:55 +02:00
2020-05-16 19:34:57 +02:00
RUN groupadd --system ${ EP_GID : +--gid " ${ EP_GID } " --non-unique } etherpad && \
useradd --system ${ EP_UID : +--uid " ${ EP_UID } " --non-unique } --gid etherpad \
${ EP_HOME : +--home-dir " ${ EP_HOME } " } --create-home \
${ EP_SHELL : +--shell " ${ EP_SHELL } " } etherpad
2020-05-16 19:48:27 +02:00
ARG EP_DIR = /opt/etherpad-lite
RUN mkdir -p " ${ EP_DIR } " && chown etherpad:etherpad " ${ EP_DIR } "
2019-12-01 15:08:20 +01:00
2021-06-18 03:18:25 +02:00
# the mkdir is needed for configuration of openjdk-11-jre-headless, see
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863199
2023-06-27 22:17:55 +02:00
RUN \
2021-06-18 03:18:25 +02:00
mkdir -p /usr/share/man/man1 && \
2025-01-02 20:17:16 +01:00
npm install pnpm@latest -g && \
2023-06-27 22:17:55 +02:00
apk update && apk upgrade && \
2024-03-23 07:37:06 +01:00
apk add --no-cache \
2021-06-18 02:58:13 +02:00
ca-certificates \
2024-02-11 09:51:42 +01:00
curl \
2021-06-18 02:58:13 +02:00
git \
2023-09-04 18:55:21 +02:00
${ INSTALL_ABIWORD : +abiword abiword-plugin-command } \
2023-06-27 22:17:55 +02:00
${ INSTALL_SOFFICE : +libreoffice openjdk8-jre libreoffice-common }
2021-02-18 10:27:52 +01:00
2020-03-27 06:45:55 +01:00
USER etherpad
2019-12-01 15:08:20 +01:00
2020-05-16 19:48:27 +02:00
WORKDIR "${EP_DIR}"
2019-07-12 02:03:25 +02:00
2024-02-16 20:58:27 +01:00
# etherpads version feature requires this. Only copy what is really needed
COPY --chown= etherpad:etherpad ${ SETTINGS } ./settings.json
COPY --chown= etherpad:etherpad ./var ./var
2024-02-21 21:50:11 +01:00
COPY --chown= etherpad:etherpad ./bin ./bin
COPY --chown= etherpad:etherpad ./pnpm-workspace.yaml ./package.json ./
2024-02-16 20:58:27 +01:00
2025-01-02 20:17:16 +01:00
FROM build AS build_git
ONBUILD COPY --chown= etherpad:etherpad ./.git/HEA[ D] ./.git/HEAD
ONBUILD COPY --chown= etherpad:etherpad ./.git/ref[ s] ./.git/refs
FROM build AS build_copy
FROM build_${BUILD_ENV} AS development
2024-02-16 20:58:27 +01:00
2024-08-23 15:20:28 +02:00
COPY --chown= etherpad:etherpad ./src/ ./src/
2024-07-23 17:43:18 +02:00
COPY --chown= etherpad:etherpad --from= adminbuild /opt/etherpad-lite/src/ templates/admin./src/templates/admin
COPY --chown= etherpad:etherpad --from= adminbuild /opt/etherpad-lite/src/static/oidc ./src/static/oidc
2024-02-19 22:31:27 +01:00
2024-03-14 16:06:32 +01:00
RUN bin/installDeps.sh && \
2024-08-23 15:20:28 +02:00
if [ ! -z " ${ ETHERPAD_PLUGINS } " ] || [ ! -z " ${ ETHERPAD_LOCAL_PLUGINS } " ] || [ ! -z " ${ ETHERPAD_GITHUB_PLUGINS } " ] ; then \
pnpm run plugins i ${ ETHERPAD_PLUGINS } ${ ETHERPAD_LOCAL_PLUGINS : +--path ${ ETHERPAD_LOCAL_PLUGINS } } ${ ETHERPAD_GITHUB_PLUGINS : +--github ${ ETHERPAD_GITHUB_PLUGINS } } ; \
2024-03-19 12:51:11 +01:00
fi
2024-03-09 23:07:09 +01:00
2025-01-02 20:17:16 +01:00
FROM build_${BUILD_ENV} AS production
2024-02-16 20:58:27 +01:00
ENV NODE_ENV = production
ENV ETHERPAD_PRODUCTION = true
COPY --chown= etherpad:etherpad ./src ./src
2024-07-25 18:37:14 +02:00
COPY --chown= etherpad:etherpad --from= adminbuild /opt/etherpad-lite/src/templates/admin ./src/templates/admin
2024-07-23 17:43:18 +02:00
COPY --chown= etherpad:etherpad --from= adminbuild /opt/etherpad-lite/src/static/oidc ./src/static/oidc
2019-11-08 22:56:30 +01:00
2024-03-23 07:37:06 +01:00
RUN bin/installDeps.sh && rm -rf ~/.npm && rm -rf ~/.local && rm -rf ~/.cache && \
2024-08-23 15:20:28 +02:00
if [ ! -z " ${ ETHERPAD_PLUGINS } " ] || [ ! -z " ${ ETHERPAD_LOCAL_PLUGINS } " ] || [ ! -z " ${ ETHERPAD_GITHUB_PLUGINS } " ] ; then \
pnpm run plugins i ${ ETHERPAD_PLUGINS } ${ ETHERPAD_LOCAL_PLUGINS : +--path ${ ETHERPAD_LOCAL_PLUGINS } } ${ ETHERPAD_GITHUB_PLUGINS : +--github ${ ETHERPAD_GITHUB_PLUGINS } } ; \
2024-03-19 12:51:11 +01:00
fi
2024-03-14 16:06:32 +01:00
2019-10-24 11:09:30 +02:00
# Copy the configuration file.
2023-09-23 11:46:14 +02:00
COPY --chown= etherpad:etherpad ${ SETTINGS } " ${ EP_DIR } " /settings.json
2020-03-27 06:45:55 +01:00
2020-05-16 19:34:57 +02:00
# Fix group permissions
2024-02-16 20:58:27 +01:00
# Note: For some reason increases image size from 257 to 334.
# RUN chmod -R g=u .
2024-02-05 21:13:02 +01:00
2021-12-21 07:08:14 +01:00
USER etherpad
2024-02-11 09:51:42 +01:00
HEALTHCHECK --interval=5s --timeout=3s \
2024-02-16 20:58:27 +01:00
CMD curl --silent http://localhost:9001/health | grep -E "pass|ok|up" > /dev/null || exit 1
2019-03-08 01:38:36 +01:00
EXPOSE 9001
2024-02-21 21:50:11 +01:00
CMD [ "pnpm" , "run" , "prod" ]