From bf68666ae14cca526b9e30f83217affc5d020b8c Mon Sep 17 00:00:00 2001 From: muxator Date: Fri, 8 Mar 2019 01:38:36 +0100 Subject: [PATCH] docker: move the docker image creation inside the main repository This is a super simple start. At minimum, configuration via environment variables (see #3543) needs to be integrated in Etherpad to make this user-friendly. Resolves #3524. --- docker/Dockerfile | 52 ++++++++++++++++++++++++++++++++++++++++++ docker/README.md | 49 +++++++++++++++++++++++++++++++++++++++ docker/nop | 4 ++++ docker/supervisor.conf | 20 ++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 docker/Dockerfile create mode 100644 docker/README.md create mode 100644 docker/nop create mode 100644 docker/supervisor.conf diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 000000000..e705fb42a --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,52 @@ +# Etherpad Lite Dockerfile +# +# https://github.com/ether/etherpad-docker +# +# Author: muxator +# +# Version 0.1 + +FROM node:latest +LABEL maintainer="Etherpad team, https://github.com/ether/etherpad-lite" + +# install supervisor +RUN apt-get update && apt-get install -y \ + supervisor \ + && rm -rf /var/lib/apt/lists/* + +# install supervisor.conf in a low layer of the container +ADD supervisor.conf /etc/supervisor/supervisor.conf + +# git hash of the version to be built. +# If not given, build the latest development version. +ARG ETHERPAD_VERSION=develop + +# grab the ETHERPAD_VERSION tarball from github (no need to clone the whole +# repository) +RUN echo "Getting version: ${ETHERPAD_VERSION}" && \ + curl \ + --location \ + --fail \ + --silent \ + --show-error \ + --output /opt/etherpad-lite.tar.gz \ + https://github.com/ether/etherpad-lite/archive/"${ETHERPAD_VERSION}".tar.gz && \ + mkdir /opt/etherpad-lite && \ + tar xf /opt/etherpad-lite.tar.gz \ + --directory /opt/etherpad-lite \ + --strip-components=1 && \ + rm /opt/etherpad-lite.tar.gz + +# install node dependencies for Etherpad +RUN /opt/etherpad-lite/bin/installDeps.sh + +# Copy the custom configuration file, if present. The configuration file has to +# be manually put inside the same directory containing the Dockerfile (we cannot +# directly point to "../settings.json" for Docker's security restrictions). +# +# For the conditional COPY trick, see: +# https://stackoverflow.com/questions/31528384/conditional-copy-add-in-dockerfile#46801962 +COPY nop setting[s].json /opt/etherpad-lite/ + +EXPOSE 9001 +CMD ["supervisord", "-c", "/etc/supervisor/supervisor.conf", "-n"] diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 000000000..2c5ad028c --- /dev/null +++ b/docker/README.md @@ -0,0 +1,49 @@ +# Docker image + +This directory contains the files that are used to build the official Docker image on https://hub.docker.com/r/etherpad/etherpad. + +# Rebuilding with custom settings +In order to use a personalized settings file, **you will have to rebuild your image**. + +All of these instructions are as a member of the `docker` group. + +Prepare your custom `settings.json` file: +```bash +cd /docker +cp ../settings.json.template settings.json +[ further edit your settings.json as needed] +``` + +Build the version you prefer: +```bash +# builds latest development version +docker build --tag /etherpad . + +# builds latest stable version +docker build --build-arg ETHERPAD_VERSION=master --tag /etherpad . + +# builds a specific version +docker build --build-arg ETHERPAD_VERSION=1.7.5 --tag /etherpad . + +# builds a specific git hash +docker build --build-arg ETHERPAD_VERSION=4c45ac3cb1ae --tag /etherpad . +``` + +# Downloading from Docker Hub +If you are ok downloading a [prebuilt image from Docker Hub](https://hub.docker.com/r/etherpad/etherpad), these are the commands: +```bash +# gets the latest published version +docker pull etherpad/etherpad + +# gets a specific version +docker pull etherpad/etherpad:1.7.5 +``` + +# Running your instance: + +To run your instance: +```bash +docker run --detach --publish :9001 /etherpad +``` + +And point your browser to `http://:` diff --git a/docker/nop b/docker/nop new file mode 100644 index 000000000..725bfd457 --- /dev/null +++ b/docker/nop @@ -0,0 +1,4 @@ +THIS IS A DUMMY FILE + +It is used to trick Docker in doing a conditional COPY +see: https://stackoverflow.com/questions/31528384/conditional-copy-add-in-dockerfile#46801962 diff --git a/docker/supervisor.conf b/docker/supervisor.conf new file mode 100644 index 000000000..017143b74 --- /dev/null +++ b/docker/supervisor.conf @@ -0,0 +1,20 @@ +[supervisord] +nodaemon=true + +[unix_http_server] +file=/var/run//supervisor.sock +chmod=0700 + +[rpcinterface:supervisor] +supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface + +[supervisorctl] +serverurl=unix:///var/run//supervisor.sock + +[program:etherpad] +directory=/opt/etherpad-lite +command=node node_modules/ep_etherpad-lite/node/server.js +user=root +autostart=true +autorestart=true +