add docker and docker-compose

thanks @felixboehm
This commit is contained in:
ansuz 2017-01-10 10:36:12 +01:00
commit 4cda1aeb2f
9 changed files with 174 additions and 1 deletions

5
.dockerignore Normal file
View file

@ -0,0 +1,5 @@
data
Dockerfile
docker-compose.yml
.git
.gitignore

4
.env Normal file
View file

@ -0,0 +1,4 @@
VERSION=latest
USE_SSL=true
STORAGE='./storage/file'
LOG_TO_STDOUT=true

1
.gitignore vendored
View file

@ -9,3 +9,4 @@ customization
messages.log messages.log
.DS_Store .DS_Store
www/scratch www/scratch
data

43
Dockerfile Normal file
View file

@ -0,0 +1,43 @@
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y \
vim \
wget \
git \
curl \
npm \
nodejs-legacy
ARG VERSION=0.3.0
# Download stable version
# RUN wget https://github.com/xwiki-labs/cryptpad/archive /${VERSION}.tar.gz -O /cryptpad.tar.gz \
# && mkdir -p /cryptpad \
# && tar -xzf /cryptpad.tar.gz -C /cryptpad --strip-components=1 \
# && rm /cryptpad.tar.gz
# Download from github
# RUN git clone https://github.com/xwiki-labs/cryptpad.git
# Add code directly
ADD . /cryptpad
WORKDIR /cryptpad
RUN npm install \
&& npm install -g bower \
&& bower install --allow-root
ADD container-start.sh /container-start.sh
RUN chmod u+x /container-start.sh
EXPOSE 3000
VOLUME /cryptpad/datastore
VOLUME /cryptpad/customize
ENV USE_SSL=false
ENV STORAGE='./storage/file'
ENV LOG_TO_STDOUT=true
CMD /container-start.sh

23
container-start.sh Normal file
View file

@ -0,0 +1,23 @@
#!/bin/bash
# Creating customize folder
mkdir -p customize
[[ ! "$(ls -A customize)" ]] && echo "Creating customize folder" \
&& cp -R customize.dist/* customize/ \
&& cp config.js.dist customize/config.js
# Linking config.js
[[ ! -h config.js ]] && echo "Linking config.js" && ln -s customize/config.js config.js
# Configure
[[ -n "$USE_SSL" ]] && echo "Using secure websockets: $USE_SSL" \
&& sed -i "s/useSecureWebsockets: .*/useSecureWebsockets: ${USE_SSL},/g" customize/config.js
[[ -n "$USE_SSL" ]] && echo "Using storage adapter: $STORAGE" \
&& sed -i "s/storage: .*/storage: ${STORAGE},/g" customize/config.js
[[ -n "$LOG_TO_STDOUT" ]] && echo "Logging to stdout: $LOG_TO_STDOUT" \
&& sed -i "s/logToStdout: .*/logToStdout: ${LOG_TO_STDOUT},/g" customize/config.js
exec node ./server.js

69
cryptpad-docker.md Normal file
View file

@ -0,0 +1,69 @@
# Cryptpad Docker Image
- Configuration via .env file
- Ready for use with traffic
- Using github master for now, release 0.3.0 too old
- Creating customize folder
- Adding config.js to customize folder
- Persistance for datastore and customize folder
## TODO
```
cryptpad_1 | Linking config.js
cryptpad_1 | Using secure websockets: true
cryptpad_1 | Using storage adapter: './storage/file'
cryptpad_1 | sed: -e expression #1, char 27: unknown option to `s'
```
## Configuration
Set configurations Dockerfile or in .env (using docker-compose) file.
- VERSION=latest
- USE_SSL=false
- STORAGE='./storage/file'
- LOG_TO_STDOUT=true
The .env variables are read by docker-compose and forwarded to docker container.
On runtime, in `bin/container-start.sh` the settings are written to the `config.js` file.
## Run
With docker
```
docker build -t xwiki/cryptpad .
docker -d --name cryptpad -p 3000:3000 -v ${PWD}/data:/cryptpad/datastore xwiki/cryptpad
```
With docker-compose
```
docker-compose up -d
```
## Persistance
The docker-compose file is preconfigured to persist folders
- cryptpad/datastore --> ./data/customize
- cryptpad/customize --> ./data/customize
In customize included find your configuration in `config.js`.
The data folder is ignored by git, so if you want to add your customizations to git versioning change the volume:
```
./customize:/cryptpad/customize:rw
```
## SSL Proxy
The [traefik](https://traefik.io/) proxy has builtin Let'sEncrypt for easy SSL setup.
In the docker-compose file you can find preset lables for usage with traefik.
[Traefik Docker Image](https://hub.docker.com/_/traefik/)
Alternativly just use plain old nginx.

23
docker-compose.yml Normal file
View file

@ -0,0 +1,23 @@
version: '2'
services:
cryptpad:
build:
context: .
args:
- VERSION=${VERSION}
image: "xwiki/cryptpad:${VERSION}"
hostname: cryptpad
labels:
- traefik.port=3000
- traefik.frontend.passHostHeader=true
environment:
- USE_SSL=${USE_SSL}
- STORAGE=${STORAGE}
- LOG_TO_STDOUT=${LOG_TO_STDOUT}
restart: always
volumes:
- ./data/files:/cryptpad/datastore:rw
- ./data/customize:/cryptpad/customize:rw

View file

@ -82,6 +82,10 @@ To test CryptPad, go to http://your.server:3000/assert/
You can use WebDriver to run this test automatically by running TestSelenium.js but you will need chromedriver installed. You can use WebDriver to run this test automatically by running TestSelenium.js but you will need chromedriver installed.
If you use Mac, you can `brew install chromedriver`. If you use Mac, you can `brew install chromedriver`.
# Setup using Docker
See [Cryptpad-Docker](cryptpad-docker.md)
## Security ## Security
CryptPad is *private*, not *anonymous*. Privacy protects your data, anonymity protects you. CryptPad is *private*, not *anonymous*. Privacy protects your data, anonymity protects you.

View file

@ -11,6 +11,7 @@ var WebRTCSrv = require('./WebRTCSrv');
var config = require('./config'); var config = require('./config');
var websocketPort = config.websocketPort || config.httpPort; var websocketPort = config.websocketPort || config.httpPort;
var useSecureWebsockets = config.useSecureWebsockets || false;
// support multiple storage back ends // support multiple storage back ends
var Storage = require(config.storage||'./storage/file'); var Storage = require(config.storage||'./storage/file');
@ -83,7 +84,7 @@ app.get('/api/config', function(req, res){
res.setHeader('Content-Type', 'text/javascript'); res.setHeader('Content-Type', 'text/javascript');
res.send('define(' + JSON.stringify({ res.send('define(' + JSON.stringify({
websocketPath: config.websocketPath, websocketPath: config.websocketPath,
websocketURL:'ws' + ((httpsOpts) ? 's' : '') + '://' + host + ':' + websocketURL:'ws' + ((useSecureWebsockets) ? 's' : '') + '://' + host + ':' +
websocketPort + '/cryptpad_websocket', websocketPort + '/cryptpad_websocket',
}) + ');'); }) + ');');
}); });