summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Bentele2021-05-20 17:04:25 +0200
committerManuel Bentele2021-05-20 17:04:25 +0200
commit497f8519fc85e33777c95755c46023ecf648a30e (patch)
treed21bc6774d307b4ce5ddc07cdc98798c87926fd1
parent[server] Update initial database schema and test dataset (diff)
downloadtutor-module-497f8519.tar.gz
tutor-module-497f8519.tar.xz
tutor-module-497f8519.zip
[server] Start dozmod-server Docker container after database Docker container is ready
-rw-r--r--dozentenmodulserver/.env27
-rw-r--r--dozentenmodulserver/docker-compose.yml48
-rw-r--r--dozentenmodulserver/pkg/docker/dozmod-server_dockerfile36
-rw-r--r--dozentenmodulserver/setup/config.properties8
-rw-r--r--dozentenmodulserver/setup/config.properties.tmpl9
5 files changed, 77 insertions, 51 deletions
diff --git a/dozentenmodulserver/.env b/dozentenmodulserver/.env
new file mode 100644
index 00000000..24cf181a
--- /dev/null
+++ b/dozentenmodulserver/.env
@@ -0,0 +1,27 @@
+#
+# Environemt variables for docker-compose.yml
+#
+
+# network 'dozmod'
+DOZMOD_NETWORK_IPV4=192.168.200.0/24
+DOZMOD_NETWORK_IPV4_GATEWAY=192.168.200.1
+DOZMOD_NETWORK_IPV6=fd03:4b1d:5707:c8::/64
+DOZMOD_NETWORK_IPV6_GATEWAY=fd03:4b1d:5707:c8::1
+
+# container 'dozmod-server'
+DOZMOD_SERVER_IPV4=192.168.200.10
+DOZMOD_SERVER_IPV6=fd03:4b1d:5707:c8::a
+DOZMOD_SERVER_STORAGE=/mnt/bwLehrpool
+DOZMOD_SERVER_MASTER=bwlp-masterserver.ruf.uni-freiburg.de
+
+# container 'dozmod-database'
+DOZMOD_DATABASE_IPV4=192.168.200.20
+DOZMOD_DATABASE_IPV6=fd03:4b1d:5707:c8::14
+DOZMOD_DATABASE_USER=root
+DOZMOD_DATABASE_PASSWORD=dozmod
+DOZMOD_DATABASE_NAME=sat
+DOZMOD_DATABASE_DATASET_PATH=setup
+
+# container 'dozmod-phpmyadmin'
+DOZMOD_PHPMYADMIN_IPV4=192.168.200.30
+DOZMOD_PHPMYADMIN_IPV6=fd03:4b1d:5707:c8::1e
diff --git a/dozentenmodulserver/docker-compose.yml b/dozentenmodulserver/docker-compose.yml
index c125e738..eae03f06 100644
--- a/dozentenmodulserver/docker-compose.yml
+++ b/dozentenmodulserver/docker-compose.yml
@@ -8,54 +8,56 @@ services:
context: .
dockerfile: pkg/docker/dozmod-server_dockerfile
args:
- DOZMOD_MASTER_SERVER: bwlp-masterserver.ruf.uni-freiburg.de
DOZMOD_SERVER_FILE: target/dozmod-server-1.0-SNAPSHOT-jar-with-dependencies.jar
- DOZMOD_CONFIG_FILE: setup/config.properties
- DOZMOD_VSTORE_PATH: /mnt/bwLehrpool
- DOZMOD_DATABASE_NAME: sat
- DOZMOD_DATABASE_HOST: 192.168.200.20
- DOZMOD_DATABASE_USER: root
- DOZMOD_DATABASE_PASSWORD: dozmod
+ DOZMOD_CONFIG_FILE: setup/config.properties.tmpl
+ DOZMOD_VSTORE_PATH: ${DOZMOD_SERVER_STORAGE}
+ environment:
+ DOZMOD_MASTER_SERVER: ${DOZMOD_SERVER_MASTER}
+ DOZMOD_DATABASE_NAME: ${DOZMOD_DATABASE_NAME}
+ DOZMOD_DATABASE_HOST: ${DOZMOD_DATABASE_IPV4}
+ DOZMOD_DATABASE_USER: ${DOZMOD_DATABASE_USER}
+ DOZMOD_DATABASE_PASSWORD: ${DOZMOD_DATABASE_PASSWORD}
+ DOZMOD_VSTORE_PATH: ${DOZMOD_SERVER_STORAGE}
volumes:
- - dozmod-server:/mnt/bwLehrpool
+ - dozmod-server:${DOZMOD_SERVER_STORAGE}
depends_on:
- dozmod-database
networks:
dozmod:
- ipv4_address: 192.168.200.10
- ipv6_address: fd03:4b1d:5707:c8::a
+ ipv4_address: ${DOZMOD_SERVER_IPV4}
+ ipv6_address: ${DOZMOD_SERVER_IPV6}
dozmod-database:
container_name: dozmod-database
image: mariadb:latest
restart: on-failure
hostname: database.dozmod
environment:
- MYSQL_DATABASE: sat
- MYSQL_ROOT_PASSWORD: dozmod
+ MYSQL_DATABASE: ${DOZMOD_DATABASE_NAME}
+ MYSQL_ROOT_PASSWORD: ${DOZMOD_DATABASE_PASSWORD}
volumes:
- dozmod-database:/var/lib/mysql
- - ./setup:/docker-entrypoint-initdb.d
+ - ./${DOZMOD_DATABASE_DATASET_PATH}:/docker-entrypoint-initdb.d
networks:
dozmod:
- ipv4_address: 192.168.200.20
- ipv6_address: fd03:4b1d:5707:c8::14
+ ipv4_address: ${DOZMOD_DATABASE_IPV4}
+ ipv6_address: ${DOZMOD_DATABASE_IPV6}
dozmod-phpmyadmin:
container_name: dozmod-phpmyadmin
image: phpmyadmin:latest
hostname: phpmyadmin.dozmod
restart: on-failure
environment:
- PMA_HOST: 192.168.200.20
+ PMA_HOST: ${DOZMOD_DATABASE_IPV4}
PMA_VERBOSE: database.dozmod
- MYSQL_ROOT_PASSWORD: dozmod
+ MYSQL_ROOT_PASSWORD: ${DOZMOD_DATABASE_PASSWORD}
depends_on:
- dozmod-database
ports:
- 8080:80
networks:
dozmod:
- ipv4_address: 192.168.200.30
- ipv6_address: fd03:4b1d:5707:c8::1e
+ ipv4_address: ${DOZMOD_PHPMYADMIN_IPV4}
+ ipv6_address: ${DOZMOD_PHPMYADMIN_IPV6}
volumes:
dozmod-server:
name: dozmod-server
@@ -69,7 +71,7 @@ networks:
ipam:
driver: default
config:
- - subnet: 192.168.200.0/24
- gateway: 192.168.200.1
- - subnet: fd03:4b1d:5707:c8::/64
- gateway: fd03:4b1d:5707:c8::1
+ - subnet: ${DOZMOD_NETWORK_IPV4}
+ gateway: ${DOZMOD_NETWORK_IPV4_GATEWAY}
+ - subnet: ${DOZMOD_NETWORK_IPV6}
+ gateway: ${DOZMOD_NETWORK_IPV6_GATEWAY}
diff --git a/dozentenmodulserver/pkg/docker/dozmod-server_dockerfile b/dozentenmodulserver/pkg/docker/dozmod-server_dockerfile
index cb372793..2f15f2bf 100644
--- a/dozentenmodulserver/pkg/docker/dozmod-server_dockerfile
+++ b/dozentenmodulserver/pkg/docker/dozmod-server_dockerfile
@@ -2,17 +2,16 @@ FROM ubuntu:focal
ARG DOZMOD_SERVER_FILE
ARG DOZMOD_CONFIG_FILE
-ARG DOZMOD_MASTER_SERVER=localhost
+
ARG DOZMOD_SERVER_PATH=/opt/bwLehrpool
ARG DOZMOD_VSTORE_PATH=/mnt/bwLehrpool
-ARG DOZMOD_DATABASE_NAME=dozmod
-ARG DOZMOD_DATABASE_HOST=localhost
-ARG DOZMOD_DATABASE_USER=dozmod
-ARG DOZMOD_DATABASE_PASSWORD=dozmod
+ENV DOZMOD_DATABASE_HOST=localhost
+ENV DOZMOD_DATABASE_PORT=3306
+ENV DOZMOD_DATABASE_CONNECTION_WAIT_TIMEOUT=1m
# install required packages
RUN apt-get update -y && \
- apt-get install -y openjdk-8-jre-headless
+ apt-get install -y openjdk-8-jre-headless wget
# make folder for dozmod Java server application and VMs
RUN mkdir -p ${DOZMOD_SERVER_PATH}
@@ -21,23 +20,20 @@ RUN mkdir -p ${DOZMOD_VSTORE_PATH}
# change working directory
WORKDIR ${DOZMOD_SERVER_PATH}
-# copy application and configuration file
+# install dockerize
+ENV DOCKERIZE_VERSION=v0.6.1
+RUN wget -q https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-linux-amd64-${DOCKERIZE_VERSION}.tar.gz && \
+ tar -C /usr/local/bin -xzvf dockerize-linux-amd64-${DOCKERIZE_VERSION}.tar.gz && \
+ rm dockerize-linux-amd64-${DOCKERIZE_VERSION}.tar.gz
+
+# copy application into the image
COPY ${DOZMOD_SERVER_FILE} dozmod-server.jar
-# customize configuration
-RUN echo "#" \
- "\n""# Autogenerated configuration. Do not edit!" \
- "\n""#" \
- "\n""vmstore.path = ${DOZMOD_VSTORE_PATH}" \
- "\n""db.uri = jdbc:mysql://${DOZMOD_DATABASE_HOST}/${DOZMOD_DATABASE_NAME}?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=utf8&connectionCollation=utf8mb4_unicode_ci" \
- "\n""db.username = ${DOZMOD_DATABASE_USER}" \
- "\n""db.password = ${DOZMOD_DATABASE_PASSWORD}" \
- "\n""db.location-table = " \
- "\n""master.address = ${DOZMOD_MASTER_SERVER}" > config.properties && \
- sed -i 's/[[:space:]]\+$//' config.properties
+# copy configuration template into the image
+COPY ${DOZMOD_CONFIG_FILE} config.properties.tmpl
# expose network ports
EXPOSE 9080 9090 9091
-# run the dozmod-server
-CMD [ "java", "-jar", "dozmod-server.jar" ]
+# finalize configuration from environment variables and run the dozmod-server
+CMD dockerize -template config.properties.tmpl:config.properties -wait tcp://${DOZMOD_DATABASE_HOST}:${DOZMOD_DATABASE_PORT} -timeout ${DOZMOD_DATABASE_CONNECTION_WAIT_TIMEOUT} java -jar dozmod-server.jar
diff --git a/dozentenmodulserver/setup/config.properties b/dozentenmodulserver/setup/config.properties
deleted file mode 100644
index 52ec5c65..00000000
--- a/dozentenmodulserver/setup/config.properties
+++ /dev/null
@@ -1,8 +0,0 @@
-# This is a sample configuration!
-vmstore.path = /mnt/bigfatstorage
-# Don't miss 'dbname' in the following property
-db.uri = jdbc:mysql://localhost/dbname?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=utf8&connectionCollation=utf8mb4_unicode_ci
-db.username = dbuser
-db.password = somepassword
-db.location-table = dmdbname.location
-master.address = master.server.address.example.com
diff --git a/dozentenmodulserver/setup/config.properties.tmpl b/dozentenmodulserver/setup/config.properties.tmpl
new file mode 100644
index 00000000..8a4d0627
--- /dev/null
+++ b/dozentenmodulserver/setup/config.properties.tmpl
@@ -0,0 +1,9 @@
+#
+# Autogenerated configuration. Do not edit!
+#
+vmstore.path = {{ .Env.DOZMOD_VSTORE_PATH }}
+db.uri = jdbc:mysql://{{ .Env.DOZMOD_DATABASE_HOST }}/{{ .Env.DOZMOD_DATABASE_NAME }}?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=utf8&connectionCollation=utf8mb4_unicode_ci
+db.username = {{ .Env.DOZMOD_DATABASE_USER }}
+db.password = {{ .Env.DOZMOD_DATABASE_PASSWORD }}
+db.location-table =
+master.address = {{ .Env.DOZMOD_MASTER_SERVER }}