Skip to content

Commit b46dd33

Browse files
Updated documentation for Convertigo 8.4.4
1 parent 574c89b commit b46dd33

1 file changed

Lines changed: 189 additions & 44 deletions

File tree

convertigo/content.md

Lines changed: 189 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -26,66 +26,193 @@ You can access the Server admin console on `http://[dockerhost]:28080/convertigo
2626

2727
The Server can also be accessed by HTTPS on `https://[dockerhost]:28443/convertigo` if SSL is configured (see the **HTTPS** section below).
2828

29-
## Link Convertigo to a CouchDB database for FullSync (Convertigo EE only)
29+
## Connect Convertigo to a CouchDB database for FullSync (Convertigo EE only)
3030

31-
Convertigo FullSync module uses Apache CouchDB 3.2.2 as NoSQL repository. You can use the **[couchdb](https://hub.docker.com/_/couchdb/)** docker image and link to it convertigo this way
31+
Convertigo FullSync uses Apache CouchDB 3.2.2 as its NoSQL repository.
3232

33-
Launch CouchDB container and name it 'fullsync'
33+
For modern Docker setups, prefer one of these approaches:
34+
35+
- another container on the same Docker network
36+
- a service running directly on the Docker host
37+
38+
### CouchDB running on the Docker host
39+
40+
With Docker Desktop, `host.docker.internal` is available by default:
3441

3542
```console
36-
$ docker run -d --name fullsync couchdb:3.2.2
43+
docker run -d --name C8O \
44+
-e JAVA_OPTS="-Dconvertigo.engine.fullsync.couch.url=http://host.docker.internal:5984" \
45+
-p 28080:28080 %%IMAGE%%
3746
```
3847

39-
Then launch Convertigo and link it to the running 'fullsync' container. Convertigo Low Code sever will automatically use it as its fullsync repository.
48+
On Docker Engine for Linux, add:
49+
50+
```console
51+
--add-host host.docker.internal:host-gateway
52+
```
53+
54+
Example:
55+
56+
```console
57+
docker run -d --name C8O \
58+
--add-host host.docker.internal:host-gateway \
59+
-e JAVA_OPTS="-Dconvertigo.engine.fullsync.couch.url=http://host.docker.internal:5984" \
60+
-p 28080:28080 %%IMAGE%%
61+
```
62+
63+
### CouchDB running in another container
64+
65+
Create a user-defined Docker network and run both containers on it:
66+
67+
```console
68+
docker network create c8o-net
69+
```
70+
71+
```console
72+
docker run -d --name fullsync --network c8o-net couchdb:3.2.2
73+
```
4074

4175
```console
42-
$ docker run -d --name C8O --link fullsync:couchdb -p 28080:28080 %%IMAGE%%
76+
docker run -d --name C8O --network c8o-net \
77+
-e JAVA_OPTS="-Dconvertigo.engine.fullsync.couch.url=http://fullsync:5984" \
78+
-p 28080:28080 %%IMAGE%%
4379
```
4480

81+
The legacy `--link` option may still work, but it is no longer the recommended Docker approach.
82+
83+
For compatibility with existing deployments, the image also detects a resolvable host named `couchdb` at startup and configures it as `http://couchdb:5984`. Prefer an explicit `JAVA_OPTS` setting and a user-defined network for new deployments.
84+
4585
## Use embedded PouchDB as FullSync engine (not for production)
4686

4787
Convertigo FullSync is designed to use CouchDB server or cluster. Convertigo FullSync is also compatible with PouchDB but only for little projects or tests. Internet access is required to enable this feature.
4888

4989
It can be enabled directly at startup:
5090

5191
```console
52-
$ docker run -d --name C8O -e JAVA_OPTS="-Dconvertigo.engine.fullsync.pouchdb=true" -p 28080:28080 %%IMAGE%%
92+
docker run -d --name C8O -e JAVA_OPTS="-Dconvertigo.engine.fullsync.pouchdb=true" -p 28080:28080 %%IMAGE%%
5393
```
5494

55-
## Link Convertigo Low Code Server to a Billing & Analytics database
95+
## Connect Convertigo Low Code Server to a Billing & Analytics database
5696

5797
### MySQL
5898

59-
MySQL is the recommended database for holding Convertigo Low Code server analytics. You can use this command to run convertigo and link it to a running MySQL container. Change `[mysql-container]` to the container name, and `[username for the c8oAnalytics db]`, `[password for specified db user]` with the values for your MySQL configuration.
99+
MySQL is the recommended database for holding Convertigo analytics data.
100+
101+
If the database runs on the Docker host, use `host.docker.internal`:
60102

61103
```console
62-
$ docker run -d --name C8O --link [mysql-container]:mysql -p 28080:28080 \
63-
-e JAVA_OPTS="-Dconvertigo.engine.billing.enabled=true \
64-
-Dconvertigo.engine.billing.persistence.jdbc.username=[username for the c8oAnalytics db] \
65-
-Dconvertigo.engine.billing.persistence.jdbc.password=[password for specified db user] \
66-
-Dconvertigo.engine.billing.persistence.jdbc.url=jdbc:mysql://mysql:3306/c8oAnalytics" \
67-
%%IMAGE%%
104+
docker run -d --name C8O \
105+
--add-host host.docker.internal:host-gateway \
106+
-e JAVA_OPTS="-Dconvertigo.engine.billing.enabled=true \
107+
-Dconvertigo.engine.billing.persistence.jdbc.username=[username for the c8oAnalytics db] \
108+
-Dconvertigo.engine.billing.persistence.jdbc.password=[password for specified db user] \
109+
-Dconvertigo.engine.billing.persistence.jdbc.url=jdbc:mysql://host.docker.internal:3306/c8oAnalytics" \
110+
-p 28080:28080 %%IMAGE%%
68111
```
69112

113+
If the database runs in another container, connect both containers to the same user-defined Docker network and use the container name in the JDBC URL.
114+
70115
## Where is Convertigo Low Code server storing deployed projects
71116

72117
Projects are deployed in the Convertigo workspace, a simple file system directory. You can map the docker container **/workspace** to your physical system by using:
73118

74119
```console
75-
$ docker run --name C8O -v $(pwd):/workspace -d -p 28080:28080 %%IMAGE%%
120+
docker run --name C8O -v $(pwd):/workspace -d -p 28080:28080 %%IMAGE%%
76121
```
77122

78123
You can share the same workspace by all Convertigo containers. In this case, when you deploy a project on a Convertigo container, it will be seen by others. This is the best way to build multi-instance load balanced Convertigo server farms.
79124

80125
**Be sure to have a really fast file sharing between instances !!! We have experienced that Azure File Share is not fast enough**
81126

82-
To avoid log and cache mixing, you have to add 2 variables for instance specific paths:
127+
Shared-workspace deployments can also propagate a subset of administration changes at runtime without restarting every instance. This synchronization is disabled by default and must only be enabled when all instances really share the same Convertigo workspace (for example via NFS or another RWX volume).
128+
129+
Enable it with:
130+
131+
```console
132+
-Dconvertigo.engine.session.shared_workspace.sync.enabled=true
133+
```
134+
135+
Current runtime synchronization scope:
136+
137+
- project deploy / import URL / delete
138+
- global symbols
139+
- `engine.properties` runtime replay, including logger levels
140+
- users / roles definitions (`user_roles.db`) for future logins
141+
- cache configure / cache clear
142+
143+
This shared-workspace sync does **not** cover separate workspaces per pod, Redis-specific notifications, certificates, scheduler, or broader clustered admin forwarding.
144+
145+
The shared workspace is intended for projects, configuration, and runtime sync markers. Logs and file cache must not be shared between instances.
146+
147+
For plain Docker multi-instance setups sharing the same `/workspace` mount, use instance-specific paths:
83148

84149
```console
85150
-Dconvertigo.engine.cache_manager.filecache.directory=/workspace/cache/[instance name]
86-
-Dconvertigo.engine.log4j.appender.CemsAppender.File=/workspace/logs/[instance name]/engine.log
151+
-Dlog.directory=/workspace/logs/[instance name]
87152
```
88153

154+
For Kubernetes and Helm deployments, prefer pod-local paths such as `/tmp/convertigo-cache` and `/tmp/convertigo-logs` instead of shared-workspace subdirectories.
155+
156+
Recommended multi-instance example:
157+
158+
```console
159+
docker run --name C8O1 -v /my-shared-workspace:/workspace -d -p 28081:28080 \
160+
-e JAVA_OPTS="-Dconvertigo.engine.session.shared_workspace.sync.enabled=true \
161+
-Dconvertigo.engine.cache_manager.filecache.directory=/workspace/cache/server1 \
162+
-Dlog.directory=/workspace/logs/server1" \
163+
%%IMAGE%%
164+
```
165+
166+
```console
167+
docker run --name C8O2 -v /my-shared-workspace:/workspace -d -p 28082:28080 \
168+
-e JAVA_OPTS="-Dconvertigo.engine.session.shared_workspace.sync.enabled=true \
169+
-Dconvertigo.engine.cache_manager.filecache.directory=/workspace/cache/server2 \
170+
-Dlog.directory=/workspace/logs/server2" \
171+
%%IMAGE%%
172+
```
173+
174+
## Add custom Java libraries or classes
175+
176+
At each container start, the image copies the contents of these workspace directories into the Convertigo web application before Tomcat starts:
177+
178+
- `/workspace/lib/` to `WEB-INF/lib/` for JAR files and their dependencies
179+
- `/workspace/classes/` to `WEB-INF/classes/` for compiled classes and resources
180+
181+
The directory structure is preserved and overlays the files provided by the image; it does not remove existing web-application files. For classes, keep the package directory structure below `/workspace/classes/` (for example, `com/example/MyClass.class`). Restart or recreate the container after adding or updating these files. To remove an injected file, remove it from the workspace and recreate the container, since a restart does not delete files already copied into the web application.
182+
183+
For example, prepare a workspace and mount it into the container:
184+
185+
```console
186+
mkdir -p workspace/lib workspace/classes/com/example
187+
cp my-driver.jar workspace/lib/
188+
cp build/classes/java/main/com/example/MyClass.class workspace/classes/com/example/
189+
docker run --name C8O -v "$(pwd)/workspace:/workspace" -d -p 28080:28080 %%IMAGE%%
190+
```
191+
192+
This is also useful when iterating on a custom Java extension without building a derived Convertigo image. Ensure that the mounted workspace is writable by the container at startup.
193+
194+
## Trust custom certificate authorities
195+
196+
To trust private root or intermediate certificate authorities, mount a dedicated directory at `/cacerts`. At startup, the image copies the JDK default truststore to a temporary location, imports every regular file in this directory with `keytool`, then configures the JVM to use the generated truststore. Certificate files must be X.509 certificates in a format accepted by `keytool` (typically PEM or DER).
197+
198+
For example:
199+
200+
```console
201+
mkdir -p custom-ca
202+
cp company-root-ca.pem custom-ca/
203+
cp partner-intermediate-ca.crt custom-ca/
204+
docker run --name C8O \
205+
-v "$(pwd)/workspace:/workspace" \
206+
-v "$(pwd)/custom-ca:/cacerts:ro" \
207+
-d -p 28080:28080 convertigo
208+
```
209+
210+
Keep this directory outside the Convertigo workspace and mount it read-only. In Kubernetes, mount a ConfigMap or Secret read-only at `/cacerts`. The image only reads custom CAs from this dedicated mount; files in `/workspace` are not considered.
211+
212+
The standard JDK certificate authorities are retained. The generated truststore is not persisted: restart or recreate the container after adding, replacing, or removing a certificate. If a file cannot be imported, the image logs a warning and continues to start with the certificates successfully imported so far.
213+
214+
This configuration is independent from the Tomcat HTTPS server certificate configured through `/ssl`.
215+
89216
## Make image with pre-deployed projects
90217

91218
If you want to make a vertical image ready to start with your application inside, you have to have your built projects **.car** files next to your `Dockerfile`:
@@ -122,17 +249,31 @@ These accounts can be configured through the **administration console** and save
122249
You can change the default administration account :
123250

124251
```console
125-
$ docker run -d --name C8O -e CONVERTIGO_ADMIN_USER=administrator -e CONVERTIGO_ADMIN_PASSWORD=s3cret -p 28080:28080 %%IMAGE%%
252+
docker run -d --name C8O -e CONVERTIGO_ADMIN_USER=administrator -e CONVERTIGO_ADMIN_PASSWORD=s3cret -p 28080:28080 %%IMAGE%%
126253
```
127254

255+
These variables are startup conveniences. If `/workspace/configuration/engine.properties` already defines `admin.username` or `admin.password`, the matching environment variable is ignored to preserve the persisted configuration.
256+
128257
### `CONVERTIGO_ANONYMOUS_DASHBOARD` Environment variable
129258

130259
You can allow anonymous access to `/convertigo/dashboard/` by setting:
131260

132261
```console
133-
$ docker run -d --name C8O -e CONVERTIGO_ANONYMOUS_DASHBOARD=true -p 28080:28080 %%IMAGE%%
262+
docker run -d --name C8O -e CONVERTIGO_ANONYMOUS_DASHBOARD=true -p 28080:28080 %%IMAGE%%
263+
```
264+
265+
If `/workspace/configuration/engine.properties` already defines `anonymous.dashboard`, `CONVERTIGO_ANONYMOUS_DASHBOARD` is ignored.
266+
267+
### `PUBLIC_DOMAINS` Environment variable
268+
269+
For production CORS configuration, you can replace the default `cors.policy = =Origin` behavior with an explicit list of public origins:
270+
271+
```console
272+
docker run -d --name C8O -e PUBLIC_DOMAINS="https://app.example.com#https://admin.example.com" -p 28080:28080 %%IMAGE%%
134273
```
135274

275+
Values must match the full browser `Origin` header, including scheme and optional port. Multiple origins are separated with `#`. If `/workspace/configuration/engine.properties` already defines `cors.policy`, `PUBLIC_DOMAINS` is ignored. Use `JAVA_OPTS=-Dconvertigo.engine.cors.policy=...` only when you need an explicit JVM-level override.
276+
136277
## HTTPS / SSL Configuration
137278

138279
In many cases, the Convertigo instance is behind a reverse proxy that handles HTTPS / SSL configuration. But you can configure the container to manage existing SSL certificates or dynamically generate one.
@@ -148,13 +289,13 @@ If you have an existing certificate and a private key, you can put them in **PEM
148289
- `chain.pem` : the optional chain of certificates not included in `cert.pem` using the PEM format
149290

150291
```console
151-
$ docker run -d --name C8O -v <my SSL folder>:/ssl -p 28443:28443 %%IMAGE%%
292+
docker run -d --name C8O -v <my SSL folder>:/ssl -p 28443:28443 %%IMAGE%%
152293
```
153294

154295
If you want to expose both **HTTP** and **HTTPS** you can expose both **ports**:
155296

156297
```console
157-
$ docker run -d --name C8O -v <my SSL folder>:/ssl -p 28080:28080 -p 28443:28443 %%IMAGE%%
298+
docker run -d --name C8O -v <my SSL folder>:/ssl -p 28080:28080 -p 28443:28443 %%IMAGE%%
158299
```
159300

160301
### Provide existing certificate using environment variables
@@ -166,10 +307,10 @@ If you cannot mount a volume, you can probably add environment variables of prev
166307
- `SSL_CHAIN_B64` : the optional chain of certificates not included in `cert.pem` using the base64 PEM format
167308

168309
```console
169-
$ SSL_KEY_B64=$(base64 key.pem)
170-
$ SSL_CERT_B64=$(base64 cert.pem)
171-
$ SSL_CHAIN_B64=$(base64 chain.pem)
172-
$ docker run -d --name C8O -e SSL_KEY_B64="$SSL_KEY_B64" -e SSL_CERT_B64="$SSL_CERT_B64" -e SSL_CHAIN_B64="$SSL_CHAIN_B64" -p 28443:28443 %%IMAGE%%
310+
SSL_KEY_B64=$(base64 key.pem)
311+
SSL_CERT_B64=$(base64 cert.pem)
312+
SSL_CHAIN_B64=$(base64 chain.pem)
313+
docker run -d --name C8O -e SSL_KEY_B64="$SSL_KEY_B64" -e SSL_CERT_B64="$SSL_CERT_B64" -e SSL_CHAIN_B64="$SSL_CHAIN_B64" -p 28443:28443 %%IMAGE%%
173314
```
174315

175316
### Generate and use a self-signed certificate
@@ -179,23 +320,23 @@ If you don't have certificate file, you can dynamically generate one for the fir
179320
Use the `SSL_SELFSIGNED` environment variable to indicate for what domain you want generate certificate.
180321

181322
```console
182-
$ docker run -d --name C8O -e SSL_SELFSIGNED=mycomputer -p 28443:28443 %%IMAGE%%
323+
docker run -d --name C8O -e SSL_SELFSIGNED=mycomputer -p 28443:28443 %%IMAGE%%
183324
```
184325

185326
Generated files can be retrieved if the `/ssl` mount point is configured on folder without `cert.pem` nor `key.pem`.
186327

187328
```console
188-
$ docker run -d --name C8O -v <my empty SSL folder>:/ssl -e SSL_SELFSIGNED=mycomputer -p 28443:28443 %%IMAGE%%
329+
docker run -d --name C8O -v <my empty SSL folder>:/ssl -e SSL_SELFSIGNED=mycomputer -p 28443:28443 %%IMAGE%%
189330
```
190331

191332
## `JAVA_OPTS` Environment variable
192333

193-
Convertigo is based on a **Java** process with some defaults **JVM** options. You can override our defaults **JVM** options with you own.
334+
Convertigo is based on a **Java** process with default **JVM** options. You can add your own JVM options with this variable; the image keeps its required runtime options.
194335

195336
Add any **Java JVM** options such as -D[something] :
196337

197338
```console
198-
$ docker run -d --name C8O -e JAVA_OPTS="-DjvmRoute=server1" -p 28080:28080 %%IMAGE%%
339+
docker run -d --name C8O -e JAVA_OPTS="-DjvmRoute=server1" -p 28080:28080 %%IMAGE%%
199340
```
200341

201342
[Here the list of convertigo specific properties](https://www.convertigo.com/documentation/latest/operating-guide/appendixes/#list-of-convertigo-java-system-properties) (don't forget the `-Dconvertigo.engine.` prefix).
@@ -207,17 +348,19 @@ Convertigo generates many logs in a **engine.log** file that can be consulted vi
207348
Log file still exists until you add the `LOG_FILE=false` environment variable :
208349

209350
```console
210-
docker run -d --name C8O -e LOG_STDOUT=true -e LOG_FILE=false -p 28080:28080 convertigo
351+
docker run -d --name C8O -e LOG_STDOUT=true -e LOG_FILE=false -p 28080:28080 %%IMAGE%%
211352
```
212353

213354
## `JXMX` Environment variable
214355

215-
Convertigo tries to allocate this amount of memory in the container and will automatically reduce it until the value is compatible for the Docker memory constraints. Once the best value found, it is used as `-Xmx=${JXMX}m` parameter for the JVM.
356+
Set `JXMX` to define the JVM heap size in MiB. The image then adds `-Xms128m -Xmx=${JXMX}m` to the JVM options. Make sure the container memory limit leaves room for memory outside the Java heap.
216357

217-
The default `JXMX` value is `2048` and can be defined :
358+
When `JXMX` is not set, the image uses `-XX:MaxRAMPercentage=80` instead.
359+
360+
For example:
218361

219362
```console
220-
$ docker run -d --name C8O -e JXMX="4096" -p 28080:28080 %%IMAGE%%
363+
docker run -d --name C8O -e JXMX="4096" -p 28080:28080 %%IMAGE%%
221364
```
222365

223366
## `COOKIE_PATH` Environment variable
@@ -227,7 +370,7 @@ Convertigo generates a `JSESSIONID` to maintain the user session and stores in a
227370
The default `COOKIE_PATH` value is `/` and can be defined :
228371

229372
```console
230-
$ docker run -d --name C8O -e COOKIE_PATH="/convertigo" -p 28080:28080 %%IMAGE%%
373+
docker run -d --name C8O -e COOKIE_PATH="/convertigo" -p 28080:28080 %%IMAGE%%
231374
```
232375

233376
## `COOKIE_SECURE` Environment variable
@@ -239,7 +382,7 @@ The Secure flag can be enabled by setting the `COOKIE_SECURE` environment variab
239382
The default `COOKIE_SECURE` value is `false` and can be defined :
240383

241384
```console
242-
$ docker run -d --name C8O -e COOKIE_SECURE="true" -p 28080:28080 %%IMAGE%%
385+
docker run -d --name C8O -e COOKIE_SECURE="true" -p 28080:28080 %%IMAGE%%
243386
```
244387

245388
**Note :** if you have set the **SSL** configuration and you access the **HTTPS 28443** port, cookies are automatically `Secure`.
@@ -251,7 +394,7 @@ Allow to configure the **SameSite** parameter for generated cookies. Can be empt
251394
The default `COOKIE_SAMESITE` value is **empty** and can be defined this way:
252395

253396
```console
254-
$ docker run -d --name C8O -e COOKIE_SAMESITE=lax -p 28080:28080 %%IMAGE%%
397+
docker run -d name C8O -e COOKIE_SAMESITE=lax -p 28080:28080 %%IMAGE%%
255398
```
256399

257400
## `SESSION_TIMEOUT` Environment variable
@@ -261,7 +404,7 @@ Allow to configure the default Tomcat **session-timeout** in minutes. This value
261404
The default `SESSION_TIMEOUT` value is **30** and can be defined this way:
262405

263406
```console
264-
$ docker run -d --name C8O -e SESSION_TIMEOUT=5 -p 28080:28080 %%IMAGE%%
407+
docker run -d name C8O -e SESSION_TIMEOUT=5 -p 28080:28080 %%IMAGE%%
265408
```
266409

267410
## `DISABLE_SUDO` Environment variable
@@ -271,7 +414,7 @@ The image includes **sudo** command line, configured to allow the **convertigo**
271414
The default `DISABLE_SUDO` value is **empty** and can be defined this way:
272415

273416
```console
274-
$ docker run -d --name C8O -e DISABLE_SUDO=true -p 28080:28080 %%IMAGE%%
417+
docker run -d name C8O -e DISABLE_SUDO=true -p 28080:28080 %%IMAGE%%
275418
```
276419

277420
## `ENABLE_JDWP_DEBUG` Environment variable
@@ -281,18 +424,20 @@ Convertigo operates using the JVM (Java Virtual Machine). To enable remote debug
281424
The default `ENABLE_JDWP_DEBUG` value is **false** and can be defined this way:
282425

283426
```console
284-
$ docker run -d name C8O -e ENABLE_JDWP_DEBUG=true -p 28080:28080 %%IMAGE%%
427+
docker run -d --name C8O -e ENABLE_JDWP_DEBUG=true -p 28080:28080 -p 8000:8000 %%IMAGE%%
285428
```
286429

430+
Do not expose port 8000 outside a trusted development network.
431+
287432
## Pre configurated `docker compose` stack
288433

289434
You can use this [README](https://github.com/convertigo/docker/tree/compose) to run a complete Convertigo Low Code server.
290435

291436
```console
292-
$ mkdir convertigo
293-
$ cd convertigo
294-
$ curl -sL https://github.com/convertigo/docker/archive/refs/heads/compose.tar.gz | tar xvz --strip-components=1
295-
$ docker compose up -d
437+
mkdir convertigo
438+
cd convertigo
439+
curl -sL https://github.com/convertigo/docker/archive/refs/heads/compose.tar.gz | tar xvz --strip-components=1
440+
docker compose up -d
296441
```
297442

298443
## Convertigo Helm chart

0 commit comments

Comments
 (0)