Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit bf28d5a2 authored by Joze RIHTARSIC's avatar Joze RIHTARSIC
Browse files

Add springboot image and integration test plan

parent 33d171f7
No related branches found
No related tags found
No related merge requests found
Pipeline #117493 passed with warnings
Showing
with 492 additions and 282 deletions
......@@ -94,7 +94,8 @@
<junit-jupiter.version>5.10.0</junit-jupiter.version>
<junit-platform-surefire-provider.version>1.3.2</junit-platform-surefire-provider.version>
<junitparams.version>1.1.1</junitparams.version>
<logback.version>1.3.8</logback.version>
<!-- Use logback 1.2.x because is the one used by springboot 5.7. Changing to 1.3+ will break springboot logging. -->
<logback.version>1.2.12</logback.version>
<mysql.jdbc.version>8.2.0</mysql.jdbc.version>
<metro.version>2.2.1-1</metro.version>
<mockito.version>4.11.0</mockito.version>
......@@ -102,7 +103,7 @@
<servlet-api.version>3.0.1</servlet-api.version>
<slf4j.version>2.0.9</slf4j.version>
<spring-modules-jakarta-commons.version>0.8</spring-modules-jakarta-commons.version>
<spring-boot.version>2.7.17</spring-boot.version>
<spring-boot.version>2.7.18</spring-boot.version>
<spring-boot.tomcat.version>9.0.82</spring-boot.tomcat.version>
<spring.security.version>5.8.8</spring.security.version>
<spring.version>5.3.30</spring.version>
......
# Experimental SMP docker image with springboot
Purpose of compose plan is to startup fully functional SMP environment for demo and testing. The plan contains MySql database
JDK8, it has disabled SML integration
# Run environment
docker-compose -f docker-compose.yml up -d
## SMP
url: http://localhost:8282/smp/
### MYSQL
Database client connection (for testing and debugging )
url: jdbc:mysql://localhost:3208/smp
Username: smp
Password: smp
### Volume (-v /opt/dockerdata/sml:/data)
Mysql database files and tomcat configuration (and logs) can be externalized for experimenting with different SMP settings.
## Mail server
Mock mail server for monitoring send alert mails.
url: http://localhost:9005/monitor
version: "3.0"
services:
smp-springboot:
image: smp-springboot-mysql:${SMP_VERSION}
container_name: smp-springboot-mysql
environment:
- SMP_INIT_PROPERTIES=smp.passwordPolicy.expired.forceChange=false
||smp.automation.authentication.external.tls.SSLClientCert.enabled=true
||smp.cluster.enabled=false
||smp.mode.development=true
||smp.ui.authentication.types=PASSWORD
||bdmsl.integration.enabled=false
||mail.smtp.host=mail-server.smp.local
||mail.smtp.port=2500
||smp.alert.user.login_failure.enabled=true
||smp.alert.user.suspended.enabled=true
||smp.alert.password.imminent_expiration.enabled=true
||smp.alert.password.expired.enabled=true
||smp.alert.accessToken.imminent_expiration.enabled=true
||smp.alert.accessToken.expired.enabled=true
||smp.alert.certificate.imminent_expiration.enabled=true
||smp.alert.certificate.expired.enabled=true
||smp.alert.accessToken.expired.enabled=true
volumes:
- ./properties/db-scripts:/tmp/custom-data/
- ./properties/keystores:/tmp/keystores/
ports:
- "8282:8084"
# - "3208:3306"
# - "5005:5005"
mail-service:
image: inbucket/inbucket:3.0.0
hostname: mail-server.smp.local
ports:
- "9205:9000"
#!/bin/bash
WORKING_DIR="$(dirname $0)"
SMP_INIT_DATABASE="../../../smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb.ddl"
#SMP_INIT_DATABASE_DATA="../../../smp-webapp/src/main/smp-setup/database-scripts/mysql5innodb-data.sql"
SMP_INIT_DATABASE_DATA="../../../smp-soapui-tests/groovy/mysql-4.1_integration_test_data.sql"
# soap ui data
PREFIX="smp-springboot-mysql"
SMP_VERSION=
# READ arguments
while getopts i:v: option
do
case "${option}"
in
i) SMP_INIT_DATABASE_DATA=${OPTARG};;
v) SMP_VERSION=${OPTARG};;
esac
done
if [ -z "${SMP_VERSION}" ]
then
# get version from POM file
SMP_VERSION="$(mvn org.apache.maven.plugins:maven-help-plugin:3.1.0:evaluate -Dexpression=project.version -q -DforceStdout)"
fi
echo "SMP version: $SMP_VERSION"
echo "Working Directory: ${WORKING_DIR}"
cd "$WORKING_DIR"
# check if property folder exists if not create it
if [ ! -d "./properties/db-scripts/" ]
then
mkdir -p "./properties/db-scripts/"
fi
# create database init script from l
cp "${SMP_INIT_DATABASE}" ./properties/db-scripts/mysql5innodb.ddl
cp "${SMP_INIT_DATABASE_DATA}" ./properties/db-scripts/mysql5innodb-data.sql
cp
function clearOldContainers {
echo "Clear containers and volumes"
docker-compose -p "${PREFIX}" rm -s -f -v
echo "Clear containers and volumes"
}
export SMP_VERSION="${SMP_VERSION}"
echo "Clear old containers"
clearOldContainers
# start "
echo "Start compose"
docker-compose -p ${PREFIX} up -d --force-recreate
# wait until service is up
for i in `seq 100`; do timeout 1 bash -c 'curl --silent --fail http://localhost:8282/smp/'; if [ $? -eq 0 ] ; then break;fi; echo "$i. Wait for tomcat to start!"; sleep 5; done;
#!/bin/bash
WORKING_DIR="$(dirname $0)"
echo "Working Directory: ${WORKING_DIR}"
cd "$WORKING_DIR"
PREFIX="smp-springboot-mysql"
# clear volume and containers - to run restart from scratch
function clearOldContainers {
echo "Save docker log to docker-file"
docker logs ${PREFIX} > smp-container.log 2>&1
echo "Clear containers and volumes"
docker-compose -p "${PREFIX}" rm -s -f -v
}
# stop and clear
clearOldContainers
......@@ -36,6 +36,8 @@ SMP_VERSION=
ORACLE_ARTEFACTS="/CEF/repo"
SMP_ARTEFACTS="../../smp-webapp/target/"
SMP_SPRINGBOOT_ARTEFACTS="../../smp-springboot/target/"
SMP_PLUGIN_EXAMPLE="../../smp-examples/smp-spi-payload-validation-example/target/"
SMP_ARTEFACTS_CLEAR="false"
SMP_IMAGE_PUBLISH="false"
......@@ -45,12 +47,13 @@ DOCKER_REGISTRY_HOST=${bamboo_DOCKER_REGISTRY_HOST}
DOCKER_FOLDER=${bamboo_DOCKER_FOLDER:-${bamboo_DOCKER_USER}}
# READ arguments
while getopts v:o:s:c:p: option; do
while getopts v:o:a:s:c:p: option; do
case "${option}" in
v) SMP_VERSION=${OPTARG} ;;
o) ORACLE_ARTEFACTS=${OPTARG} ;;
s) SMP_ARTEFACTS=${OPTARG} ;;
a) SMP_ARTEFACTS=${OPTARG} ;;
s) SMP_SPRINGBOOT_ARTEFACTS=${OPTARG} ;;
c) SMP_ARTEFACTS_CLEAR=${OPTARG} ;;
p) SMP_IMAGE_PUBLISH=${OPTARG} ;;
esac
......@@ -65,17 +68,16 @@ if [[ -z "${SMP_VERSION}" ]]; then
echo "Try to get version from artefacts: $(ls -ltr $SMP_ARTEFACTS)"
SMP_VERSION="$(ls ${SMP_ARTEFACTS}/smp-*-setup.zip | sed -e 's/.*smp-//g' | sed -e 's/-setup\.zip$//g')"
fi
fi
SMP_PLUGIN_EXAMPLE="../../smp-examples/smp-spi-payload-validation-example/target/"
DIRNAME=$(dirname "$0")
cd "$DIRNAME"
DIRNAME="$(pwd -P)"
echo "*****************************************************************"
echo "* SMP artefact folders: $SMP_ARTEFACTS, (Clear folder after build: $SMP_ARTEFACTS_CLEAR )"
echo "* Plugin example: $SMP_PLUGIN_EXAMPLE "
echo "* SMP artefact springboot folders: $SMP_SPRINGBOOT_ARTEFACTS"
echo "* SMP Plugin example: $SMP_PLUGIN_EXAMPLE "
echo "* Build SMP image for version $SMP_VERSION"
echo "* Oracle artefact folders: $ORACLE_ARTEFACTS"
echo "*****************************************************************"
......@@ -145,10 +147,14 @@ validateAndPrepareArtefacts() {
cp "${ORACLE_ARTEFACTS}/${WEBLOGIC_14_FILE}" ./oracle/weblogic-14.1.1.0/
fi
if [[ ! -d "./tomcat-mysql-smp-sml/artefacts/" ]]; then
mkdir -p "./tomcat-mysql-smp-sml/artefacts"
if [[ ! -d "./smp-springboot-mysql/artefacts/" ]]; then
mkdir -p "./smp-springboot-mysql/artefacts"
fi
if [[ ! -d "./tomcat-mysql-smp-sml/artefacts/" ]]; then
mkdir -p "./tomcat-mysql-smp-sml/artefacts"
fi
if [[ ! -d "./weblogic-14.1-smp/artefacts/" ]]; then
mkdir -p "./weblogic-14.1-smp/artefacts"
fi
......@@ -157,15 +163,16 @@ validateAndPrepareArtefacts() {
mkdir -p "./weblogic-12.2-smp/artefacts"
fi
# SMP artefats
# SMP artefacts
if [[ ! -f "${SMP_ARTEFACTS}/smp.war" ]]; then
echo "SMP artefact '${SMP_ARTEFACTS}/smp.war' not found. Was project built!"
echo "SMP artefact '${SMP_ARTEFACTS}/smp.war' not found. Was project built?"
exit 1
else
# copy artefact to docker build folder
cp -r shared-artefacts ./weblogic-12.2-smp/artefacts/
cp -r shared-artefacts ./weblogic-14.1-smp/artefacts/
cp -r shared-artefacts ./tomcat-mysql-smp-sml/artefacts/
cp -r shared-artefacts ./smp-springboot-mysql/artefacts/
# for weblogic
cp "${SMP_ARTEFACTS}/smp.war" ./weblogic-12.2-smp/artefacts/smp.war
cp "${SMP_ARTEFACTS}/smp.war" ./weblogic-14.1-smp/artefacts/smp.war
......@@ -173,6 +180,15 @@ validateAndPrepareArtefacts() {
cp "${SMP_ARTEFACTS}/smp.war" ./tomcat-mysql-smp-sml/artefacts/smp.war
fi
# add SMP smp-springboot artefacts to smp-springboot-mysql imag
if [[ ! -f "${SMP_SPRINGBOOT_ARTEFACTS}/smp-springboot-$SMP_VERSION-exec.jar" ]]; then
echo "SMP artefact '${SMP_SPRINGBOOT_ARTEFACTS}/smp-springboot-$SMP_VERSION-exec.jar' not found!"
exit 1
else
# for mysql tomcat
cp "${SMP_SPRINGBOOT_ARTEFACTS}/smp-springboot-$SMP_VERSION-exec.jar" ./smp-springboot-mysql/artefacts/smp-springboot-exec.jar
fi
# SMP setup zip
if [[ ! -f "${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip" ]]; then
echo "SMP setup bundle '${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip' not found. Was project built!"
......@@ -182,6 +198,7 @@ validateAndPrepareArtefacts() {
cp "${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip" ./weblogic-12.2-smp/artefacts/smp-setup.zip
cp "${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip" ./weblogic-14.1-smp/artefacts/smp-setup.zip
cp "${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip" ./tomcat-mysql-smp-sml/artefacts/smp-setup.zip
cp "${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip" ./smp-springboot-mysql/artefacts/smp-setup.zip
fi
if [[ ! -d "${SMP_PLUGIN_EXAMPLE}" ]]; then
......@@ -202,8 +219,18 @@ buildImages() {
buildWebLogicOracleImages12
buildWebLogicOracleImages14
buildTomcatMysqlImages
buildSpringbootMysqlImages
buildUtils
}
buildSpringbootMysqlImages() {
# build tomcat mysql image deployment.
docker build -t "smp-springboot-mysql:${SMP_VERSION}" ./smp-springboot-mysql/ --build-arg SMP_VERSION=${SMP_VERSION}
if [ $? -ne 0 ]; then
echo "Error occurred while building image [smp-springboot-mysql:${SMP_VERSION}]!"
exit 10
fi
}
buildTomcatMysqlImages() {
# build tomcat mysql image deployment.
docker build -t "smp-sml-tomcat-mysql:${SMP_VERSION}" ./tomcat-mysql-smp-sml/ --build-arg SMP_VERSION=${SMP_VERSION}
......
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- pattern definition -->
<property name="encoderPattern" value="%d{ISO8601} [%X{smp_user}] [%X{smp_session_id}] [%X{smp_request_id}] [%thread] %5p %c{1}:%L - %m%n" scope="global"/>
<property name="consolePattern" value="%d{ISO8601} [%X{smp_user}] [%X{smp_session_id}] [%X{smp_request_id}] [%thread] %5p %c{1}:%L - %m%n" scope="global"/>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.folder:-logs}/edelivery-smp.log</file>
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
<marker>SECURITY</marker>
<marker>BUSINESS</marker>
</evaluator>
<onMismatch>NEUTRAL</onMismatch>
<onMatch>DENY</onMatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>${log.folder:-logs}/edelivery-smp-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- each file should be at most 30MB, keep 60 days worth of history, but at most 20GB -->
<maxFileSize>30MB</maxFileSize>
<maxHistory>60</maxHistory>
<totalSizeCap>20GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${encoderPattern}</pattern>
</encoder>
</appender>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<encoder>
<pattern>${consolePattern}</pattern>
</encoder>
</appender>
<logger name="eu.europa.ec.edelivery" level="INFO" />
<logger name="eu.europa.ec.smp" level="INFO" />
<logger name="org.springframework.security.cas" level="INFO" />
<root level="WARN">
<appender-ref ref="file"/>
<appender-ref ref="stdout"/>
</root>
</configuration>
\ No newline at end of file
FROM ubuntu:22.04
MAINTAINER Joze Rihtarsic
ARG SMP_VERSION
ARG SMP_LOGICAL_ADDRESS="${SMP_LOGICAL_ADDRESS:-http://localhost:8080/smp/}"
# Set the SMP_VERSION env variable \
ENV SMP_HOME=/opt/smp \
SMP_DB_SCHEMA=smp \
SMP_DB_USER=smp \
SMP_INIT_PROPERTY_DELIMITER="||" \
SMP_INIT_PROPERTIES="" \
SMP_DB_USER_PASSWORD=smp \
MYSQL_ROOT_PASSWORD=root \
# misc variables
LANG=en_US.utf8 \
LD_LIBRARY_PATH=/usr/local/apr/lib \
# set debug
JPDA_ADDRESS="5005" \
JPDA_TRANSPORT="dt_socket"
# Exposing ports used in entrypoint.sh ..
# - 3306 Mysql port
# - 8080 springboot port
# - 5005 JDPA debug port
EXPOSE 3306 8084 5005
VOLUME ["/data"]
# install utils, java, mysql \
RUN apt-get -y update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
mysql-server \
openjdk-8-jdk \
locales\
curl \
unzip \
haveged \
&& rm -rf /var/lib/apt/lists/*
RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \
# set user
&& addgroup mysql mysql \
&& groupadd smp \
&& useradd -s /bin/false -g smp -d ${SMP_HOME} smp \
&& mkdir -p $SMP_HOME/logs \
&& cd $SMP_HOME \
&& export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::") \
&& echo "server.port=8084" > $SMP_HOME/application.properties
ADD ./artefacts /tmp/artefacts
COPY ./entrypoint.sh /sbin/entrypoint.sh
RUN unzip /tmp/artefacts/smp-setup.zip -d /tmp/ \
&& mv /tmp/smp-$SMP_VERSION /tmp/smp-setup \
&& mv /tmp/artefacts/smp-springboot-exec.jar $SMP_HOME/ \
&& chmod u+x /sbin/entrypoint.sh
ENTRYPOINT ["/sbin/entrypoint.sh"]
BDMSL with sprin-boot and mysql database.
DomiSMP with sprinboot and mysql database.
================================
The Images are intended for internal testing of the BDSML nightly snapshots builds. The images should not
The Image is intended for internal testing of the DomiSMP snapshots builds. The images should not
be used in production environment.
Image contains BDMSL deployed on the Tomcat 9 server with the MYSQL.
Image contains SMP deployed on the spring Embedded Tomcat 9 server with the MYSQL.
# How to build
To build an image with BDMSL application first copy and rename arterfacts into folder:
To build an image with DomiSMP application first copy and rename arterfacts into folder:
cp "${SML_ARTEFACTS}/bdmsl-springboot-${BDMSL_VERSION}-exec.jar" ./springboot-mysql/artefacts/bdmsl-springboot.jar
cp "${SML_ARTEFACTS}/bdmsl-webapp-${BDMSL_VERSION}-setup.zip" ./springboot-mysql/artefacts/bdmsl-webapp-setup.zip
cp "${SMP_ARTEFACTS}/smp-springboot-${SMP_VERSION}-exec.jar" ./artefacts/smp-springboot.jar
cp "${SMP_ARTEFACTS}/smp-${SMP_VERSION}-setup.zip" ./artefacts/smp-setup.zip
Then build image with command:
docker build -t bdmsl_springboot_mysql ./springboot-mysql/
r build -t smp_springboot_mysql --build-arg SMP_VERSION=5.1-SNAPSHOT .
# How to run
Tu run image execute command:
docker run --name bdmsl -p 8084:8080 -p 3304:3306 bdmsl_springboot_mysql:4.2-SNAPSHOT
docker run --name smp -p 8084:8080 -p 3304:3306 smp_springboot_mysql
In your browser, enter `https://localhost:8080/edelivery-sml` .
In your browser, enter `https://localhost:8080/smp` .
......@@ -34,4 +34,4 @@ In your browser, enter `https://localhost:8080/edelivery-sml` .
The edelivery nexus contains prebuild images for the testing. To start the Tomcat Mysql image
login to docker registry 'edelivery-docker.devops.tech.ec.europa.eu' and execute the following command.
docker run --name bdmsl-tomcat edelivery-docker.devops.tech.ec.europa.eu/bdmsl_springboot_mysql:4.2-SNAPSHOT -p 3306:3306 -p 8080:8080
\ No newline at end of file
docker run --name smp edelivery-docker.devops.tech.ec.europa.eu/smp_springboot_mysql:5.1-SNAPSHOT -p 3306:3306 -p 8080:8080
#!/bin/bash
#set -e
# parameters
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-"root"}
SMP_DB_USER=${SMP_DB_USER:-"smp"}
SMP_DB_USER_PASSWORD=${SMP_DB_USER_PASSWORD:-"secret123"}
SMP_DB_SCHEMA=${SMP_DB_SCHEMA:-"smp"}
DATA_DIR=/data
MYSQL_DATA_DIR=${DATA_DIR}/mysql
if [ ! -d ${DATA_DIR} ]; then
mkdir -p ${DATA_DIR}
fi
init_mysql() {
echo "[INFO] init database:"
if [ ! -d "/run/mysqld" ]; then
mkdir -p /run/mysqld
chown -R mysql:mysql /run/mysqld
fi
if [ ! -d ${MYSQL_DATA_DIR} ]; then
# sleep a little to avoid mv issues
sleep 3s
mv /var/lib/mysql ${DATA_DIR}
fi
rm -rf /var/lib/mysql
ln -sf ${MYSQL_DATA_DIR} /var/lib/mysql
chmod -R 0777 ${MYSQL_DATA_DIR}
chown -R mysql:mysql ${MYSQL_DATA_DIR}
echo '[INFO] start MySQL'
sleep 5s
service mysql start
echo "[INFO] ----------------------------------------"
echo "[INFO] create SMP database: ${SMP_DB_SCHEMA}"
if [ -d ${MYSQL_DATA_DIR}/${SMP_DB_SCHEMA} ]; then
echo "[INFO] MySQL ${SMP_DB_SCHEMA} already present, skipping creation"
else
echo "[INFO] MySQL ${SMP_DB_SCHEMA} not found, creating initial DBs"
echo 'Create smp database'
mysql -h localhost -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD';drop schema if exists $SMP_DB_SCHEMA;DROP USER IF EXISTS $SMP_DB_USER; create schema $SMP_DB_SCHEMA;alter database $SMP_DB_SCHEMA charset=utf8; create user $SMP_DB_USER identified by '$SMP_DB_USER_PASSWORD';grant all on $SMP_DB_SCHEMA.* to $SMP_DB_USER;"
if [ -f "/tmp/custom-data/mysql5innodb.sql" ]; then
echo "Use custom database script! "
mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $SMP_DB_SCHEMA <"tmp/custom-data/mysql5innodb.ddl"
else
echo "Use default database ddl script!"
mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $SMP_DB_SCHEMA <"/tmp/smp-setup/database-scripts/mysql5innodb.ddl"
fi
if [ -f "/tmp/custom-data/mysql5innodb-data.sql" ]; then
echo "Use custom init script! "
mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $SMP_DB_SCHEMA <"/tmp/custom-data/mysql5innodb-data.sql"
else
echo "Use default init script!"
mysql -h localhost -u root --password=$MYSQL_ROOT_PASSWORD $SMP_DB_SCHEMA < "/tmp/smp-setup/database-scripts/mysql5innodb-data.sql"
fi
fi
sleep 5s
}
addOrReplaceProperties() {
PROP_FILE=$1
INIT_PROPERTIES=$2
INIT_PROPERTY_DELIMITER=$3
# replace domibus properties
if [ -n "$INIT_PROPERTIES" ]; then
echo "Parse init properties: $INIT_PROPERTIES"
# add delimiter also to end :)
s="$INIT_PROPERTIES$INIT_PROPERTY_DELIMITER"
array=()
while [[ $s ]]; do
array+=("${s%%"$INIT_PROPERTY_DELIMITER"*}")
s=${s#*"$INIT_PROPERTY_DELIMITER"}
done
# replace parameters
IFS='='
for property in "${array[@]}"; do
read -r key value <<<"$property"
# escape regex chars and remove trailing and leading spaces..
keyRE="$(printf '%s' "${key// /}" | sed 's/[[\*^$()+?{|]/\\&/g')"
propertyRE="$(printf '%s' "${property// /}" | sed 's/[[\*^$()+?{|/]/\\&/g')"
echo "replace or add property: [$keyRE] with value [$propertyRE]"
# replace key line and commented #key line with new property
sed -i "s/^$keyRE=.*/$propertyRE/;s/^#$keyRE=.*/$propertyRE/" $PROP_FILE
# test if replaced if the line not exists add in on the end
grep -qF -- "$propertyRE" "$PROP_FILE" || echo "$propertyRE" >>"$PROP_FILE"
done
fi
}
init_smp() {
# set smp data/security folder
mkdir -p "${SMP_HOME}/smp/"
mkdir -p "${SMP_HOME}/smp-libs"
# copy smp keystore with sml authorized sml certificates
cp /tmp/artefacts/shared-artefacts/smp-logback.xml "${SMP_HOME}/logback.xml"
cp "/tmp/artefacts/shared-artefacts/smp-keystore-docker-demo.p12" "${SMP_HOME}/smp/smp-keystore-docker-demo.p12"
cp "/tmp/artefacts/shared-artefacts/smp-truststore-docker-demo.p12" "${SMP_HOME}/smp/smp-truststore-docker-demo.p12"
chown -R smp:smp "${SMP_HOME}"
}
init_smp_properties() {
echo "[INFO] init application.properties:"
{
echo "# mysql database configuration"
echo "smp.jdbc.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect"
echo "smp.jdbc.driver=com.mysql.cj.jdbc.Driver"
echo "smp.jdbc.url=jdbc:mysql://localhost:3306/${SMP_DB_SCHEMA}?allowPublicKeyRetrieval=true"
echo "smp.jdbc.user=${SMP_DB_USER}"
echo "smp.jdbc.password=${SMP_DB_USER_PASSWORD}"
echo "# SMP init parameters"
echo "smp.security.folder=${SMP_HOME}/smp/"
echo "smp.libraries.folder=${SMP_HOME}/smp-libs"
echo "smp.automation.authentication.external.tls.clientCert.enabled=true"
echo "bdmsl.integration.enabled=false"
echo "bdmsl.participant.multidomain.enabled=false"
echo "smp.keystore.filename=smp-keystore-docker-demo.p12"
echo "smp.keystore.type=PKCS12"
echo "smp.truststore.filename=smp-truststore-docker-demo.p12"
echo "smp.truststore.type=PKCS12"
echo "smp.keystore.password={DEC}{test123}"
echo "smp.truststore.password={DEC}{test123}"
} >>"$SMP_HOME/application.properties"
addOrReplaceProperties "$SMP_HOME/application.properties" "$SMP_INIT_PROPERTIES" "$SMP_INIT_PROPERTY_DELIMITER"
}
init_mysql
init_smp_properties
init_smp
echo '[INFO] start running SMP'
"${JAVA_HOME}/bin/java" -version
cd $SMP_HOME/
ls -ltr
su -s /bin/sh smp -c "${JAVA_HOME}/bin/java -jar smp-springboot-exec.jar"
FROM ubuntu:22.04
MAINTAINER jrc
ENV BDMSL_VERSION=5.0-SNAPSHOT \
DATA_DIR=/data \
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/ \
DB_SCHEMA=smp \
DB_USER=smp \
DB_USER_PASSWORD=smp \
MYSQL_ROOT_PASSWORD=root
ENV BDMSL_HOME=/opt/bdmsl
RUN apt-get update \
# get utils, bind9, java, mysql
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
mysql-server \
openjdk-8-jdk \
unzip \
wget \
curl \
vim \
haveged \
apache2-utils \
&& rm -rf /var/lib/apt/lists/* \
# create bdmsl user
&& mkdir "${BDMSL_HOME}" \
&& groupadd smp \
&& useradd -s /bin/false -g bdmsl -d ${BDMSL_HOME} smp \
&& cd /opt
#install
RUN cd /opt \
&& mkdir -p /opt/smpconf \
&& echo "[mysqld]" >> /etc/mysql/my.cnf \
&& echo "lower_case_table_names=1" >> /etc/mysql/my.cnf \
&& echo "collation-server=utf8_unicode_ci" >> /etc/mysql/my.cnf \
&& echo "init-connect='SET NAMES utf8'" >> /etc/mysql/my.cnf \
&& echo "character-set-server=utf8" >> /etc/mysql/my.cnf \
&& echo "default_authentication_plugin=mysql_native_password" >> /etc/mysql/my.cnf \
&& sed -i -e "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mysql.conf.d/mysqld.cnf
# deploy application
COPY entrypoint.sh /sbin/entrypoint.sh
COPY ./artefacts/smp-springboot-exec.jar ${BDMSL_HOME}/smp-springboot-exec.jar
COPY ./artefacts/smp-setup.zip /tmp/smp-setup.zip
# set configuration
RUN jar -xf /tmp/smp-setup.zip \
&& cp bdmsl-webapp-*/encriptionPrivateKey.private /opt/smlconf/encriptionPrivateKey.private \
&& cp bdmsl-webapp-*/keystore.jks /opt/smlconf/keystore.jks \
&& cp bdmsl-webapp-*/truststore.p12 /opt/smlconf/truststore.p12 \
&& mv bdmsl-webapp-*/database-scripts /opt/smlconf/database-scripts \
&& mv bdmsl-webapp-*/sml.config.properties /tmp/sml.config.properties \
&& rm -rf bdmsl-webapp-*/ \
&& chown -R bdmsl:bdmsl /opt/smlconf/ \
&& chmod 755 /sbin/entrypoint.sh
EXPOSE 3306 8084
VOLUME /data
ENTRYPOINT ["/sbin/entrypoint.sh"]
#!/bin/bash
set -e
ROOT_PASSWORD=${ROOT_PASSWORD:-password}
export JAVA_HOME=`type -p javac|xargs readlink -f|xargs dirname|xargs dirname`
BIND_DATA_DIR=${DATA_DIR}/bind
MYSQL_DATA_DIR=${DATA_DIR}/mysql
BDMSL_DIR=${DATA_DIR}/smp
if [ ! -d ${DATA_DIR} ]; then
mkdir -p ${DATA_DIR}
fi
init_mysql() {
# start MYSQL
echo "[INFO] Initialize mysql service: $(service mysql status)."
#service mysql start
# reinitialize mysql to start it with enabled lowercase tables, 'root' password and change the data folder
service mysql stop
rm -rf /var/lib/mysql
if [ ! -d ${MYSQL_DATA_DIR} ]; then
mkdir -p ${MYSQL_DATA_DIR}
fi
ln -sf ${MYSQL_DATA_DIR} /var/lib/mysql
chmod -R 0775 ${MYSQL_DATA_DIR}
usermod -d ${MYSQL_DATA_DIR} mysql
chown mysql:mysql ${MYSQL_DATA_DIR}
chmod 0775 ${MYSQL_DATA_DIR}
echo "ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';" > /tmp/mysql-init
mysqld --defaults-file=/etc/mysql/my.cnf --initialize --lower_case_table_names=1 --init-file=/tmp/mysql-init --user=mysql --console
service mysql start
PID_MYSQL=$(cat /var/run/mysqld/mysqld.sock.lock);
if [ ! -d ${MYSQL_DATA_DIR}/${DB_SCHEMA} ]; then
# create database
mysql -h localhost -u root --password=${MYSQL_ROOT_PASSWORD} -e "drop schema if exists $DB_SCHEMA;DROP USER IF EXISTS $DB_USER; create schema $DB_SCHEMA;alter database $DB_SCHEMA charset=utf8; create user $DB_USER identified by '$DB_USER_PASSWORD';grant all on $DB_SCHEMA.* to $DB_USER;"
# initialize database
mysql -h localhost -u root --password=${MYSQL_ROOT_PASSWORD} $DB_SCHEMA < /opt/smlconf/database-scripts/mysql5innodb.ddl
# init data
mysql -h localhost -u root --password=${MYSQL_ROOT_PASSWORD} $DB_SCHEMA < /opt/smlconf/database-scripts/mysql5innodb-data.sql
fi
}
init_bdmsl() {
echo "[INFO] init smp folders: ${BDMSL_HOME}/application.properties"
{
echo "# BDMSL application configuration"
echo "server.port=8080"
echo "# Database configuration"
echo "sml.hibernate.dialect=org.hibernate.dialect.MySQLDialect"
echo "sml.jdbc.driver=com.mysql.cj.jdbc.Driver"
echo "sml.jdbc.url=jdbc:mysql://localhost:3306/$DB_SCHEMA?allowPublicKeyRetrieval=true"
echo "sml.jdbc.user=$DB_USER"
echo "sml.jdbc.password=$DB_USER_PASSWORD"
} >> ${BDMSL_HOME}/application.properties
echo "[INFO] copy smp to shared folders: ${BDMSL_DIR}"
if [ ! -d ${BDMSL_DIR} ]; then
mv ${BDMSL_HOME} ${BDMSL_DIR}
fi
rm -rf ${BDMSL_HOME}
ln -sf ${BDMSL_DIR} ${BDMSL_HOME}
# override init artefacts as keystore, truststore, keys, ...
if [ -d /opt/smlconf/init-configuration ]; then
cp -r /opt/smlconf/init-configuration/*.* /opt/smlconf/
fi
# add trusted hostname certificate for CRL download over HTTPS test
if [ -f /opt/smlconf/init-configuration/sml_crl_hostname.cer ]; then
"${JAVA_HOME}"/bin/keytool -importcert -alias test-host -keystore "/etc/ssl/certs/java/cacerts" -storepass changeit -file /opt/smlconf/init-configuration/sml_crl_hostname.cer -noprompt
fi
}
#
# Function initialize and star squid proxy. Prepositions for function are
# installed packages squid and apache2-utils!
#
function init_squid() {
PROXY_FOLDER=${PROXY_FOLDER:-/data/proxy}
PROXY_CONFIG_LOGS="${PROXY_FOLDER}/logs"
PROXY_CONFIG_FILE="${PROXY_FOLDER}/squid.conf"
PROXY_USERS_FILE=/etc/squid/passwd
PROXY_AUTHENTICATION=${PROXY_AUTHENTICATION:-true}
PROXY_USERS=${PROXY_USERS:-proxyuser1:test123,proxyuser2:test123}
PROXY_PORT=${PROXY_PORT:-3127}
# system dependant
PROXY_LIBS=${PROXY_LIBS:-/usr/lib/squid}
echo "[INFO] starting squid configuration"
echo "---------------------------< suquid conf >---------------------------"
echo "PROXY_CONFIG_FILE=${PROXY_CONFIG_FILE}"
echo "PROXY_FOLDER=${PROXY_FOLDER}"
echo "PROXY_USERS_FILE=${PROXY_USERS_FILE}"
echo "PROXY_AUTHENTICATION=${PROXY_AUTHENTICATION}"
echo "PROXY_USERS=${PROXY_USERS}"
echo "------------------------------[ suquid conf ]-------------------------------"; echo
# set configuration
[[ ! -d "${PROXY_FOLDER}" ]] && mkdir -p "${PROXY_FOLDER}"
[[ ! -d "${PROXY_CONFIG_LOGS}" ]] && mkdir -p "${PROXY_CONFIG_LOGS}"
[[ ! -d "/var/run/squid/" ]] && mkdir -p "/var/run/squid/"
echo "# BDMSL squid configuration" > "${PROXY_CONFIG_FILE}"
{
echo "cache_access_log ${PROXY_CONFIG_LOGS}/access.log"
echo "cache_log ${PROXY_CONFIG_LOGS}/cache.log"
echo "cache_store_log ${PROXY_CONFIG_LOGS}/store.log"
echo ""
echo "pid_filename /var/run/squid/squidm.pid"
echo "cache_effective_user smp"
echo ""
echo "http_port ${PROXY_PORT}"
echo ""
} >> "${PROXY_CONFIG_FILE}"
if [ "${PROXY_AUTHENTICATION}" == "true" ]; then
local users=(${PROXY_USERS//,/ })
local userNames=()
# clear file
echo "# BDMSL proxy users" > "${PROXY_USERS_FILE}"
for user in "${users[@]}"; do
local userCredentials=(${user//:/ })
userNames+=(${userCredentials[0]})
# create a user
htpasswd -b ${PROXY_USERS_FILE} ${userCredentials[0]} ${userCredentials[1]} || exit $?
done
echo "Created proxy users: ${userNames[*]}"
# create squid property file
{
echo "auth_param basic program ${PROXY_LIBS}/basic_ncsa_auth ${PROXY_USERS_FILE}"
echo "auth_param basic children 5"
echo "auth_param basic realm Squid proxy-caching web server"
echo "auth_param basic credentialsttl 1 minute"
echo "auth_param basic casesensitive off"
echo ""
echo "acl ncsa_users proxy_auth REQUIRED"
echo "http_access allow ncsa_users"
echo ""
} >> ${PROXY_CONFIG_FILE}
# example to test
# wget -e use_proxy=yes --proxy-user=proxyuser2 --proxy-password=test123 -e http_proxy=http://127.0.0.1:3127 -e https_proxy=http://127.0.0.1:3127 https://www.google.com/ --no-check-certificate
else
{
echo "http_access allow all"
echo ""
} >> ${PROXY_CONFIG_FILE}
fi
chown -R smp:smp ${PROXY_FOLDER}
echo "Start squid proxy server"
$(nohup $(which squid) -f ${PROXY_CONFIG_FILE} -NYCd 1 &> ${PROXY_CONFIG_LOGS}/squid.out &)
}
init_squid
init_bind
init_mysql
init_bdmsl
#----------------------------------------------------
# stard bind 9
# allow arguments to be passed to named
echo "[INFO] Start bind"
if [[ ${1:0:1} = '-' ]]; then
EXTRA_ARGS="$@"
set --
elif [[ ${1} == named || ${1} == $(which named) ]]; then
EXTRA_ARGS="${@:2}"
set --
fi
echo "Starting named..."
service named stop
$(which named) -4 -u ${BIND_USER} ${EXTRA_ARGS} -d 0 -L ${BIND_DATA_DIR}/logs/stdout.txt &
#----------------------------------------------------
# start tomcat
echo "[INFO] Start smp"
cd ${BDMSL_DIR}
ls -ltr
su -s /bin/sh smp -c "${JAVA_HOME}/bin/java -jar smp-springboot-exec.jar"
......@@ -60,6 +60,7 @@ RUN apt-get update \
bind9 \
bind9utils \
dnsutils \
haveged \
libapr1 \
libapr1-dev \
libssl-dev \
......
# Experiamental SMP docker image
Purpose of image is to help SMP and AP sofware developers to create development environment for localy testing Dynamic Discovery using SML and SMP.
Image uses latest version of eDelivery SMP setup on tomcat, mysql ubuntu
# Test and Domo SMP docker image
The Image is intended for internal testing of the DomiSMP snapshots builds. The images should not
be used in production environment.
# Image build
docker build -t smp .
# Run container based on smp image
docker run --name smp -p 8080:8080 smp
docker run --name smp -it --rm -p [http-port]:8080 edelivery-docker.devops.tech.ec.europa.eu/edeliverytest/smp-sml-tomcat-mysql:${SMP_VERSION}
example:
......
......@@ -60,7 +60,7 @@ limitations under the License.
<configuration>
<classifier>exec</classifier>
<mainClass>eu.europa.ec.springboot.smp.SMPApplication</mainClass>
<layout>ZIP</layout>
<layout>JAR</layout>
<!-- Don't copy the war as a dependency, it's included as a resource -->
<excludes>
<exclude>
......@@ -68,7 +68,6 @@ limitations under the License.
<artifactId>smp</artifactId>
</exclude>
</excludes>
</configuration>
<executions>
<execution>
......@@ -86,10 +85,22 @@ limitations under the License.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
</exclusions>
</dependency>
<!--add latest jackson which is used also by the smp.war -->
<dependency>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment