Skip to content

Docker

Docker Compose under docker/ runs the current Report Server. The command below builds the image on the machine where you run it. This repository's GitHub Actions do not publish that image.

From the repository:

cd docker
cp .env.example .env
# set JRS_DB_PASS and JRS_ADMIN_PASSWORD
docker compose up -d --build

Open http://127.0.0.1:9088/. The packaged base path is /. JRS_HOST_PORT changes the published host port (default 9088).

The default admin user is JRS_ADMIN_USER (default admin). The password is JRS_ADMIN_PASSWORD.

Compose tags the local image acugis-report-server:local unless REPORT_SERVER_IMAGE is set. Set REPORT_SERVER_IMAGE only when you already have an image to run. Do not assume a registry tag exists.

Architecture

One report-server container runs the Go application and Tomcat 10 with the JasperReports WAR. PostgreSQL and a scheduler container are separate services.

Internet / LAN
      |
      v
report-server :9088   (Go UI/API, published on the host)
      |
      +--> Tomcat 10 :8080 (Compose network only)
      |
      +--> postgres :5432 (Compose network, or your own PostgreSQL)
      |
report-scheduler       (jrs-schedule-dispatcher -> jrs-run-schedule)
      |
      +--> postgres
      +--> http://report-server:8080/report
Component In this Compose file
Go Report Server jrs-server, host port 9088
Tomcat / Jasper Tomcat 10 inside report-server, port 8080, not published
PostgreSQL PostgreSQL 16 — image version is pinned in docker/compose.yml and is not published to a host port
Scheduler report-scheduler, health port 9089, not published
Java 17

The image is built from docker/report-server/Dockerfile. Exact patch versions are pinned in that Dockerfile and in docker/compose.yml. See docker/README.md.

Jasper URL

Process JRS_JASPER_INTERNAL_REPORT_URL
report-server http://127.0.0.1:8080/report
report-scheduler http://report-server:8080/report

Port 9099 is the Go process fallback when that variable is unset. Compose sets 8080. Do not point a Compose deployment at 9099.

Inside the report-server container the Go process listens on 0.0.0.0:9088. The host reaches it through the published port.

Edition

BUILD_EDITION defaults to professional in docker/compose.yml. Set BUILD_EDITION=oss before --build for the Open Source image. An Open Source image does not compile Professional modules. A Professional image without a valid license still includes Data Explorer and embedded QGIS. Map Reports, dashboards, Dataset Intelligence, MCP, and the other license-gated modules stay off until a license is valid. ACUGIS_EDITION is not a license. See the compatibility matrix.

Scheduling

Scheduled reports are handled by the report-scheduler service. No host cron or systemd timers are required, and you should not invoke the scheduler by hand.

The scheduler runs jrs-schedule-dispatcher, which polls due schedules and executes jrs-run-schedule <schedule_id>.

Variable Purpose
JRS_DB_* Same application database as report-server
JRS_SMTP_* Scheduled email
TZ IANA timezone for calendar and once times, on both services (default UTC)
JRS_SCHEDULER_POLL_INTERVAL Poll interval (default 15s)
docker compose logs report-scheduler

Per-schedule logs on the shared volume:

/opt/acugis-report-server/schedules/logs/schedule-<id>.log

Native installs keep using systemd timers. They do not use this service.

Optional QGIS Server

QGIS Server is not in the default stack. Native installs do not install it.

docker compose --profile qgis up -d --build

Copy QGIS Desktop .qgz / .qgs files into docker/qgis/projects/ and file datasources into docker/qgis/data/. Designer uses http://127.0.0.1:9088/qgis/ (or https://<host>/qgis/ behind your proxy). Do not publish the QGIS container port. See docker/qgis/README.md.

External PostgreSQL

Set JRS_DB_HOST, JRS_DB_PORT, JRS_DB_NAME, JRS_DB_USER, and JRS_DB_PASS, then remove or disable the postgres service. docker/compose.external-postgres.example.yml is an example of that override. Keep the same report-server and report-scheduler image.

Useful commands

docker compose logs -f report-server
curl -sS http://127.0.0.1:9088/health
curl -sS http://127.0.0.1:9088/ready
docker compose down

docker compose down -v deletes the Compose volumes.