User Tools

Site Tools


avril_on_docker

Avril on Docker

Build Docker images

There are five containers, that are necessary to run Avril on Docker:

  • avrilmysql (based on mysql image)
  • keycloakmysql (based on mysql image)
  • avrilrabbitmq (based on my own RabbitMQ image)
  • avrilkeycloak (based on my own Keycloak image)
  • avril (based on Avril image)

So three of them should be built first. The Maven modules for them are located in my Avril project. So open the workspace and start following run configurations:

  • package AvrilKeycloak
  • package AvrilRabbitMQ
  • package AvrilDock → package an AvrilDock WAR file
  • install AvrilDock → install AvrilDock WAR file to the local repo
  • package AvrilWebAdmin
  • install AvrilWebAdmin → install AvrilWebAdmin WAR file to the local repo
  • package Avril

Deploy wars on remote server

1. Package wars

Execute following Maven targets (e.g. from the IDE):

  • install AvrilDock (avril2019)
  • install AvrilWebAdmin (avril2019)

It is also possible to execute “package” targets, but then the files should be manually copied to the proper directories.

2. Copy war files to the server

Copy the file(s) to the remote server:

cd /home/kalaschnikow/Desktop/avril_misc/install
 
# for avril2019:
scp -P 1002 AvrilDock.war kalaschnikow@avril2019.wialon-consulting.de:/home/kalaschnikow/AvrilDock.war
scp -P 1002 AvrilWebAdmin.war kalaschnikow@avril2019.wialon-consulting.de:/home/kalaschnikow/AvrilWebAdmin.war
 
# for avril2021:
scp -P 1002 AvrilDock.war kalaschnikow@avril2021.avril.work:/home/kalaschnikow/AvrilDock.war
scp -P 1002 AvrilWebAdmin.war kalaschnikow@avril2021.avril.work:/home/kalaschnikow/AvrilWebAdmin.war

3. Deploy war files to the server

Login to the remote server

ssh -p 1002 kalaschnikow@avril2019.wialon-consulting.de

(the following commands will be executed on the remote server)

(Optionally) Backup old WAR files (replace 20201208 with current date)

mkdir ~/avril.bak/wars/20201208
mkdir ~/avril.bak/wars/20201208/old
mkdir ~/avril.bak/wars/20201208/new
cd ~/avril.bak/wars/20201208/old
cp /dockerdata/volumes/avril/wildfly/deployments/AvrilDock.war .
cp /dockerdata/volumes/avril/wildfly/deployments/AvrilWebAdmin.war .
cd ~/avril.bak/wars/20201208/new
cp ~/AvrilDock.war .
cp ~/AvrilWebAdmin.war .

Stop the compose

cd /dockerdata/compose
sudo docker-compose down

Copy the file(s) to the deployment directory:

cp ~/AvrilDock.war /dockerdata/volumes/avril/wildfly/deployments/AvrilDock.war
cp ~/AvrilWebAdmin.war /dockerdata/volumes/avril/wildfly/deployments/AvrilWebAdmin.war

Start compose

cd /dockerdata/compose
sudo docker-compose up -d

Run Avril on my local computer

MySQL

We need two MySQL containers because we have two containers (avrilkeycloak and avril), which need MySQL.

# === MySQL for keycloak ===
 
# stop native MySQL service
sudo service mysql stop
 
# remove old keycloakmysql container if necessary
sudo docker rm keycloakmysql
 
# run keycloakmysql container
# ( if necessary open port with '-p xxxx:3306', where xxxx port number on localhost, e.g. 3307 )
sudo docker run --network avrilnet \
--name keycloakmysql -v /dockerdata/keycloakmysql:/var/lib/mysql \
-e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=keycYaopnlp=8 \
-e MYSQL_ROOT_PASSWORD=mysqlYaopnlp=8 -d mysql:5.5
 
# === MySQL for avril ===
 
# remove old avrilmysql container if necessary
sudo docker rm avrilmysql
 
# run avrilmysql container
sudo docker run --network avrilnet -p 3306:3306 \
--name avrilmysql -v /dockerdata/avrilmysql:/var/lib/mysql \
-e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=keycYaopnlp=8 \
-e MYSQL_ROOT_PASSWORD=mysqlYaopnlp=8 -d mysql:5.5

