From f1a71a8733b08df863753a5875eaa9d8e41d1401 Mon Sep 17 00:00:00 2001 From: Marc Sladek Date: Wed, 24 Jun 2026 13:42:01 +0200 Subject: [PATCH 1/7] celements-webapp docker build --- celements-webapp/Jenkinsfile | 8 +++ celements-webapp/README.md | 53 ++++++++++++++++++ celements-webapp/compose.build.yml | 14 +++++ celements-webapp/compose.local.yml | 10 ++-- celements-webapp/docker/Dockerfile | 51 +++++++++++++++++ .../docker/Dockerfile.dockerignore | 11 ++++ .../{Dockerfile-local => Dockerfile.local} | 4 +- .../docker/Dockerfile.local.dockerignore | 1 + .../tomcat/{ => conf}/jakarta.converter.xml | 0 .../log4j2.local.properties} | 0 .../docker/tomcat/conf/server.template.xml | 55 +++++++++++++++++++ celements-webapp/docker/tomcat/conf/setenv.sh | 33 +++++++++++ celements-webapp/docker/tomcat/entrypoint.sh | 14 +++++ celements-webapp/docker/tomcat/setenv.sh | 16 ------ celements-webapp/pom.xml | 6 +- celements-webapp/sample.env | 1 + .../src/main/webapp/WEB-INF/xwiki.cfg | 2 +- 17 files changed, 252 insertions(+), 27 deletions(-) create mode 100644 celements-webapp/Jenkinsfile create mode 100644 celements-webapp/README.md create mode 100644 celements-webapp/compose.build.yml create mode 100644 celements-webapp/docker/Dockerfile create mode 100644 celements-webapp/docker/Dockerfile.dockerignore rename celements-webapp/docker/{Dockerfile-local => Dockerfile.local} (93%) create mode 120000 celements-webapp/docker/Dockerfile.local.dockerignore rename celements-webapp/docker/tomcat/{ => conf}/jakarta.converter.xml (100%) rename celements-webapp/docker/tomcat/{log4j2.properties => conf/log4j2.local.properties} (100%) create mode 100644 celements-webapp/docker/tomcat/conf/server.template.xml create mode 100644 celements-webapp/docker/tomcat/conf/setenv.sh create mode 100644 celements-webapp/docker/tomcat/entrypoint.sh delete mode 100644 celements-webapp/docker/tomcat/setenv.sh diff --git a/celements-webapp/Jenkinsfile b/celements-webapp/Jenkinsfile new file mode 100644 index 000000000..27bc05788 --- /dev/null +++ b/celements-webapp/Jenkinsfile @@ -0,0 +1,8 @@ +@Library('synventis') _ + +dockerImagePipeline( + org: 'celements', + image: 'celements-webapp', + appDir: 'celements-webapp', + mode: 'mvn' +) diff --git a/celements-webapp/README.md b/celements-webapp/README.md new file mode 100644 index 000000000..e9454c625 --- /dev/null +++ b/celements-webapp/README.md @@ -0,0 +1,53 @@ +# Celements Webapp + +`celements-webapp` is the WAR application deployed into Tomcat. + +## Local Development + +Create the local runtime configuration: + +```sh +cp sample.env .env && vim .env +``` + +Build the exploded WAR for the local mounted-webapp setup: + +```sh +mvn clean install -P local +``` + +Start the sqlserver first, then the rest: + +```sh +docker compose up -d sqlserver +docker compose up -d +``` + +Open `http://localhost:2080`. + +For remote development, forward the Tomcat port: + +```sh +ssh -N -L 2080:localhost:2080 myremotehost +``` + +## Local Image Builds + +Local image builds use `compose.build.yml`. The build requires an untracked `mvn-settings.xml` in +this directory with access to private Maven artifacts. + +```sh +docker compose -f compose.build.yml build +``` + +This builds the same image shape as Jenkins: Maven build stage, Tomcat runtime stage, and +`target/celements-web.war` copied into `webapps/ROOT.war`. + +## Image builds + +The image is published by `Jenkinsfile`. + +The pipeline extracts the Maven project version from `pom.xml` and publishes: + +- `ghcr.io/celements/celements-webapp:` +- `ghcr.io/celements/celements-webapp:-` diff --git a/celements-webapp/compose.build.yml b/celements-webapp/compose.build.yml new file mode 100644 index 000000000..62fba7d77 --- /dev/null +++ b/celements-webapp/compose.build.yml @@ -0,0 +1,14 @@ +services: + webserver: + image: celements-webapp + build: + context: . + dockerfile: docker/Dockerfile + args: + MVN_CACHE_KEY: "${MVN_CACHE_KEY:-none}" + secrets: + - mvnsettings + +secrets: + mvnsettings: + file: ./mvn-settings.xml diff --git a/celements-webapp/compose.local.yml b/celements-webapp/compose.local.yml index a9db4c6e0..7c6c4d9bc 100644 --- a/celements-webapp/compose.local.yml +++ b/celements-webapp/compose.local.yml @@ -1,19 +1,19 @@ name: celements-web services: - webserver: + webserver: container_name: celements-web image: celements-dev:latest build: context: . - dockerfile: docker/Dockerfile-local + dockerfile: docker/Dockerfile.local ports: - "2080:8080" # tomcat - "2000:8000" # remote debugging - env_file: ./.env + env_file: .env volumes: - ./target/celements-web:/usr/local/tomcat/webapps/ROOT:ro - - ./docker/tomcat/log4j2.properties:/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/log4j2.properties:ro + - ./docker/tomcat/conf/log4j2.local.properties:/usr/local/tomcat/webapps/ROOT/WEB-INF/classes/log4j2.properties:ro restart: unless-stopped networks: - celements @@ -27,7 +27,7 @@ services: image: mariadb:10.1 ports: - "2306:3306" # for direct client access - env_file: ./.env + env_file: .env environment: - "MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD:?}" volumes: diff --git a/celements-webapp/docker/Dockerfile b/celements-webapp/docker/Dockerfile new file mode 100644 index 000000000..839dde517 --- /dev/null +++ b/celements-webapp/docker/Dockerfile @@ -0,0 +1,51 @@ +FROM maven:3-eclipse-temurin-21 AS build + +WORKDIR /app + +# Layer: dependencies +ARG MVN_CACHE_KEY=none +COPY pom.xml ./ +RUN --mount=type=secret,id=mvnsettings,required=true,dst=/root/.m2/settings.xml \ + echo "MVN_CACHE_KEY: ${MVN_CACHE_KEY}" && \ + mvn -B -U dependency:go-offline && \ + find /root/.m2/repository -name "*.lastUpdated" -delete && \ + find /root/.m2/repository -name "_remote.repositories" -delete + +# Layer: package +COPY . . +RUN mvn -B clean package + +FROM tomcat:10-jdk21-temurin AS execute + +ARG VERSION +ARG REVISION + +LABEL org.opencontainers.image.source="https://github.com/celements/celements-web" \ + org.opencontainers.image.description="Celements web application" \ + org.opencontainers.image.version="${VERSION}" \ + org.opencontainers.image.revision="${REVISION}" + +ENV CELEMENTS_DATA=/usr/local/celements \ + CONF_DIR=/usr/local/conf + +COPY docker/tomcat/entrypoint.sh /usr/local/bin/start +COPY docker/tomcat/conf "${CONF_DIR}" + +RUN apt-get update \ + && apt-get --no-install-recommends -y install \ + gettext-base \ + && rm -rf /var/lib/apt/lists/* "${CATALINA_HOME}/webapps/"* \ + && mkdir -p \ + "${CELEMENTS_DATA}" \ + "${CATALINA_HOME}/temp" \ + "${CATALINA_HOME}/conf/Catalina/localhost" \ + && cp "${CONF_DIR}/setenv.sh" "${CATALINA_HOME}/bin/" \ + && cp "${CONF_DIR}/jakarta.converter.xml" "${CATALINA_HOME}/conf/Catalina/localhost/ROOT.xml" \ + && chmod +x /usr/local/bin/start + +COPY --from=build /app/target/celements-web.war "${CATALINA_HOME}/webapps/ROOT.war" + +EXPOSE 8080 9090 + +ENTRYPOINT ["start"] +CMD ["catalina.sh", "run"] diff --git a/celements-webapp/docker/Dockerfile.dockerignore b/celements-webapp/docker/Dockerfile.dockerignore new file mode 100644 index 000000000..882eb7f19 --- /dev/null +++ b/celements-webapp/docker/Dockerfile.dockerignore @@ -0,0 +1,11 @@ +.env +.git +.gitignore +.settings +.vscode +compose.local.yml +compose.build.yml +docker/sqlserver +docker/Dockerfile.local +node_modules +target diff --git a/celements-webapp/docker/Dockerfile-local b/celements-webapp/docker/Dockerfile.local similarity index 93% rename from celements-webapp/docker/Dockerfile-local rename to celements-webapp/docker/Dockerfile.local index ee95ad1d7..c7c21c50f 100644 --- a/celements-webapp/docker/Dockerfile-local +++ b/celements-webapp/docker/Dockerfile.local @@ -17,8 +17,8 @@ ENV CATALINA_XMX="2g" ENV JPDA_ADDRESS="8000" ENV JPDA_TRANSPORT="dt_socket" -# copy configurations / scripts -COPY docker/tomcat ${CONF_DIR} +# copy configurations +COPY docker/tomcat/conf ${CONF_DIR} # installs and setup RUN mkdir -p \ diff --git a/celements-webapp/docker/Dockerfile.local.dockerignore b/celements-webapp/docker/Dockerfile.local.dockerignore new file mode 120000 index 000000000..8889da566 --- /dev/null +++ b/celements-webapp/docker/Dockerfile.local.dockerignore @@ -0,0 +1 @@ +Dockerfile.dockerignore \ No newline at end of file diff --git a/celements-webapp/docker/tomcat/jakarta.converter.xml b/celements-webapp/docker/tomcat/conf/jakarta.converter.xml similarity index 100% rename from celements-webapp/docker/tomcat/jakarta.converter.xml rename to celements-webapp/docker/tomcat/conf/jakarta.converter.xml diff --git a/celements-webapp/docker/tomcat/log4j2.properties b/celements-webapp/docker/tomcat/conf/log4j2.local.properties similarity index 100% rename from celements-webapp/docker/tomcat/log4j2.properties rename to celements-webapp/docker/tomcat/conf/log4j2.local.properties diff --git a/celements-webapp/docker/tomcat/conf/server.template.xml b/celements-webapp/docker/tomcat/conf/server.template.xml new file mode 100644 index 000000000..6c6c0e231 --- /dev/null +++ b/celements-webapp/docker/tomcat/conf/server.template.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/celements-webapp/docker/tomcat/conf/setenv.sh b/celements-webapp/docker/tomcat/conf/setenv.sh new file mode 100644 index 000000000..931f7f554 --- /dev/null +++ b/celements-webapp/docker/tomcat/conf/setenv.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# CATALINA_XMX=1200m +## TODO Cgroup-aware memory detection for container environments +if [ -z "$CATALINA_XMX" ]; then + total_memory_kb=$(grep -i 'memtotal' /proc/meminfo | grep -o '[[:digit:]]*') + xmx_kb=$((total_memory_kb * 80 / 100)) # use 80% of memory + xmx_kb_max=$((total_memory_kb - 716800)) # make sure at least 700m left + [ $xmx_kb -gt $xmx_kb_max ] && xmx_kb=$xmx_kb_max + CATALINA_XMX="$((xmx_kb / 1024))m" +fi + +CATALINA_OPTS="${CATALINA_OPTS}\ + -server\ + -Xms${CATALINA_XMS:-${CATALINA_XMX}}\ + -Xmx${CATALINA_XMX}\ + -Xss1m\ + -XX:+UseShenandoahGC\ + -XX:+UseStringDeduplication\ + -Djava.awt.headless=true\ + -Dorg.apache.activeio.journal.active.DisableLocking=true\ + -Dfile.encoding=UTF-8\ + -Djava.net.preferIPv4Stack=true\ + -Djava.net.preferIPv4Addresses\ +" + +if [ -n "$GC_LOG_VERBOSE" ]; then +CATALINA_OPTS="${CATALINA_OPTS}\ + -Xlog:gc*,safepoint:file=${CATALINA_HOME}/logs/gc.log:time,uptime,level,tags:filecount=5,filesize=10M\ + -Xlog:class+unload=trace\ + -Xlog:stringdedup*=debug\ +" +fi diff --git a/celements-webapp/docker/tomcat/entrypoint.sh b/celements-webapp/docker/tomcat/entrypoint.sh new file mode 100644 index 000000000..2329ae653 --- /dev/null +++ b/celements-webapp/docker/tomcat/entrypoint.sh @@ -0,0 +1,14 @@ +#!/bin/bash +set -euo pipefail + +: "${CATALINA_HOME:?CATALINA_HOME not set}" +: "${CONF_DIR:?CONF_DIR not set}" +: "${NODE_NAME:?NODE_NAME not set}" + +echo "**entrypoint** applying server.xml" +envsubst \ + < "${CONF_DIR}/server.template.xml" \ + > "${CATALINA_HOME}/conf/server.xml" + +echo "**entrypoint** executing: $*" +exec "$@" diff --git a/celements-webapp/docker/tomcat/setenv.sh b/celements-webapp/docker/tomcat/setenv.sh deleted file mode 100644 index cd7ed0e8f..000000000 --- a/celements-webapp/docker/tomcat/setenv.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -CATALINA_XMX="${CATALINA_XMX:-2g}" -CATALINA_OPTS="${CATALINA_OPTS}\ - -server\ - -Xms${CATALINA_XMS:-${CATALINA_XMX}}\ - -Xmx${CATALINA_XMX}\ - -Xss1m\ - -XX:+UseShenandoahGC\ - -XX:+UseStringDeduplication\ - -Djava.awt.headless=true\ - -Dorg.apache.activeio.journal.active.DisableLocking=true\ - -Dfile.encoding=UTF-8\ - -Djava.net.preferIPv4Stack=true\ - -Djava.net.preferIPv4Addresses\ -" diff --git a/celements-webapp/pom.xml b/celements-webapp/pom.xml index c29950b1a..a45cbc693 100644 --- a/celements-webapp/pom.xml +++ b/celements-webapp/pom.xml @@ -23,7 +23,9 @@ --> - + https://github.com/celements/celements-web com.celements @@ -56,7 +58,6 @@ ${selenium.browserURL.celementsweb-platform} http://localhost:${catalina.port}/ ${selenium.browserFirstRunURL.celementsweb-platform} - /usr/local/celements/lucene @@ -74,7 +75,6 @@ 10000 100000 10 - ${dotenv.CELEMENTS_DATA}/lucene diff --git a/celements-webapp/sample.env b/celements-webapp/sample.env index 6c717c77d..8fc18aaea 100644 --- a/celements-webapp/sample.env +++ b/celements-webapp/sample.env @@ -17,6 +17,7 @@ TZ=Europe/Zurich # tomcat CATALINA_XMX=2g +# GC_LOG_VERBOSE=1 # celements APP_NAME=celements diff --git a/celements-webapp/src/main/webapp/WEB-INF/xwiki.cfg b/celements-webapp/src/main/webapp/WEB-INF/xwiki.cfg index bb040341d..b07c501da 100644 --- a/celements-webapp/src/main/webapp/WEB-INF/xwiki.cfg +++ b/celements-webapp/src/main/webapp/WEB-INF/xwiki.cfg @@ -492,7 +492,7 @@ xwiki.plugins.additional= #-# Lucene search engine #-# Location where to place the lucene index files. The default is the "lucene" subdirectory in the container's "work" #-# diectory. Change it if you want to store indexes in another place. -xwiki.plugins.lucene.indexdir=${xwiki.plugins.lucene.indexdir} +xwiki.plugins.lucene.indexdir=/usr/local/celements/lucene #-# The text analyzer to use for indexing. xwiki.plugins.lucene.analyzer=com.celements.search.lucene.index.analysis.CelementsSimpleAnalyzer #-# The number of seconds to wait between reindexes. A smaller value ensures that new documents will be indexed faster, From 3d6e8814ef22313752737007610183801f34d9ba Mon Sep 17 00:00:00 2001 From: Marc Sladek Date: Thu, 25 Jun 2026 17:49:33 +0200 Subject: [PATCH 2/7] PR fixes --- celements-webapp/docker/tomcat/conf/setenv.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/celements-webapp/docker/tomcat/conf/setenv.sh b/celements-webapp/docker/tomcat/conf/setenv.sh index 931f7f554..655c20559 100644 --- a/celements-webapp/docker/tomcat/conf/setenv.sh +++ b/celements-webapp/docker/tomcat/conf/setenv.sh @@ -7,6 +7,8 @@ if [ -z "$CATALINA_XMX" ]; then xmx_kb=$((total_memory_kb * 80 / 100)) # use 80% of memory xmx_kb_max=$((total_memory_kb - 716800)) # make sure at least 700m left [ $xmx_kb -gt $xmx_kb_max ] && xmx_kb=$xmx_kb_max + xmx_kb_min=$((1024 * 1024)) # minimum 1GB heap + [ $xmx_kb -lt $xmx_kb_min ] && echo "ERROR: at least 1GB heap required" >&2 && exit 1 CATALINA_XMX="$((xmx_kb / 1024))m" fi @@ -21,7 +23,6 @@ CATALINA_OPTS="${CATALINA_OPTS}\ -Dorg.apache.activeio.journal.active.DisableLocking=true\ -Dfile.encoding=UTF-8\ -Djava.net.preferIPv4Stack=true\ - -Djava.net.preferIPv4Addresses\ " if [ -n "$GC_LOG_VERBOSE" ]; then From cfc85bb3768cce4dd1395e4e9d54c29a9d8a3ca5 Mon Sep 17 00:00:00 2001 From: Marc Sladek Date: Thu, 25 Jun 2026 18:44:53 +0200 Subject: [PATCH 3/7] standardise docker config names --- celements-webapp/compose.local.yml | 8 ++++---- celements-webapp/docker/Dockerfile | 4 ++-- celements-webapp/docker/Dockerfile.local | 4 ++-- .../docker/sqlserver/{celements.cnf => mysql.cnf} | 0 celements-webapp/sample.env | 5 ++++- 5 files changed, 12 insertions(+), 9 deletions(-) rename celements-webapp/docker/sqlserver/{celements.cnf => mysql.cnf} (100%) diff --git a/celements-webapp/compose.local.yml b/celements-webapp/compose.local.yml index 7c6c4d9bc..bf8494e8b 100644 --- a/celements-webapp/compose.local.yml +++ b/celements-webapp/compose.local.yml @@ -8,8 +8,8 @@ services: context: . dockerfile: docker/Dockerfile.local ports: - - "2080:8080" # tomcat - - "2000:8000" # remote debugging + - "${TOMCAT_PORT:-2080}:8080" # tomcat + - "${JPDA_PORT:-2000}:8000" # remote debugging env_file: .env volumes: - ./target/celements-web:/usr/local/tomcat/webapps/ROOT:ro @@ -26,13 +26,13 @@ services: container_name: celements-db image: mariadb:10.1 ports: - - "2306:3306" # for direct client access + - "${DB_HOST_PORT:-2306}:3306" # for direct client access env_file: .env environment: - "MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD:?}" volumes: - db-data:/var/lib/mysql - - ./docker/sqlserver/celements.cnf:/etc/mysql/conf.d/celements.cnf:ro + - ./docker/sqlserver/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro - ./docker/sqlserver/init:/docker-entrypoint-initdb.d:ro restart: unless-stopped networks: diff --git a/celements-webapp/docker/Dockerfile b/celements-webapp/docker/Dockerfile index 839dde517..13ba1a589 100644 --- a/celements-webapp/docker/Dockerfile +++ b/celements-webapp/docker/Dockerfile @@ -25,7 +25,7 @@ LABEL org.opencontainers.image.source="https://github.com/celements/celements-we org.opencontainers.image.version="${VERSION}" \ org.opencontainers.image.revision="${REVISION}" -ENV CELEMENTS_DATA=/usr/local/celements \ +ENV APP_DATA=/usr/local/celements \ CONF_DIR=/usr/local/conf COPY docker/tomcat/entrypoint.sh /usr/local/bin/start @@ -36,7 +36,7 @@ RUN apt-get update \ gettext-base \ && rm -rf /var/lib/apt/lists/* "${CATALINA_HOME}/webapps/"* \ && mkdir -p \ - "${CELEMENTS_DATA}" \ + "${APP_DATA}" \ "${CATALINA_HOME}/temp" \ "${CATALINA_HOME}/conf/Catalina/localhost" \ && cp "${CONF_DIR}/setenv.sh" "${CATALINA_HOME}/bin/" \ diff --git a/celements-webapp/docker/Dockerfile.local b/celements-webapp/docker/Dockerfile.local index c7c21c50f..ffa6d1f2a 100644 --- a/celements-webapp/docker/Dockerfile.local +++ b/celements-webapp/docker/Dockerfile.local @@ -9,7 +9,7 @@ FROM tomcat:10-jdk21-temurin # environment variables, may be overridden from the .env file # celements -ENV CELEMENTS_DATA=/usr/local/celements +ENV APP_DATA=/usr/local/celements ENV CONF_DIR=/usr/local/conf # tomcat ENV CATALINA_XMX="2g" @@ -22,7 +22,7 @@ COPY docker/tomcat/conf ${CONF_DIR} # installs and setup RUN mkdir -p \ - ${CELEMENTS_DATA} \ + ${APP_DATA} \ ${CATALINA_HOME}/temp \ ${CATALINA_HOME}/conf/Catalina/localhost \ && cp ${CONF_DIR}/setenv.sh ${CATALINA_HOME}/bin/ \ diff --git a/celements-webapp/docker/sqlserver/celements.cnf b/celements-webapp/docker/sqlserver/mysql.cnf similarity index 100% rename from celements-webapp/docker/sqlserver/celements.cnf rename to celements-webapp/docker/sqlserver/mysql.cnf diff --git a/celements-webapp/sample.env b/celements-webapp/sample.env index 8fc18aaea..c1463b688 100644 --- a/celements-webapp/sample.env +++ b/celements-webapp/sample.env @@ -1,5 +1,8 @@ # docker COMPOSE_FILE=compose.local.yml +TOMCAT_PORT=2080 +JPDA_PORT=2000 +DB_HOST_PORT=2306 # database DB_DRIVER=com.mysql.jdbc.Driver @@ -23,4 +26,4 @@ CATALINA_XMX=2g APP_NAME=celements CLUSTER_NAME=local NODE_NAME=local1 -CELEMENTS_DATA=/usr/local/celements +APP_DATA=/usr/local/celements From dfc953d43983dc735bc8d85dd4177c69a42317f2 Mon Sep 17 00:00:00 2001 From: Marc Sladek Date: Fri, 26 Jun 2026 01:12:54 +0200 Subject: [PATCH 4/7] deploy exploded war --- celements-webapp/README.md | 2 +- celements-webapp/docker/Dockerfile | 4 ++-- celements-webapp/docker/tomcat/conf/server.template.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/celements-webapp/README.md b/celements-webapp/README.md index e9454c625..56a140621 100644 --- a/celements-webapp/README.md +++ b/celements-webapp/README.md @@ -41,7 +41,7 @@ docker compose -f compose.build.yml build ``` This builds the same image shape as Jenkins: Maven build stage, Tomcat runtime stage, and -`target/celements-web.war` copied into `webapps/ROOT.war`. +the exploded `target/celements-web/` webapp copied into `webapps/ROOT/`. ## Image builds diff --git a/celements-webapp/docker/Dockerfile b/celements-webapp/docker/Dockerfile index 13ba1a589..1e479d689 100644 --- a/celements-webapp/docker/Dockerfile +++ b/celements-webapp/docker/Dockerfile @@ -13,7 +13,7 @@ RUN --mount=type=secret,id=mvnsettings,required=true,dst=/root/.m2/settings.xml # Layer: package COPY . . -RUN mvn -B clean package +RUN mvn -B clean prepare-package war:exploded FROM tomcat:10-jdk21-temurin AS execute @@ -43,7 +43,7 @@ RUN apt-get update \ && cp "${CONF_DIR}/jakarta.converter.xml" "${CATALINA_HOME}/conf/Catalina/localhost/ROOT.xml" \ && chmod +x /usr/local/bin/start -COPY --from=build /app/target/celements-web.war "${CATALINA_HOME}/webapps/ROOT.war" +COPY --from=build /app/target/celements-web/ "${CATALINA_HOME}/webapps/ROOT/" EXPOSE 8080 9090 diff --git a/celements-webapp/docker/tomcat/conf/server.template.xml b/celements-webapp/docker/tomcat/conf/server.template.xml index 6c6c0e231..75e4a37ee 100644 --- a/celements-webapp/docker/tomcat/conf/server.template.xml +++ b/celements-webapp/docker/tomcat/conf/server.template.xml @@ -40,7 +40,7 @@ + unpackWARs="false" autoDeploy="true"> From d235d94bebb17efd01d2cfae3ea0a0501c3e78e2 Mon Sep 17 00:00:00 2001 From: Marc Sladek Date: Fri, 26 Jun 2026 17:52:36 +0200 Subject: [PATCH 5/7] mvnrepo cache mount --- celements-webapp/docker/Dockerfile | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/celements-webapp/docker/Dockerfile b/celements-webapp/docker/Dockerfile index 1e479d689..c7993f6be 100644 --- a/celements-webapp/docker/Dockerfile +++ b/celements-webapp/docker/Dockerfile @@ -1,19 +1,19 @@ +# syntax=docker/dockerfile:1 + FROM maven:3-eclipse-temurin-21 AS build WORKDIR /app -# Layer: dependencies ARG MVN_CACHE_KEY=none -COPY pom.xml ./ -RUN --mount=type=secret,id=mvnsettings,required=true,dst=/root/.m2/settings.xml \ - echo "MVN_CACHE_KEY: ${MVN_CACHE_KEY}" && \ - mvn -B -U dependency:go-offline && \ - find /root/.m2/repository -name "*.lastUpdated" -delete && \ - find /root/.m2/repository -name "_remote.repositories" -delete -# Layer: package COPY . . -RUN mvn -B clean prepare-package war:exploded +RUN --mount=type=secret,id=mvnsettings,required=true,target=/root/.m2/settings.xml \ + --mount=type=cache,id=mvnrepo,target=/root/.m2/repository,sharing=locked \ + echo "MVN_CACHE_KEY: ${MVN_CACHE_KEY}" && \ + mvn -B -U \ + -s /root/.m2/settings.xml \ + -Dmaven.repo.local=/root/.m2/repository \ + clean prepare-package war:exploded FROM tomcat:10-jdk21-temurin AS execute From dbf4acd46ea81afd5852a8bf546c48b7de640f0a Mon Sep 17 00:00:00 2001 From: Marc Sladek Date: Fri, 26 Jun 2026 22:20:39 +0200 Subject: [PATCH 6/7] .env.local --- .gitignore | 6 +----- celements-webapp/.env | 1 + celements-webapp/{sample.env => .env.sample} | 0 celements-webapp/README.md | 2 +- celements-webapp/docker/Dockerfile.dockerignore | 1 + 5 files changed, 4 insertions(+), 6 deletions(-) create mode 120000 celements-webapp/.env rename celements-webapp/{sample.env => .env.sample} (100%) diff --git a/.gitignore b/.gitignore index 9aa823673..7ac9dead1 100644 --- a/.gitignore +++ b/.gitignore @@ -239,11 +239,7 @@ web_modules/ .yarn-integrity # dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local +*.local # parcel-bundler cache (https://parceljs.org/) .cache diff --git a/celements-webapp/.env b/celements-webapp/.env new file mode 120000 index 000000000..3a8fe5ede --- /dev/null +++ b/celements-webapp/.env @@ -0,0 +1 @@ +.env.local \ No newline at end of file diff --git a/celements-webapp/sample.env b/celements-webapp/.env.sample similarity index 100% rename from celements-webapp/sample.env rename to celements-webapp/.env.sample diff --git a/celements-webapp/README.md b/celements-webapp/README.md index 56a140621..10fa791df 100644 --- a/celements-webapp/README.md +++ b/celements-webapp/README.md @@ -7,7 +7,7 @@ Create the local runtime configuration: ```sh -cp sample.env .env && vim .env +cp .env.sample .env.local && vim .env.local ``` Build the exploded WAR for the local mounted-webapp setup: diff --git a/celements-webapp/docker/Dockerfile.dockerignore b/celements-webapp/docker/Dockerfile.dockerignore index 882eb7f19..e5c091581 100644 --- a/celements-webapp/docker/Dockerfile.dockerignore +++ b/celements-webapp/docker/Dockerfile.dockerignore @@ -1,4 +1,5 @@ .env +*.local .git .gitignore .settings From 2f5ec2e09cdff80b112ff1f61f0c6d89ddf1cebf Mon Sep 17 00:00:00 2001 From: Marc Sladek Date: Sat, 27 Jun 2026 04:55:40 +0200 Subject: [PATCH 7/7] harmonise config --- celements-webapp/pom.xml | 2 -- celements-webapp/src/main/webapp/WEB-INF/xwiki.properties | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/celements-webapp/pom.xml b/celements-webapp/pom.xml index a45cbc693..c92a85810 100644 --- a/celements-webapp/pom.xml +++ b/celements-webapp/pom.xml @@ -72,8 +72,6 @@ ${dotenv.DB_DRIVER} ${dotenv.DB_MAIN} ${dotenv.DB_PREFIX}_ - 10000 - 100000 10 diff --git a/celements-webapp/src/main/webapp/WEB-INF/xwiki.properties b/celements-webapp/src/main/webapp/WEB-INF/xwiki.properties index a08f9fea5..6a513f1b3 100644 --- a/celements-webapp/src/main/webapp/WEB-INF/xwiki.properties +++ b/celements-webapp/src/main/webapp/WEB-INF/xwiki.properties @@ -210,8 +210,8 @@ core.defaultDocumentSyntax = xwiki/1.0 #-# Securitiy Fix !!! velocity.properties = eventhandler.include.class = com.celements.web.XWikiIncludeEventHandler #-# fix max depth for macro recursions. Celements needs more than the default 10 -velocity.properties = velocimacro.depth.max = 15 -velocity.properties = directive.parse.max.depth = 15 +velocity.properties = velocimacro.depth.max = 100 +velocity.properties = directive.parse.max.depth = 100 #------------------------------------------------------------------------------------- # Kafka Configuration