From 497f8519fc85e33777c95755c46023ecf648a30e Mon Sep 17 00:00:00 2001 From: Manuel Bentele Date: Thu, 20 May 2021 17:04:25 +0200 Subject: [server] Start dozmod-server Docker container after database Docker container is ready --- dozentenmodulserver/.env | 27 ++++++++++++ dozentenmodulserver/docker-compose.yml | 48 +++++++++++----------- .../pkg/docker/dozmod-server_dockerfile | 36 ++++++++-------- dozentenmodulserver/setup/config.properties | 8 ---- dozentenmodulserver/setup/config.properties.tmpl | 9 ++++ 5 files changed, 77 insertions(+), 51 deletions(-) create mode 100644 dozentenmodulserver/.env delete mode 100644 dozentenmodulserver/setup/config.properties create mode 100644 dozentenmodulserver/setup/config.properties.tmpl (limited to 'dozentenmodulserver') 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 }} -- cgit v1.2.3-55-g7522