RabbitMQ

# === RabbitMQ ===
 
# stop service
sudo service rabbitmq-server stop
 
# for official image:
sudo docker run --network avrilnet \
-d --hostname kalaschnikow2017 --name avrilrabbitmq \
-p 15672:15672 -p 1883:1883 \
-v /dockerdata/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins \
rabbitmq:3-management
 
# for my image:
sudo docker run --network avrilnet \
-d --hostname kalaschnikow2017 --name avrilrabbitmq \
-p 15672:15672 -p 1883:1883 \
avrilrabbitmq
 
 
# my image on 1fire
sudo docker run --network avrilnet \
-d --hostname avril2018.wialon-consulting.de --name avrilrabbitmq \
-p 15672:15672 -p 1883:1883 \
avrilrabbitmq

After that we can open management UI entering http://host_name:15672 (for example http://62.113.211.161:15672 ) in the browser.

Keycloak

# === Keycloak ===
 
# remove old avrilkeycloak container if necessary
sudo docker rm avrilkeycloak
 
# run avrilkeycloak container (based on official keycloak image)
sudo docker run --network avrilnet --name avrilkeycloak -p 8180:8080 \
  -e DB_VENDOR=mysql \
  -e DB_ADDR=avrilmysql \
  -e MYSQL_PORT_3306_TCP_ADDR=avrilmysql \
  -e MYSQL_PORT_3306_TCP_PORT=3306 \
  -e MYSQL_PASSWORD=keycYaopnlp=8 \
  -d jboss/keycloak:3.4.3.Final
 
# run avrilkeycloak container (based my own image)
sudo docker run --network avrilnet --name avrilkeycloak -p 8180:8180 \
  -e DB_VENDOR=mysql \
  -e DB_ADDR=keycloakmysql \
  -e MYSQL_PORT_3306_TCP_ADDR=keycloakmysql \
  -e MYSQL_PORT_3306_TCP_PORT=3306 \
  -e MYSQL_PASSWORD=keycYaopnlp=8 \
  -d avrilkeycloak

Avril

# === Avril ===
 
# remove old avril container if necessary
sudo docker rm avril
 
# start avril container (old way)
sudo docker run --network avrilnet --name avril -p 8080:8080 \ 
  -v /dockerdata/avril/modules/system/add-ons:/opt/jboss/wildfly/modules/system/add-ons \
  -v /dockerdata/avril/upload:/opt/jboss/wildfly/upload \
  -v /dockerdata/avril/modules/system/layers/base/com/mysql:/opt/jboss/wildfly/modules/system/layers/base/com/mysql \
  -v /dockerdata/avril/standalone/configuration/standalone.xml:/opt/jboss/wildfly/standalone/configuration/standalone.xml \
  -it avril
 
# start avril container
sudo docker run --network avrilnet --name avril \
  -p 8080:8080 -p 9990:9990 \
  -v /dockerdata/avril/modules/system/add-ons:/opt/jboss/wildfly/modules/system/add-ons \
  -v /dockerdata/avril/upload:/opt/jboss/wildfly/upload \
  -v /dockerdata/avril/modules/system/layers/base/com/mysql:/opt/jboss/wildfly/modules/system/layers/base/com/mysql \
  -it avril
 
 
# start avril container in debug mode
sudo docker run --network avrilnet --name avril \
  -p 8080:8080 -p 9990:9990 -p 8787:8787 \
  -v /dockerdata/avril/modules/system/add-ons:/opt/jboss/wildfly/modules/system/add-ons \
  -v /dockerdata/avril/upload:/opt/jboss/wildfly/upload \
  -v /dockerdata/avril/modules/system/layers/base/com/mysql:/opt/jboss/wildfly/modules/system/layers/base/com/mysql \
  -it avril

If all containers exist, it is possible to run them with the following simple commands:

sudo docker start keycloakmysql
 
sudo docker start avrilmysql
 
sudo docker start avrilrabbitmq
 
sudo docker start avrilkeycloak
 
