avril_on_docker
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| avril_on_docker [2019/01/02 17:01] – [Avril] kalaschnikow | avril_on_docker [2023/05/13 10:14] (current) – [2. Copy war files to the server] kalaschnikow | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== 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 " | ||
| + | |||
| + | ==== 2. Copy war files to the server ==== | ||
| + | |||
| + | Copy the file(s) to the remote server: | ||
| + | <code bash> | ||
| + | cd / | ||
| + | |||
| + | # for avril2019: | ||
| + | scp -P 1002 AvrilDock.war kalaschnikow@avril2019.wialon-consulting.de:/ | ||
| + | scp -P 1002 AvrilWebAdmin.war kalaschnikow@avril2019.wialon-consulting.de:/ | ||
| + | |||
| + | # for avril2021: | ||
| + | scp -P 1002 AvrilDock.war kalaschnikow@avril2021.avril.work:/ | ||
| + | scp -P 1002 AvrilWebAdmin.war kalaschnikow@avril2021.avril.work:/ | ||
| + | </ | ||
| + | |||
| + | ==== 3. Deploy war files to the server ==== | ||
| + | |||
| + | Login to the remote server | ||
| + | |||
| + | <code bash> | ||
| + | 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) | ||
| + | <code bash> | ||
| + | mkdir ~/ | ||
| + | mkdir ~/ | ||
| + | mkdir ~/ | ||
| + | cd ~/ | ||
| + | cp / | ||
| + | cp / | ||
| + | cd ~/ | ||
| + | cp ~/ | ||
| + | cp ~/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | Stop the compose | ||
| + | <code bash> | ||
| + | cd / | ||
| + | sudo docker-compose down | ||
| + | </ | ||
| + | |||
| + | |||
| + | Copy the file(s) to the deployment directory: | ||
| + | <code bash> | ||
| + | cp ~/ | ||
| + | cp ~/ | ||
| + | </ | ||
| + | |||
| + | Start compose | ||
| + | <code bash> | ||
| + | cd / | ||
| + | sudo docker-compose up -d | ||
| + | </ | ||
| + | |||
| + | ===== Run Avril on my local computer ===== | ||
| + | |||
| + | ==== MySQL ==== | ||
| + | We need two MySQL containers because we have two containers ('' | ||
| + | |||
| + | <code bash> | ||
| + | # === 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: | ||
| + | sudo docker run --network avrilnet \ | ||
| + | --name keycloakmysql -v / | ||
| + | -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 / | ||
| + | -e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=keycYaopnlp=8 \ | ||
| + | -e MYSQL_ROOT_PASSWORD=mysqlYaopnlp=8 -d mysql:5.5 | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== RabbitMQ ==== | ||
| + | |||
| + | <code bash> | ||
| + | # === 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 / | ||
| + | rabbitmq: | ||
| + | |||
| + | # 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 '' | ||
| + | |||
| + | ==== Keycloak ==== | ||
| + | |||
| + | <code bash> | ||
| + | # === 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/ | ||
| + | |||
| + | # 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 ==== | ||
| + | |||
| + | <code bash> | ||
| + | # === 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 / | ||
| + | -v / | ||
| + | -v / | ||
| + | -v / | ||
| + | -it avril | ||
| + | |||
| + | # start avril container | ||
| + | sudo docker run --network avrilnet --name avril \ | ||
| + | -p 8080:8080 -p 9990:9990 \ | ||
| + | -v / | ||
| + | -v / | ||
| + | -v / | ||
| + | -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 / | ||
| + | -v / | ||
| + | -v / | ||
| + | -it avril | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | If all containers exist, it is possible to run them with the following simple commands: | ||
| + | <code bash> | ||
| + | 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: | ||
| + | <code bash> | ||
| + | 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 '' | ||
| + | |||
| + | See also: https:// | ||
| + | |||
| + | At the moment it is solved with '' | ||
| + | |||
| + | < | ||
| + | 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 [[https:// | ||
| + | |||
| + | In short: | ||
| + | <code bash> | ||
| + | # 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:/ | ||
| + | |||
| + | # then load it into docker | ||
| + | docker load -i <path to image tar file> | ||
| + | </ | ||
| + | |||
| + | Full version (but not completed yet!): | ||
| + | <code bash> | ||
| + | # 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: | ||
| + | |||
| + | <code bash> | ||
| + | # | ||
| + | # ### On SRC server ### | ||
| + | # | ||
| + | |||
| + | # pack AvrilKeycloak image | ||
| + | sudo docker save -o ./ | ||
| + | |||
| + | # copy file to the DEST server | ||
| + | scp AvrilKeycloak.tar kalaschnikow@avril2018.wialon-consulting.de:/ | ||
| + | |||
| + | |||
| + | # 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:/ | ||
| + | scp keycloakmysql.zip kalaschnikow@avril2018.wialon-consulting.de:/ | ||
| + | |||
| + | |||
| + | # | ||
| + | # ### On DEST server ### | ||
| + | # | ||
| + | |||
| + | # copy files to _artifacts folder | ||
| + | cd / | ||
| + | cp ~/ | ||
| + | cp ~/ | ||
| + | mv ~/ | ||
| + | |||
| + | # unpack files | ||
| + | unzip keycloakmysql.zip | ||
| + | unzip avrilmysql.zip | ||
| + | |||
| + | # move directories to dockerdata | ||
| + | mv keycloakmysql .. | ||
| + | mv avrilmysql .. | ||
| + | |||
| + | # create network ' | ||
| + | sudo docker network create avrilnet | ||
| + | |||
| + | # run keycloakmysql container | ||
| + | # ( if necessary open port with '-p xxxx: | ||
| + | sudo docker run --network avrilnet \ | ||
| + | --name keycloakmysql -v / | ||
| + | -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 | ||
| + | </ | ||
