Browse Source

fix #41: Docker support

Davide Alberani 3 years ago
parent
commit
031b0b9233
11 changed files with 114 additions and 1 deletions
  1. 7 0
      .dockerignore
  2. 1 0
      .gitignore
  3. 26 0
      Dockerfile
  4. 14 0
      docker-compose.yml
  5. 9 0
      docker-tools/Dockerfile
  6. 4 0
      docker-tools/dump.sh
  7. 4 0
      docker-tools/restore.sh
  8. 30 0
      docker-tools/run.sh
  9. 4 0
      docker-tools/shell.sh
  10. 14 0
      docs/DOCKER.md
  11. 1 1
      monco.py

+ 7 - 0
.dockerignore

@@ -0,0 +1,7 @@
+.DS_Store
+node_modules/
+__pycache__
+npm-debug*.log
+*.py[cod]
+*.so
+.editorconfig

+ 1 - 0
.gitignore

@@ -1,5 +1,6 @@
 .DS_Store
 node_modules/
+__pycache__
 dist/
 npm-debug*.log
 ssl/*.pem

+ 26 - 0
Dockerfile

@@ -0,0 +1,26 @@
+FROM node
+LABEL \
+	maintainer="Davide Alberani <da@erlug.linux.it>" \
+	vendor="RaspiBO"
+
+EXPOSE 3000
+
+RUN \
+	apt-get update && \
+	apt-get -y --no-install-recommends install \
+		nodejs \
+		npm \
+		python3-pymongo \
+		python3-tornado && \
+	rm -rf /var/lib/apt/lists/*
+
+COPY . /ibt2
+
+WORKDIR /ibt2/
+
+RUN \
+	npm install && \
+	nodejs build/build.js && \
+	rm -rf node_modules
+
+ENTRYPOINT ["./ibt2.py", "--mongo_url=mongodb://mongo", "--debug"]

+ 14 - 0
docker-compose.yml

@@ -0,0 +1,14 @@
+version: '3'
+services:
+  ibt2:
+    build: .
+    ports:
+      - "3000:3000"
+    depends_on:
+      - mongo
+  mongo:
+    image: "mongo:latest"
+    volumes:
+      - data:/data/db
+volumes:
+  data:

+ 9 - 0
docker-tools/Dockerfile

@@ -0,0 +1,9 @@
+FROM mongo:latest
+LABEL \
+	maintainer="Davide Alberani <da@erlug.linux.it>" \
+	vendor="RaspiBO"
+
+VOLUME ["/data"]
+
+COPY run.sh /
+ENTRYPOINT ["/run.sh"]

+ 4 - 0
docker-tools/dump.sh

@@ -0,0 +1,4 @@
+#!/bin/sh
+
+docker build -t ibt2-dump-and-restore .
+docker run --name ibt2-dump --rm --network="ibt2_default" -v `pwd`:/data --link=ibt2_ibt2-mongo_1:ibt2-mongo ibt2-dump-and-restore --dump

+ 4 - 0
docker-tools/restore.sh

@@ -0,0 +1,4 @@
+#!/bin/sh
+
+docker build -t ibt2-dump-and-restore .
+docker run --name ibt2-restore --rm --network="ibt2_default" -v `pwd`:/data --link=ibt2_ibt2-mongo_1:ibt2-mongo ibt2-dump-and-restore --restore $1

+ 30 - 0
docker-tools/run.sh

@@ -0,0 +1,30 @@
+#!/bin/sh
+
+if [ $# -lt 1 ] ; then
+	exit 1
+fi
+
+cmd="$1"
+
+if [ "${cmd}" = "--shell" ] ; then
+	echo "INFO: opening shell..."
+	mongo --host mongo ibt2
+elif [ "${cmd}" = "--dump" ] ; then
+	echo "INFO: dumping..."
+	mongodump --host mongo --out /tmp/ --db ibt2 || (echo "ERROR: unable to dump the database" ; exit 10)
+	cd /tmp
+	tar cfz /data/ibt2-dump-`date +'%Y-%m-%dT%H:%M:%S'`.tgz ibt2
+elif [ "${cmd}" = "--restore" ] ; then
+	if [ -z "$2" ] ; then
+		echo "ERROR: missing argument to --restore"
+		exit 20
+	fi
+	echo "INFO: restoring $2..."
+	tar xfz "/data/$2" -C /tmp || (echo "ERROR: error unpacking file" ; exit 21)
+	mongo --host mongo ibt2 --eval "db.dropDatabase()" || (echo "ERROR: error dropping the database" ; exit 22)
+	mongorestore --host mongo -d ibt2 /tmp/ibt2
+else
+	echo "ERROR: command not recognized: use --dump or --restore dumps/file.tgz"
+	exit 30
+fi
+

+ 4 - 0
docker-tools/shell.sh

@@ -0,0 +1,4 @@
+#!/bin/sh
+
+docker build -t ibt2-dump-and-restore .
+docker run -it --name ibt2-shell --rm --network="ibt2_default" -v `pwd`:/data --link=ibt2_ibt2-mongo_1:ibt2-mongo ibt2-dump-and-restore --shell

+ 14 - 0
docs/DOCKER.md

@@ -0,0 +1,14 @@
+# Docker container
+
+ibt2 requires MongoDB to run.
+
+You can use docker-compose.yml to have a complete environment. Run: `docker-compose up --build`
+
+The data is stored in the *ibt2_data* volume: do not cancel it.
+
+In the *docker-tools* directory there is a set of tools to build and run another container to dump and restore the database; you need the docker-compose running, to execute them. From that directory you can:
+
+- **dump.sh**: dump the current database in a file like *ibt2-dump-2017-11-28T21:57:43.tgz*
+- **restore.sh**: *ibt2-dump-2017-11-28T21:57:43.tgz*: restore the given dump. Notice that the current database is completely removed, so DO NOT restore a dump if you don't have a backup of the current data
+- **shell.sh**: open a shell for the database
+

+ 1 - 1
monco.py

@@ -105,7 +105,7 @@ class Monco(object):
         """
         self._url = url
         self._dbName = dbName
-        self.connect(url)
+        self.connect()
 
     def connect(self, dbName=None, url=None):
         """Connect to the database.