2021-10-11 14:40:15 +00:00
# PlantUML Server
2021-10-12 15:51:35 +00:00
[![GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 ](https://img.shields.io/github/license/plantuml/plantuml-server.svg?color=blue )](https://www.gnu.org/licenses/gpl-3.0)
[![latest tag ](https://img.shields.io/github/v/tag/plantuml/plantuml-server )](https://github.com/plantuml/plantuml-server/tags)
![workflow status (Main) ](https://github.com/plantuml/plantuml-server/actions/workflows/main.yml/badge.svg )
![workflow status (Tests) ](https://github.com/plantuml/plantuml-server/actions/workflows/tests.yml/badge.svg )
2021-11-16 22:27:05 +00:00
2022-01-25 09:34:34 +00:00
[![online ](https://img.shields.io/endpoint?url=https://www.plantuml.com/plantuml/badge )](https://www.plantuml.com/plantuml)
[![rate ](https://img.shields.io/endpoint?url=https://www.plantuml.com/plantuml/rate )](https://www.plantuml.com/plantuml)
[![peak ](https://img.shields.io/endpoint?url=https://www.plantuml.com/plantuml/rate?peak )](https://www.plantuml.com/plantuml)
2021-11-17 22:51:13 +00:00
2022-01-06 10:09:29 +00:00
[![GitHub Sponsors ](https://img.shields.io/github/sponsors/plantuml?logo=github )](https://github.com/sponsors/plantuml/)
2021-10-12 15:51:35 +00:00
[![docker pulls ](https://img.shields.io/docker/pulls/plantuml/plantuml-server.svg?color=blue )](https://hub.docker.com/r/plantuml/plantuml-server)
![Docker Image Size (Jetty) ](https://img.shields.io/docker/image-size/plantuml/plantuml-server/jetty?label=jetty%20image%20size )
![Docker Image Size (Tomcat) ](https://img.shields.io/docker/image-size/plantuml/plantuml-server/tomcat?label=tomcat%20image%20size )
2021-10-11 14:40:15 +00:00
2013-10-17 15:02:48 +00:00
PlantUML Server is a web application to generate UML diagrams on-the-fly.
2015-03-29 18:12:21 +00:00
2021-12-14 10:54:53 +00:00
[PlantUML is **not** affected by the log4j vulnerability. ](https://github.com/plantuml/plantuml/issues/826 )
2021-10-11 14:40:15 +00:00
![PlantUML Server ](https://raw.githubusercontent.com/plantuml/plantuml-server/master/screenshots/screenshot.png )
2019-05-07 17:06:08 +00:00
2021-10-11 14:40:15 +00:00
To know more about PlantUML, please visit https://plantuml.com.
2011-11-02 22:23:39 +00:00
2019-11-11 11:01:38 +00:00
2021-10-11 14:40:15 +00:00
## Requirements
2011-11-02 22:23:39 +00:00
2021-10-15 13:11:55 +00:00
- jre/jdk 11 or above
2021-10-11 14:40:15 +00:00
- apache maven 3.0.2 or above
2011-11-02 22:23:39 +00:00
2021-12-09 12:15:31 +00:00
## Recommendations
- Jetty 11 or above
- Tomcat 10 or above
2021-10-11 14:40:15 +00:00
## How to run the server
2015-03-29 18:12:21 +00:00
Just run:
2021-10-11 14:40:15 +00:00
```sh
2015-03-29 18:12:21 +00:00
mvn jetty:run
```
2021-10-11 14:40:15 +00:00
The server is now listening to [http://localhost:8080/plantuml ](http://localhost:8080/plantuml ).
2019-05-07 17:06:08 +00:00
In this way the server is run on an embedded jetty server.
2015-03-29 18:12:21 +00:00
You can specify the port at which it runs:
2021-10-11 14:40:15 +00:00
```sh
2021-10-15 13:11:55 +00:00
mvn jetty:run -Djetty.http.port=9999
2015-03-29 18:12:21 +00:00
```
2021-10-11 14:40:15 +00:00
## How to run the server with Docker
2017-01-26 07:32:35 +00:00
2017-04-28 08:53:11 +00:00
You can run Plantuml with jetty or tomcat container
2021-10-11 14:40:15 +00:00
```sh
2017-04-28 08:53:11 +00:00
docker run -d -p 8080:8080 plantuml/plantuml-server:jetty
docker run -d -p 8080:8080 plantuml/plantuml-server:tomcat
2017-01-26 07:32:35 +00:00
```
2021-10-11 14:40:15 +00:00
The server is now listening to [http://localhost:8080 ](http://localhost:8080 ).
2017-01-26 07:32:35 +00:00
2021-10-11 14:40:15 +00:00
### Read-only container
2021-05-12 21:26:32 +00:00
The jetty container supports read-only files system, you can run the read-only mode with:
2021-10-11 14:40:15 +00:00
```sh
docker run -d -p 8080:8080 --read-only -v /tmp/jetty plantuml/plantuml-server:jetty
2021-05-12 21:26:32 +00:00
```
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` .
2021-10-11 14:40:15 +00:00
### Change base URL
2021-05-12 21:26:32 +00:00
2019-05-07 17:06:08 +00:00
To run plantuml using different base url, change the `docker-compose.yml` file:
2021-10-11 15:33:30 +00:00
```yaml
environment:
- BASE_URL=plantuml
```
2019-05-07 17:06:08 +00:00
2021-10-11 14:40:15 +00:00
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
2019-05-07 17:06:08 +00:00
2021-10-11 14:40:15 +00:00
## How to set PlantUML options
2017-09-26 07:40:42 +00:00
2021-10-11 14:40:15 +00:00
You can apply some option to your PlantUML server with environment variable.
2017-09-26 07:40:42 +00:00
2021-10-15 13:11:55 +00:00
If you run the directly the jar:
2021-10-11 14:40:15 +00:00
```sh
2021-10-15 13:11:55 +00:00
# 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
2017-09-26 07:40:42 +00:00
```
2021-10-15 13:11:55 +00:00
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
2021-10-11 14:40:15 +00:00
```sh
2021-10-15 13:11:55 +00:00
mvn jetty:run -D THE_ENV_VARIABLE=THE_ENV_VALUE -Djetty.http.port=9999
2017-09-26 07:40:42 +00:00
```
If you use docker, you can use the `-e` flag:
2021-10-11 14:40:15 +00:00
```sh
2021-10-15 13:11:55 +00:00
docker run -d -p 9999:8080 -e THE_ENV_VARIABLE=THE_ENV_VALUE plantuml/plantuml-server:jetty
2017-09-26 07:40:42 +00:00
```
You can set all the following variables:
2021-10-12 15:51:35 +00:00
* `BASE_URL`
* PlantUML Base URL path
* Default value: `ROOT`
2022-07-26 11:00:58 +00:00
* `PLANTUML_CONFIG_FILE`
* Local path to a PlantUML configuration file (identical to the `-config` flag on the CLI)
* Default value: `null`
2021-10-11 14:40:15 +00:00
* `PLANTUML_LIMIT_SIZE`
2021-10-12 15:51:35 +00:00
* Limits image width and height
* Default value: `4096`
2021-10-11 14:40:15 +00:00
* `PLANTUML_STATS`
2021-10-12 15:51:35 +00:00
* Set it to `on` to enable [statistics report ](https://plantuml.com/statistics-report )
* Default value: `off`
2021-10-11 14:40:15 +00:00
* `HTTP_AUTHORIZATION`
2021-10-12 15:51:35 +00:00
* when calling the `proxy` endpoint, the value of `HTTP_AUTHORIZATION` will be used to set the HTTP Authorization header
* Default value: `null`
2021-10-11 14:40:15 +00:00
* `ALLOW_PLANTUML_INCLUDE`
2021-10-12 15:51:35 +00:00
* Enables `!include` processing which can read files from the server into diagrams. Files are read relative to the current working directory.
* Default value: `false`
2021-10-11 14:40:15 +00:00
## Alternate: How to build your docker image
2017-04-21 20:53:01 +00:00
2019-05-07 17:06:08 +00:00
This method uses maven to run the application. That requires internet connectivity.
2022-02-08 13:37:25 +00:00
So, you can use following command to create a self-contained docker image that will "just work".
2017-04-24 16:16:12 +00:00
2021-10-11 14:40:15 +00:00
```sh
2021-10-15 13:11:55 +00:00
docker image build -f Dockerfile.jetty -t plantuml-server:local .
2021-10-11 14:40:15 +00:00
docker run -d -p 8080:8080 plantuml-server:local
2017-04-21 20:53:01 +00:00
```
2021-10-12 15:51:35 +00:00
The server is now listening to [http://localhost:8080 ](http://localhost:8080 ).
2017-04-21 20:53:01 +00:00
2017-12-18 13:34:23 +00:00
You may specify the port in `-p` Docker command line argument.
2019-05-07 17:06:08 +00:00
2017-01-26 07:32:35 +00:00
2021-10-11 14:40:15 +00:00
## How to generate the war
2015-03-29 18:12:21 +00:00
To build the war, just run:
2021-10-11 14:40:15 +00:00
```sh
2015-03-29 18:12:21 +00:00
mvn package
```
at the root directory of the project to produce plantuml.war in the target/ directory.
2021-10-15 13:11:55 +00:00
NOTE: If you want that the generated war includes the `apache-jsp` artifact run:
```sh
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` .
```sh
rm -rf src/test
mvn package -f pom.jdk8.xml [-Dapache-jsp.scope=compile]
```
2021-12-25 17:05:29 +00:00
## Use with reverse-proxy
It is possible to use PlantUML with a reverse proxy.
2021-12-26 21:38:20 +00:00
You can find this and other examples [here ](./examples ).