mirror of https://github.com/octoleo/plantuml-server.git synced 2024-07-24 00:40:22 +00:00
Florian Heinrich 638724925e Refactoring relative paths PR#209.
- use html `base` tag containing the context path once instead inside
every single URL/link.
- update and enhance `nginx-contextpath` example
- export javascript code into separated file
- Add TODO note to javascript clipboard check (from PR#250) since
Firefox and Safari do not support the current implementation
2023-03-21 14:14:09 +01:00
docker-compose.yml Use relative paths as far as possible. 2023-02-24 09:26:48 +01:00
nginx.conf Refactoring relative paths PR#209. 2023-03-21 14:14:09 +01:00
README.md Refactoring relative paths PR#209. 2023-03-21 14:14:09 +01:00

Nginx reverse proxy example with defined location directive

In this example, the reverse proxy is defined only under the /plantuml context path. All other context paths (locations) are not affected and are freely available. This allows the server to be used for more than "just" PlantUML.


Quick start

Be sure to have docker-compose.yml and nginx.conf inside your current working directory.

# start nginx and plantuml server
docker-compose up -d

# stop nginx and plantuml server
docker-compose down

Check with docker ps if both container are up and running:

$ docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED         STATUS         PORTS                               NAMES
217e753a0dcf   plantuml/plantuml-server:jetty   "/entrypoint.sh"         4 seconds ago   Up 3 seconds   8080/tcp                            plantuml-server
9b1290c100f5   nginx:alpine                     "/docker-entrypoint.…"   4 seconds ago   Up 3 seconds>80/tcp, :::80->80/tcp   nginx

Open http://localhost/plantuml inside your browser. YEAH! You are now using PlantUML behind a simple Nginx reverse proxy.

Nginx configuration


# PlantUML
location /plantuml/ {
    proxy_pass http://plantuml-server:8080/plantuml/;

  • location /plantuml/ to reverse only the context path /plantuml
  • proxy_pass http://plantuml-server:8080/plantuml/ to set reverse proxy path to plantuml server. Use the docker container name plantuml-server instead of ip addresses. Also, use the same context path (BASE_URL) as PlantUML, which is configurable as an environment variable in the docker-compose file.

NOTE: BASE_URL, location and therefore the proxy_pass should have the some context path! If that is not possible it may be possible to solve the problem by using NGINX sub_filter:

# PlantUML
location /plantuml/ {
    sub_filter '<base href="/" />' '<base href="/plantuml/" />';
    sub_filter_types text/html;

    proxy_pass http://plantuml-server:8080/;

NOTE: Since PR#256 it is possible to use deep base URLs. So with e.g. BASE_URL=foo/bar the following is possible:

# PlantUML
location /foo/bar/ {
    proxy_pass http://plantuml-server:8080/foo/bar/;

Nginx and PlantUML server

version: "3"

    image: plantuml/plantuml-server:jetty
    container_name: plantuml-server
      - TZ=Europe/Berlin
      - BASE_URL=plantuml

    image: nginx:alpine
    container_name: nginx
      - "80:80"
      - TZ=Europe/Berlin
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
  • Set container_name to use them instead of e.g. ip addresses
  • Set the environment TZ the ensure the same timezone. For example to server timezone (cat /etc/timezone)?
  • plantuml-server
    • plantuml-server already exposes port 8080 to it's own local network (but not outside). Since plantuml-server and nginx are sharing a network, nginx can reach plantuml-server without further settings.
    • Set the environment BASE_URL to the preferred context path
  • nginx
    • open/link port 80 to the outside
    • ./nginx.conf:/etc/nginx/nginx.conf:ro to use your own Nginx configuration (readonly)

Useful commands

# see whats going on inside your docker containers
docker logs --tail 50 --follow --timestamps nginx
docker logs --tail 50 --follow --timestamps plantuml-server