Clone
5
Reference BUILD
Patrick Gniza edited this page 2026-08-17 10:48:39 +02:00

Deutsch | English

Romexis Docker Build Process

Back to README | Deutsch

This document describes the build process for the Romexis Docker image families.


Build Goals

The build system is designed to provide:

  • reproducible Docker builds
  • reusable image layers
  • local developer builds through scripts
  • native amd64 and arm64 images
  • multi-architecture manifests
  • minimal final runtime images
  • maintainable installer extraction logic
  • clear separation between payload extraction, shared runtime dependencies and service-specific runtime images

Image Families

Romexis Payload Image

Built from:

romexis-payload/Dockerfile

Contains the extracted installer payload:

/opt/romexis
/opt/romexis-mssql-db

The payload image is architecture-independent and does not contain Java, Chilkat or runtime services.

Tag:

gitea.buchhorster.de/planmeca/romexis-payload:<version>

Romexis Base Image

Built from:

romexis-base/Dockerfile

Contains shared server runtime dependencies such as Java, JavaFX/OpenJFX support, SQL tooling, Firebird client libraries and common OS libraries.

Tags:

gitea.buchhorster.de/planmeca/romexis-base-jre:11-amd64
gitea.buchhorster.de/planmeca/romexis-base-jre:11-arm64
gitea.buchhorster.de/planmeca/romexis-base-jre:11

Romexis Server Image

Built from:

romexis/Dockerfile

Consumes:

romexis-payload:<version>
romexis-base-jre:11-<arch>

Adds:

  • native Chilkat runtime
  • Romexis Java PropertyAgent
  • server entrypoint
  • database initialization scripts
  • KeyVault and path preparation logic

Tags:

gitea.buchhorster.de/planmeca/romexis-server:<version>-amd64
gitea.buchhorster.de/planmeca/romexis-server:<version>-arm64
gitea.buchhorster.de/planmeca/romexis-server:<version>

Romexis Migration Service Image

Built from the migration service directory.

Provides the web/API service for migration and restore workflows.

Tags:

gitea.buchhorster.de/planmeca/romexis-migration-service:amd64
gitea.buchhorster.de/planmeca/romexis-migration-service:arm64
gitea.buchhorster.de/planmeca/romexis-migration-service:latest

Romexis Admin Image

Built from:

romexis-admin/Dockerfile

Consumes the Romexis payload and provides a browser-accessible Romexis Admin / RomexisConfig environment.

The image includes:

  • Romexis Admin files from the payload image
  • Xvfb
  • Openbox
  • xcompmgr
  • x11vnc
  • noVNC/websockify
  • JavaFX runtime support
  • DxService Linux compatibility shim
  • optional debug xterm
  • localized VNC startup splash screen

Tags:

gitea.buchhorster.de/planmeca/romexis-admin:<version>-amd64
gitea.buchhorster.de/planmeca/romexis-admin:<version>-arm64
gitea.buchhorster.de/planmeca/romexis-admin:<version>
gitea.buchhorster.de/planmeca/romexis-admin:latest

mRomexis Web App Image

Built from:

romexis-mromexis-app/Dockerfile

Consumes the Romexis payload and copies:

/opt/romexis/broker/mromexis-html.war

into a Tomcat runtime as:

/usr/local/tomcat/webapps/ROOT.war

Important:

mromexis-html.war exists only in Romexis 6.5.3 and newer.

Builds for older Romexis versions are intentionally skipped.

Tags:

gitea.buchhorster.de/planmeca/romexis-mromexis-app:<version>-amd64
gitea.buchhorster.de/planmeca/romexis-mromexis-app:<version>-arm64
gitea.buchhorster.de/planmeca/romexis-mromexis-app:<version>
gitea.buchhorster.de/planmeca/romexis-mromexis-app:latest

Version Resolution

Supported Romexis versions are defined in:

romexis-payload/romexis-versions.env

Format:

6_5_3_444_203=https://content.planmeca.com/files/Planmeca_Romexis_6.5.3.444.203_Win.zip

Build input:

ROMEXIS_VERSION=6.5.3.444.203

The CI pipeline iterates over this file and builds the required image families for the available versions.


Local Builds

docker-compose.build.yml is no longer used.

Local builds are handled by:

scripts/build-local.sh
scripts/build-local.ps1

Linux/macOS

chmod +x scripts/build-local.sh
./scripts/build-local.sh all

Windows PowerShell

.\scripts\build-local.ps1 -Targets all

Build selected image families

./scripts/build-local.sh base server
./scripts/build-local.sh admin mromexis
./scripts/build-local.sh migration

Typical .env values for local builds:

REGISTRY=gitea.buchhorster.de/planmeca
ROMEXIS_VERSION=6.5.3.444.203
IMAGE_SUFFIX=
TARGETARCH=amd64

ROMEXIS_IMAGE=romexis-server
MIGRATION_IMAGE=romexis-migration-service
ADMINISTRATION_IMAGE=romexis-admin
MROMEXIS_WEBAPP_IMAGE=romexis-mromexis-app

For a feature branch:

IMAGE_SUFFIX=-feature-romexis-admin

Manual Docker Build Examples

Manual builds are useful for debugging a single image family.

Payload

docker buildx build \
  --platform linux/amd64 \
  --provenance=false \
  --sbom=false \
  --build-arg ROMEXIS_VERSION=6.5.3.444.203 \
  -t gitea.buchhorster.de/planmeca/romexis-payload:6.5.3.444.203 \
  --load \
  ./romexis-payload

