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.
This commit is contained in:
muxator 2019-03-08 01:38:36 +01:00
parent e9be94e3cf
commit bf68666ae1
4 changed files with 125 additions and 0 deletions

52
docker/Dockerfile Normal file
View File

@ -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"]

49
docker/README.md Normal file
View File

@ -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 <BASEDIR>/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 <YOUR_USERNAME>/etherpad .
# builds latest stable version
docker build --build-arg ETHERPAD_VERSION=master --tag <YOUR_USERNAME>/etherpad .
# builds a specific version
docker build --build-arg ETHERPAD_VERSION=1.7.5 --tag <YOUR_USERNAME>/etherpad .
# builds a specific git hash
docker build --build-arg ETHERPAD_VERSION=4c45ac3cb1ae --tag <YOUR_USERNAME>/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 <DESIDERED_PORT>:9001 <YOUR_USERNAME>/etherpad
```
And point your browser to `http://<YOUR_IP>:<DESIDERED_PORT>`

4
docker/nop Normal file
View File

@ -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

20
docker/supervisor.conf Normal file
View File

@ -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