sudo docker start avril

Or all with one command:

sudo docker start keycloakmysql && sudo docker start avrilmysql && sudo docker start avrilrabbitmq && \
sudo docker start avrilkeycloak && sudo docker start avril

Autostart containers on reboot

It is possible to to use option –restart unless-stopped on run command. (TODO: include it in the documentation above).

See also: https://docs.docker.com/config/containers/start-containers-automatically/

At the moment it is solved with update commands on all containers:

sudo docker update --restart unless-stopped avrilmysql && \
sudo docker update --restart unless-stopped avril && \
sudo docker update --restart unless-stopped keycloakmysql && \
sudo docker update --restart unless-stopped avrilkeycloak && \
sudo docker update --restart unless-stopped avrilrabbitmq

Transfer images between computers

See this Stackoverflow question

In short:

# first save image as TAR archive
docker save -o <path for generated tar file> <image name> 
 
# then copy it for example with SCP 
scp file.ext kalaschnikow@avril2018.wialon-consulting.de:/home/kalaschnikow
 
# then load it into docker
docker load -i <path to image tar file>

Full version (but not completed yet!):

# pack mysql images
# ...
# pack rabbit mq image
sudo docker save -o avrilrabbitmq.tar avrilrabbitmq
 
 
# pack AvrilDock image
# ...
 
# pack AvrilWebAdmin image
# ...
 
# gzip all tars as multi volume
# ...
# sudo gzip avrilrabbitmq.tar ...
 
# transfer volumes to remote server
...
 
# unpack on the remote server
# ...

Install Avril and all necessary images on a new server (old version)

At first package all my images. Open IntelliJ and start following run configurations:

  • package AvrilKeycloak
  • package AvrilRabbitMQ
  • package Avril

After that do the following on the console:

#
# ### On SRC server ###
#
 
# pack AvrilKeycloak image
sudo docker save -o ./AvrilKeycloak.tar avrilkeycloak:latest
 
# copy file to the DEST server
scp AvrilKeycloak.tar kalaschnikow@avril2018.wialon-consulting.de:/home/kalaschnikow
 
 
# pack keycloak database
sudo zip -r keycloakmysql.zip keycloakmysql
 
# pack avril database
sudo zip -r avrilmysql.zip avrilmysql
 
# copy files to the DEST server
scp avrilmysql.zip kalaschnikow@avril2018.wialon-consulting.de:/home/kalaschnikow
scp keycloakmysql.zip kalaschnikow@avril2018.wialon-consulting.de:/home/kalaschnikow
 
 
#
# ### On DEST server ###
#
 
# copy files to _artifacts folder
cd /dockerdata/_artifacts
cp ~/keycloakmysql.zip .
cp ~/avrilmysql.zip .
mv ~/AvrilKeycloak.tar .
 
# unpack files
unzip keycloakmysql.zip
unzip avrilmysql.zip
 
# move directories to dockerdata
mv keycloakmysql ..
mv avrilmysql ..
 
# create network 'avrilnet' (if it not already exists)
sudo docker network create avrilnet
 
# run keycloakmysql container
# ( if necessary open port with '-p xxxx:3306', where xxxx port number on localhost, e.g. 3307 )
sudo docker run --network avrilnet \
--name keycloakmysql -v /dockerdata/keycloakmysql:/var/lib/mysql \
-e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=keycYaopnlp=8 \
-e MYSQL_ROOT_PASSWORD=mysqlYaopnlp=8 -d mysql:5.5
 
# load AvrilKeycloak image
sudo docker load -i AvrilKeycloak.tar
 
# run avrilkeycloak container
sudo docker run --network avrilnet --name avrilkeycloak -p 8180:8180 \
  -e DB_VENDOR=mysql \
  -e DB_ADDR=keycloakmysql \
  -e MYSQL_PORT_3306_TCP_ADDR=keycloakmysql \
  -e MYSQL_PORT_3306_TCP_PORT=3306 \
  -e MYSQL_PASSWORD=keycYaopnlp=8 \
  -d avrilkeycloak
avril_on_docker.txt · Last modified: by kalaschnikow