Add docker files (#55)

* Add docker files

* Improve docker-compose compatibility

* Use Openstack's standard port

* Use package ffmpeg-dev instead of ffmpeg

* improve dockerfile and config

* Add short docker guide

* adhere to previous naming conventions

* document former json comments

* Undo init.sh approach to touching the db file

* Make clear that it's about files on the host system

* add local path specifier

Co-authored-by: Denys Vitali <denys.vitali@swisscom.com>
pull/61/head
Florian Kohrt 2020-05-19 22:19:43 +02:00 committed by GitHub
parent 077bf165c7
commit 3ce40c51a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 65 additions and 7 deletions

View File

@ -11,4 +11,4 @@ coverage
.grunt
.lock-wscript
build/Release
node_modules
node_modules

38
Dockerfile 100644
View File

@ -0,0 +1,38 @@
FROM node:10-alpine3.11
WORKDIR /app
# build audiowaveform from source
RUN apk add git make cmake gcc g++ libmad-dev libid3tag-dev libsndfile-dev gd-dev boost-dev libgd libpng-dev zlib-dev
RUN apk add zlib-static libpng-static boost-static
RUN apk add autoconf automake libtool gettext
RUN wget https://github.com/xiph/flac/archive/1.3.3.tar.gz
RUN tar xzf 1.3.3.tar.gz
RUN cd flac-1.3.3/ && ./autogen.sh
RUN cd flac-1.3.3/ && ./configure --enable-shared=no
RUN cd flac-1.3.3/ && make
RUN cd flac-1.3.3/ && make install
RUN git clone https://github.com/bbc/audiowaveform.git
RUN mkdir audiowaveform/build/
RUN cd audiowaveform/build/ && cmake -D ENABLE_TESTS=0 -D BUILD_STATIC=1 ..
RUN cd audiowaveform/build/ && make
RUN cd audiowaveform/build/ && make install
# install other requirements
RUN apk add graphicsmagick ffmpeg-dev ghostscript
# install node package
COPY package*.json ./
RUN npm install
COPY . .
# start app
EXPOSE 9666
CMD ["node", "spacedeck.js"]

View File

@ -42,7 +42,7 @@ To install all node dependencies, run (do this once):
# Configuration
See [config/default.json](config/default.json)
See [config/default.json](config/default.json). Set `storage_local_path` for a local sqlite database or `storage_region`, `storage_bucket`, `storage_cdn` and `storage_endpoint` for AWS S3. `mail_provider` may be one of `console` or `smtp`. Also, omit a trailing `/` for the `endpoint`.
# Run (web server)
@ -63,6 +63,16 @@ For advanced media conversion:
By default, media files are uploaded to the ```storage``` folder.
The database is stored in ```database.sqlite``` by default.
# Run with Docker
- configure `config/default.json`
- configure `volumes` section inside `docker-compose.yml`
- point to `database.sqlite` on the host system
- `touch database.sqlite` if it not exists
- point to `storage/` on the host system
- `mkdir storage/` if it not exists
- start the container with `sudo docker-compose up -f docker-compose.yml -d --build`
# Hacking
To rebuild the frontend CSS styles:

View File

@ -6,13 +6,11 @@
"invite_code": "top-sekrit",
"storage_region": "eu-central-1",
//"storage_bucket": "sdeck-development",
//"storage_cdn": "http://localhost:9123/sdeck-development",
//"storage_endpoint": "http://storage:9000",
"storage_bucket": "my_spacedeck_bucket",
"storage_cdn": "/storage",
"storage_local_path": "./storage",
"storage_local_db": "./database.sqlite",
"redis_mock": true,
"mongodb_host": "localhost",
@ -23,7 +21,6 @@
"admin_pass": "very_secret_admin_password",
"phantom_api_secret": "very_secret_phantom_password",
// Choose "console" or "smtp"
"mail_provider": "smtp",
"mail_smtp_host": "your.smtp.host",
"mail_smtp_port": 465,

12
docker-compose.yml 100644
View File

@ -0,0 +1,12 @@
version: "2.0"
services:
spacedeck:
build: .
container_name: spacedeck
ports:
- "9666:9666"
volumes:
- /absolute/path/to/storage:/app/storage
- /absolute/path/to/database.sqlite:/app/database.sqlite

View File

@ -1,4 +1,5 @@
const Umzug = require('umzug');
const config = require('config')
function sequel_log(a,b,c) {
console.log(a);
@ -17,7 +18,7 @@ const sequelize = new Sequelize('database', 'username', 'password', {
},
// SQLite only
storage: 'database.sqlite',
storage: config.get('storage_local_db'),
logging: sequel_log,
// http://docs.sequelizejs.com/manual/tutorial/querying.html#operators