1
0
mirror of https://github.com/octoleo/plantuml-server.git synced 2024-12-22 08:48:54 +00:00
PlantUML Online Server
Go to file
Florian a6e69b33eb docker: use always latest Graphviz release
This will change the Graphviz behaviour inside the docker container.
Until now it was always a fixed Graphviz version inside the Dockerfile.
With these changes the docker container will always use the latest Graphviz release if the version was not manually set via the docker build argument `GRAPHVIZ_VERSION`.

If not set as build arg fetch latest version of Graphviz based on their release name by default.
An alternative would be to use `tag_name`.

Also, to avoid the overhead of getting all kinds of relase data, GitLabs GraphQL interface could be used.
```bash
curl -s \
  -H "Content-Type:application/json" \
  -d '{"query": "{project(fullPath:\"graphviz/graphviz\"){releases(first:5,sort:RELEASED_AT_DESC){nodes{name}}}}"}' \
  "https://gitlab.com/api/graphql" \
| jq -r '.data.project.releases.nodes[].name' | sort -V -r | head -n 1
```
In GraphQL the alternative to `name` would be `tagName`.
2023-05-09 09:34:27 +02:00
.github revert missing tests + small fixes 2023-05-04 18:30:58 -04:00
.vscode frontend 2.0: initial version 2023-05-03 13:23:47 -04:00
docs add documentation 2023-05-03 13:23:47 -04:00
examples Refactoring relative paths PR#209. 2023-03-21 14:14:09 +01:00
src fix mobile view 2023-05-09 09:33:57 +02:00
.dockerignore Keep the Docker build context small 2018-11-15 21:29:32 +09:00
.editorconfig docker: use always latest Graphviz release 2023-05-09 09:34:27 +02:00
.gitattributes frontend 2.0: initial version 2023-05-03 13:23:47 -04:00
.gitignore ignore IntelliJ too. 2022-06-29 23:35:41 +02:00
COPYING update and fix checkstyle and javadoc plugins 2021-10-11 19:22:18 +02:00
docker-compose.yml improve docker handling 2021-10-11 18:39:11 +02:00
docker-entrypoint.jetty.sh feat: support deep base URLs 2023-01-26 10:29:03 +01:00
docker-entrypoint.tomcat.sh feat: support deep base URLs 2023-01-26 10:29:03 +01:00
Dockerfile.jetty docker: use always latest Graphviz release 2023-05-09 09:34:27 +02:00
Dockerfile.jetty-alpine docker: use always latest Graphviz release 2023-05-09 09:34:27 +02:00
Dockerfile.tomcat docker: use always latest Graphviz release 2023-05-09 09:34:27 +02:00
pom.jdk8.xml JDK8 problem checkstyle 2023-05-05 17:33:39 -04:00
pom.xml update all dependencies (maven artifacts) 2023-05-05 17:33:39 -04:00
README.md revert missing tests + small fixes 2023-05-04 18:30:58 -04:00
ROOT.jetty.xml feat: support deep base URLs 2023-01-26 10:29:03 +01:00
SECURITY.md textarea improvement 2022-01-22 13:03:15 +01:00

PlantUML Server

GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 latest tag workflow status (Main) workflow status (Tests)

online rate peak

GitHub Sponsors docker pulls Docker Image Size (Jetty) Docker Image Size (Tomcat)

PlantUML Server is a web application to generate UML diagrams on-the-fly.

PlantUML is not affected by the log4j vulnerability.

PlantUML Server

More examples and features about the Web UI can be found in docs/WebUI.

To know more about PlantUML, please visit https://plantuml.com.

Requirements

  • jre/jdk 11 or above
  • apache maven 3.0.2 or above

Recommendations

  • Jetty 11 or above
  • Tomcat 10 or above

How to run the server

Just run:

mvn jetty:run

The server is now listening to http://localhost:8080/plantuml. In this way the server is run on an embedded jetty server.

You can specify the port at which it runs:

mvn jetty:run -Djetty.http.port=9999

How to run the server with Docker

You can run Plantuml with jetty or tomcat container

docker run -d -p 8080:8080 plantuml/plantuml-server:jetty
docker run -d -p 8080:8080 plantuml/plantuml-server:tomcat

The server is now listening to http://localhost:8080.

Read-only container

The jetty container supports read-only files system, you can run the read-only mode with:

docker run -d -p 8080:8080 --read-only -v /tmp/jetty plantuml/plantuml-server:jetty

This makes the container compatible with more restricted environment such as OpenShift, just make sure you mount a volume (can be ephemeral) on /tmp/jetty.

Change base URL

To run plantuml using different base url, change the docker-compose.yml file:

environment:
  - BASE_URL=plantuml

And run docker-compose up. This will start a modified version of the image using the base url /plantuml, e.g. http://localhost:8080/plantuml

How to set PlantUML options

You can apply some option to your PlantUML server with environment variable.

If you run the directly the jar:

# NOTE: jetty-runner is deprecated.
# build war file and jetty-runner
mvn package
# start directly
# java $JVM_ARGS -jar jetty-runner.jar $JETTY_ARGS
java -jar target/dependency/jetty-runner.jar --config src/main/config/jetty.xml --port 9999 --path /plantuml target/plantuml.war
# see help for more possible options
java -jar target/dependency/jetty-runner.jar --help

Note: --config src/main/config/jetty.xml is only necessary if you need support for empty path segments in URLs (e.g. for the old proxy)

Alternatively, start over maven and pass the option with -D flag

mvn jetty:run -D THE_ENV_VARIABLE=THE_ENV_VALUE -Djetty.http.port=9999

If you use docker, you can use the -e flag:

docker run -d -p 9999:8080 -e THE_ENV_VARIABLE=THE_ENV_VALUE plantuml/plantuml-server:jetty

You can set all the following variables:

  • BASE_URL
    • PlantUML Base URL path
    • Default value: ROOT
  • PLANTUML_CONFIG_FILE
    • Local path to a PlantUML configuration file (identical to the -config flag on the CLI)
    • Default value: null
  • PLANTUML_LIMIT_SIZE
    • Limits image width and height
    • Default value: 4096
  • PLANTUML_STATS
  • HTTP_AUTHORIZATION
    • when calling the proxy endpoint, the value of HTTP_AUTHORIZATION will be used to set the HTTP Authorization header
    • Default value: null
  • HTTP_PROXY_READ_TIMEOUT
    • when calling the proxy endpoint, the value of HTTP_PROXY_READ_TIMEOUT will be the connection read timeout in milliseconds
    • Default value: 10000 (10 seconds)
  • ALLOW_PLANTUML_INCLUDE
    • Enables !include processing which can read files from the server into diagrams. Files are read relative to the current working directory.
    • Default value: false

Alternate: How to build your docker image

This method uses maven to run the application. That requires internet connectivity. So, you can use following command to create a self-contained docker image that will "just work".

docker image build -f Dockerfile.jetty -t plantuml-server:local .
docker run -d -p 8080:8080 plantuml-server:local

The server is now listening to http://localhost:8080.

You may specify the port in -p Docker command line argument.

How to generate the war

To build the war, just run:

mvn package

at the root directory of the project to produce plantuml.war in the target/ directory.

NOTE: If you want that the generated war includes the apache-jsp artifact run:

mvn package -Dapache-jsp.scope=compile

If you want to generate the war with java 8 as target just remove the src/test directory and use pom.jdk8.xml.

rm -rf src/test
mvn package -f pom.jdk8.xml [-Dapache-jsp.scope=compile]

Use with reverse-proxy

It is possible to use PlantUML with a reverse proxy.

You can find this and other examples here.