From 3ce40c51a6cd4f9832d025cf92a75f633408aeac Mon Sep 17 00:00:00 2001 From: Florian Kohrt <fkohrt@anche.no> Date: Tue, 19 May 2020 22:19:43 +0200 Subject: [PATCH] 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> --- .dockerignore | 2 +- Dockerfile | 38 ++++++++++++++++++++++++++++++++++++++ README.md | 12 +++++++++++- config/default.json | 5 +---- docker-compose.yml | 12 ++++++++++++ models/db.js | 3 ++- 6 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore index 979bf6b..28ec906 100644 --- a/.dockerignore +++ b/.dockerignore @@ -11,4 +11,4 @@ coverage .grunt .lock-wscript build/Release -node_modules \ No newline at end of file +node_modules diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b174d0a --- /dev/null +++ b/Dockerfile @@ -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"] + diff --git a/README.md b/README.md index fcd1216..12ff645 100644 --- a/README.md +++ b/README.md @@ -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: diff --git a/config/default.json b/config/default.json index 9c60ac3..57ae30a 100644 --- a/config/default.json +++ b/config/default.json @@ -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, diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..4823997 --- /dev/null +++ b/docker-compose.yml @@ -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 + diff --git a/models/db.js b/models/db.js index a803473..1024b54 100644 --- a/models/db.js +++ b/models/db.js @@ -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 -- GitLab