Base Image

docker buildx build \
  --platform linux/amd64 \
  --provenance=false \
  --sbom=false \
  --build-arg TARGETARCH=amd64 \
  --build-arg IMAGE_VERSION=11-amd64 \
  -t gitea.buchhorster.de/planmeca/romexis-base-jre:11-amd64 \
  --load \
  ./romexis-base

Server Image

docker buildx build \
  --platform linux/amd64 \
  --provenance=false \
  --sbom=false \
  --build-arg TARGETARCH=amd64 \
  --build-arg ROMEXIS_VERSION=6.5.3.444.203 \
  --build-arg ROMEXIS_BASE_IMAGE=gitea.buchhorster.de/planmeca/romexis-base-jre:11-amd64 \
  --build-arg ROMEXIS_PAYLOAD_IMAGE=gitea.buchhorster.de/planmeca/romexis-payload:6.5.3.444.203 \
  -t gitea.buchhorster.de/planmeca/romexis-server:6.5.3.444.203-amd64 \
  --load \
  ./romexis

Admin Image

docker buildx build \
  --platform linux/amd64 \
  --provenance=false \
  --sbom=false \
  --build-arg TARGETARCH=amd64 \
  --build-arg ROMEXIS_VERSION=6.5.3.444.203 \
  --build-arg ROMEXIS_PAYLOAD_IMAGE=gitea.buchhorster.de/planmeca/romexis-payload:6.5.3.444.203 \
  -t gitea.buchhorster.de/planmeca/romexis-admin:6.5.3.444.203-amd64 \
  --load \
  ./romexis-admin

mRomexis Web App

docker buildx build \
  --platform linux/amd64 \
  --provenance=false \
  --sbom=false \
  --build-arg TARGETARCH=amd64 \
  --build-arg ROMEXIS_VERSION=6.5.3.444.203 \
  --build-arg ROMEXIS_PAYLOAD_IMAGE=gitea.buchhorster.de/planmeca/romexis-payload:6.5.3.444.203 \
  -t gitea.buchhorster.de/planmeca/romexis-mromexis-app:6.5.3.444.203-amd64 \
  --load \
  ./romexis-mromexis-app

Drone CI/CD Flow

The Drone pipeline builds and publishes the image families in stages.

High-level flow:

payload
-> base amd64
-> server amd64
-> migration amd64
-> admin amd64
-> mRomexis amd64
-> base arm64
-> server arm64
-> migration arm64
-> admin arm64
-> mRomexis arm64
-> manifests

The exact order may be split across separate architecture pipelines.

Payload rebuild rules

  • new version in romexis-versions.env: build only the new payload image
  • changed URL for an existing version: rebuild that version
  • changed romexis-copy-map.tsv, payload Dockerfile or helper scripts: rebuild all payload versions
  • existing payload with no relevant change: skip

mRomexis version rule

mRomexis Web App images are built only for Romexis versions where:

version >= 6.5.3

Older versions are skipped because the payload does not contain mromexis-html.war.

Manifest publishing

Architecture-specific tags are created first:

<image>:<version>-amd64
<image>:<version>-arm64

Then Drone creates the multi-architecture manifest:

<image>:<version>

For selected services, a latest alias is also created from the default Romexis version configured in .env.sample.

Buildx uses:

--provenance=false
--sbom=false

This improves compatibility with registries that do not handle OCI attestations reliably.


Runtime Compose and Build Relationship

The runtime Compose files use manifest tags instead of architecture-specific tags.

For main, IMAGE_SUFFIX is empty:

IMAGE_SUFFIX=

For feature branches, use a branch suffix:

IMAGE_SUFFIX=-feature-romexis-admin

Runtime Compose image references then resolve to the corresponding branch-specific manifests.


Maintenance Notes

Add a new Romexis version

  1. Add the installer URL to romexis-payload/romexis-versions.env.
  2. Ensure the copy map still matches the installer layout.
  3. Build or let CI build the payload image.
  4. Build server/admin/mRomexis images as applicable.
  5. Start the stack and verify server, Admin and Web App behavior.

Installer layout changes

  1. Update romexis-payload/romexis-copy-map.tsv.
  2. Rebuild the payload image.
  3. Verify required files under /opt/romexis.
  4. Rebuild dependent runtime images.

Admin image changes

Check:

  • JavaFX native libraries
  • /usr/lib/jni symlinks
  • Openbox startup
  • xcompmgr startup
  • noVNC access
  • VNC lifecycle behavior
  • Admin language startup parameter

mRomexis Web App changes

Check:

  • mromexis-html.war exists in the payload
  • Tomcat deploys ROOT.war
  • proxy endpoint is not open to arbitrary hosts
  • version filtering still skips unsupported Romexis versions

Build Artifacts

The final server image contains:

/opt/romexis
/opt/romexis-mssql-db
/usr/lib/libchilkat.so
/opt/romexis/server/RomexisPropertyAgent.jar
/opt/init-romexis-db.sh
/opt/fix-keystore-alias.sh
/entrypoint.sh

The final Admin image contains:

/opt/romexis/admin
/opt/romexis/admin/RomexisPropertyAgent.jar
/opt/romexis/admin/libDxService.so
/opt/romexis/admin/libDxService_64.so
/opt/romexis/admin/RxClientClinic.jar
/usr/local/bin/start.sh

The final mRomexis Web App image contains:

/usr/local/tomcat/webapps/ROOT.war