Environment variables¶
This page lists variables the current tree actually reads. Operator narrative is in Configuration. ACUGIS_REPORT_URL and ACUGIS_REPORT_TOKEN are client settings. jrs-server does not read them.
jrs-server loads optional .env files and /etc/acugis-report-server/env without overriding variables already present in the process environment. The native unit acugis-report-server.service also passes that file with EnvironmentFile=.
Truthy flags accept 1, true, yes, and on. Where an explicit off exists, 0, false, no, and off turn the flag off. Durations accept a Go duration (5s, 15m, 600s) or a positive integer number of seconds.
ACUGIS_EDITION and JRS_EDITION do not grant features. See Licensing.
Core server¶
Read by jrs-server unless noted.
| Variable | Purpose | Default | Notes |
|---|---|---|---|
JRS_LISTEN_ADDR |
HTTP bind address | 127.0.0.1:9088 |
Optional. Unset uses that default. The Debian package writes the same address. Docker Compose sets 0.0.0.0:9088 inside the container and publishes host port 9088. |
JRS_BASE_PATH |
Public URL prefix | / |
Packaged Apache proxies /. Use a prefix such as /go only when the reverse proxy is mounted there. |
JRS_ENVIRONMENT |
Environment name | development |
The package writes production. development and test add a fallback embed-token secret and, in development, localhost embed origins when origins are unset. |
JRS_APP_VERSION |
Reported version, including OpenAPI info.version |
Code fallback 1.0.0 |
Release builds overwrite the compiled fallback. The installer writes the package version and refreshes it on upgrade. Installations do not all report 1.0.0. |
JRS_JASPER_HOME |
Install root used for relative paths | Auto-detected in a checkout | Required when auto-detection fails. The package sets /opt/acugis-report-server. |
JRS_PROFILE |
Deployment profile | empty (standalone) | qcarta selects the QCarta login and catalog cut. JRS_DEPLOYMENT_PROFILE is an alias. Other values are ignored. |
ACUGIS_EDITION |
Diagnostics label only | community when unset |
Alias JRS_EDITION. Accepted words include professional / commercial and community / oss. This does not activate Professional. |
JRS_REPORT_ENDPOINT |
Viewer execute URL | execute_report.php |
Relative values stay under the report viewer. The name is a Go route, not a PHP program. |
Application database¶
Read by jrs-server. JRS_DB_HOST, JRS_DB_PORT, JRS_DB_NAME, and JRS_DB_USER are required. JRS_DB_PASS is not required for process validation and is required for a real PostgreSQL login.
| Variable | Purpose | Code default | Package / Compose |
|---|---|---|---|
JRS_DB_HOST |
PostgreSQL host | localhost |
Compose default postgres |
JRS_DB_PORT |
Port | 5432 |
5432 |
JRS_DB_NAME |
Database name | jasper_reports |
jasper_reports |
JRS_DB_USER |
Database user | postgres |
Package and Compose write jasper |
JRS_DB_PASS |
Password | empty | First-boot package install generates one when the host is local |
JRS_DB_SCHEMA |
Schema | public |
public |
JRS_DB_SSLMODE |
sslmode |
disable |
disable |
JRS_DB_CONNECT_TIMEOUT |
Connect timeout | 5s |
unset uses 5s |
JRS_DATABASE_URL |
Full DSN | empty | When set, used instead of the discrete fields. Alias JRS_DB_URL. |
Do not log the DSN. It contains the password.
Jasper / Tomcat¶
Read by jrs-server.
| Variable | Purpose | Default |
|---|---|---|
JRS_JASPER_INTERNAL_REPORT_URL |
Internal Jasper execute URL | http://127.0.0.1:9099/report only when unset |
JRS_JASPER_INTERNAL_IMAGE_URL |
Internal Jasper image URL | http://127.0.0.1:9099/acugis_report_image only when unset |
JRS_JASPER_TIMEOUT |
HTTP client timeout | 600s |
JRS_JRXML_DIR |
JRXML and .jasper directory |
$CATALINA_BASE/acugis/reports when that directory exists, otherwise {app}/docker/report-server/reports |
JRS_JASPER_CONTEXT_PATH |
Tomcat context.xml written by datasource admin |
$CATALINA_BASE/conf/context.xml when present, otherwise {app}/docker/report-server/context.xml |
JRS_JASPER_REPORTS_CONTAINER_DIR |
Path Tomcat uses for map images | The absolute JRS_JRXML_DIR when unset |
JRS_JASPER_SCHEDULE_DIR |
Schedule files | {app}/schedules |
JRS_JASPER_EMAIL_TMPL_DIR |
Email templates | {app}/email_tmpl |
JRS_REPORTS_OWNER |
Owner for JRXML and map-cache writes | tomcat |
JRS_REPORTS_GROUP |
Group for those writes | tomcat |
JRS_MYSQL_JDBC_DRIVER |
MySQL driver class written into Jasper context | empty |
CATALINA_BASE |
Tomcat base used for path detection | unset |
CATALINA_HOME |
Fallback when CATALINA_BASE is unset |
unset |
The Debian package and Docker Compose set the Jasper report URL to port 8080, not 9099. The package uses http://127.0.0.1:8080/report. The Compose report-server service uses that same URL. The Compose report-scheduler service uses http://report-server:8080/report. The image URL uses the same host and port with path /acugis_report_image.
The package also sets JRS_JRXML_DIR, JRS_JASPER_CONTEXT_PATH, and JRS_JASPER_REPORTS_CONTAINER_DIR to /opt/tomcat/acugis/reports and /opt/tomcat/conf/context.xml, and sets JRS_REPORTS_OWNER / JRS_REPORTS_GROUP to the Tomcat user. Compose sets the in-container equivalents under /usr/local/tomcat and sets the owner and group to root.
Authentication and sessions¶
| Variable | Purpose | Default | Read by |
|---|---|---|---|
JRS_SESSION_COOKIE |
Session cookie name | jrs_session |
jrs-server |
JRS_AUTH_DISABLED |
Skip login and treat the process as a local admin | off unless 1/true/yes/on |
jrs-server |
JRS_PAT_PREFIXES |
Extra accepted Bearer prefixes, comma-separated | empty, which means jrs_ only |
jrs-server |
JRS_AUTH_CHECK_TOKEN |
Token for the jrs-auth-check helper |
empty | jrs-auth-check only |
JRS_AUTH_DISABLED is a local bypass. Do not set it on a shared or production listener.
Personal access tokens¶
Issued tokens use the prefix jrs_. JRS_PAT_PREFIXES changes which Bearer prefixes the server accepts. It does not change the prefix of tokens the server creates. There is no separate MCP token type.
Licensing¶
| Variable | Purpose | Default | Read by |
|---|---|---|---|
ACUGIS_LICENSE_STATE_DIR |
Directory for installation-id, license.lic, and report-designer-web.lic |
/var/lib/acugis-report-server |
jrs-server |
ACUGIS_LICENSE_SERVER_URL |
HTTPS license-service base URL | empty, which uses https://license.acugis.com |
jrs-server |
ACUGIS_DESIGNER_WEB_VERSION |
Product version sent for Report Designer Web license calls | 1.0.0 when unset |
jrs-server license startup |
Compose sets ACUGIS_LICENSE_STATE_DIR to /opt/acugis-report-server/var/license on the report-server and report-scheduler services. A non-HTTPS override is rejected. Details: Licensing.
Embedding¶
| Variable | Purpose | Default |
|---|---|---|
ACUGIS_EMBED_ALLOWED_ORIGINS |
Comma-separated origins allowed to frame /embed/* and call embed APIs |
empty; development adds common localhost origins |
ACUGIS_EMBED_TOKEN_SECRET |
Secret that signs emb_ tokens |
empty; development and test use a fixed dev fallback |
ACUGIS_EMBED_TOKEN_TTL |
Default embed-token lifetime | 15m |
Aliases: JRS_EMBED_ALLOWED_ORIGINS, JRS_EMBED_TOKEN_SECRET, JRS_EMBED_TOKEN_TTL. The package generates ACUGIS_EMBED_TOKEN_SECRET on first boot when neither name is already set. Production must set a real secret. See Embedding security.
OpenID Connect¶
Read by the Professional binary. They override Administration → Authentication when set. They are absent from the Open Source binary's OIDC module. A valid Report Server Professional license is still required before OIDC login runs. See OpenID Connect.
| Variable | Purpose | Default when unset |
|---|---|---|
ACUGIS_LOCAL_AUTH_ENABLED |
Override local username/password | database setting; initial default on |
ACUGIS_OIDC_ENABLED |
Override the OIDC enabled flag | database setting; initial default off |
ACUGIS_OIDC_ISSUER |
Issuer URL | database |
ACUGIS_OIDC_CLIENT_ID |
Client ID | database |
ACUGIS_OIDC_CLIENT_SECRET |
Client secret | database; an env secret is not returned by the admin UI |
ACUGIS_OIDC_SCOPES |
Space-separated scopes | openid profile email |
ACUGIS_OIDC_USERNAME_CLAIM |
Username claim | preferred_username |
ACUGIS_OIDC_EMAIL_CLAIM |
Email claim | email |
ACUGIS_OIDC_NAME_CLAIM |
Display-name claim | name |
ACUGIS_OIDC_PROVIDER_NAME |
Login-button label | database; UI falls back to SSO |
There is no environment variable for the groups claim, auto-provision, email linking, or IdP logout. Those stay in the admin settings.
SAML¶
Read by the Professional binary. They override Administration → Authentication when set. A valid Report Server Professional license is still required. See SAML.
| Variable | Purpose |
|---|---|
ACUGIS_SAML_ENABLED |
Override the SAML enabled flag |
ACUGIS_SAML_PROVIDER_NAME |
Login-button label |
ACUGIS_SAML_IDP_METADATA_URL |
IdP metadata URL |
ACUGIS_SAML_IDP_ENTITY_ID |
IdP entity ID |
ACUGIS_SAML_IDP_SSO_URL |
IdP SSO URL |
ACUGIS_SAML_SP_ENTITY_ID |
SP entity ID |
ACUGIS_SAML_ACS_URL |
Assertion Consumer Service URL |
ACUGIS_SAML_NAMEID_ATTRIBUTE |
Subject attribute (default NameID) |
ACUGIS_SAML_USERNAME_ATTRIBUTE |
Username attribute |
ACUGIS_SAML_EMAIL_ATTRIBUTE |
Email attribute (default email) |
ACUGIS_SAML_DISPLAY_NAME_ATTRIBUTE |
Display-name attribute (default displayName) |
ACUGIS_SAML_CLOCK_SKEW |
Clock-skew seconds (default 120) |
ACUGIS_SAML_SP_KEY_FILE |
Path to the SP private key PEM |
ACUGIS_SAML_SP_CERT_FILE |
Path to the SP certificate PEM |
If a key or certificate path is set and the file cannot be read, that material is not loaded. If one of the two files is set and the other is missing, SAML startup reports the pair as incomplete instead of generating a replacement key.
Designer Web¶
Read by jrs-server. Both JRS_DESIGNER_UPSTREAM and JRS_DESIGNER_INTERNAL_TOKEN must be set together, or both left empty. An empty upstream leaves Designer routes inactive. The upstream must be an http or https URL on 127.0.0.1, localhost, or ::1, with no userinfo and no path. See Designer Web.
| Variable | Purpose | Default |
|---|---|---|
JRS_DESIGNER_UPSTREAM |
Loopback Designer process | empty |
JRS_DESIGNER_INTERNAL_TOKEN |
Shared secret sent to that process | empty; no production default |
JRS_DESIGNER_PROXY_TIMEOUT |
Proxy timeout | 120s |
JRS_DESIGNER_PROXY_MAX_BODY |
Maximum proxied body | 64 MiB (64MB is accepted; KB, MB, and GB suffixes too) |
JRS_DESIGNER_ASSETS_DIR |
Designer Web files served at /designer-assets/ to a signed-in, licensed Designer user |
{app root}/designer-web |
A Report Server Professional license does not set these variables and does not license Designer Web.
MCP¶
Read by jrs-server. The route exists only in the Professional binary and requires Dataset Intelligence, which a license must enable. See MCP Server.
| Variable | Purpose | Default |
|---|---|---|
JRS_MCP_ENABLED |
Enable /api/v1/mcp |
off unless 1/true/yes/on |
JRS_MCP_ALLOWED_HOSTS |
Extra public hostnames accepted when the connection arrives on loopback | empty (loopback Host values only) |
Auditing¶
Read by jrs-server. Recording follows these flags on both packages. The audit administration UI is a separate license gate. See Auditing.
| Variable | Purpose | Default |
|---|---|---|
JRS_AUDIT_ENABLED |
Record audit events | true |
JRS_AUDIT_RETENTION_DAYS |
Retention window | 90 |
JRS_AUDIT_LOG_PARAMETERS |
Store sanitized report parameters | true |
JRS_AUDIT_LOG_SQL |
Store raw SQL | false |
Prefer the JRS_AUDIT_* names. AUDIT_ENABLED, AUDIT_RETENTION_DAYS, AUDIT_LOG_PARAMETERS, and AUDIT_LOG_SQL are accepted aliases of those four variables. They are not a second configuration scheme.
SMTP / mail¶
Read by the schedule mailer (jrs-server schedule actions and jrs-run-schedule), not by config.Load.
| Variable | Purpose | Default |
|---|---|---|
JRS_SMTP_HOST |
SMTP host | empty, which falls back to local sendmail |
JRS_SMTP_PORT |
SMTP port | 587 |
JRS_SMTP_USER |
SMTP user | empty |
JRS_SMTP_PASS |
SMTP password | empty |
JRS_SMTP_FROM |
From address | empty |
JRS_SMTP_HELO |
EHLO/HELO name | domain of JRS_SMTP_FROM when unset |
JRS_SENDMAIL_PATH |
Sendmail binary | the usual system path when unset |
Scheduler¶
JRS_SCHEDULE_RUNTIME selects the runtime. Unset or any value other than dispatcher means systemd, which is the native package behavior. Compose sets dispatcher on both the server and scheduler containers.
| Variable | Purpose | Default | Read by |
|---|---|---|---|
JRS_SCHEDULE_RUNTIME |
systemd or dispatcher |
systemd |
scheduler code |
JRS_SCHEDULER_POLL_INTERVAL |
Dispatcher poll interval | 15s |
jrs-schedule-dispatcher |
JRS_SCHEDULER_LISTEN_ADDR |
Dispatcher GET /health bind |
:9089 |
jrs-schedule-dispatcher |
JRS_SCHEDULE_RUNNER |
Command the dispatcher executes | a sibling jrs-run-schedule when present |
dispatcher |
JRS_JASPER_SYSTEMD_UNIT_DIR |
Generated unit files | /opt/acugis-report-server/systemd |
systemd schedule manager |
JRS_JASPER_SYSTEMD_SYSTEM_DIR |
systemd unit install directory | /etc/systemd/system |
systemd schedule manager |
JRS_JASPER_SYSTEMCTL |
systemctl binary |
/bin/systemctl |
systemd schedule manager |
JRS_JASPER_SYSTEMD_USE_SUDO |
Call systemctl through sudo |
on, unless 0/false/no/off |
systemd schedule manager |
JRS_SYSTEMD_ENV_FILE |
Extra env file for schedule units, and an extra dotenv path | /etc/acugis-report-server/env |
systemd manager and jrs-server dotenv loader |
TZ |
Process timezone for calendar schedules | the container or host zone | process; Compose default UTC |
Native systemd units invoke {JRS_JASPER_HOME}/scripts/run_schedule.php through PHP. The dispatcher path uses JRS_SCHEDULE_RUNNER and does not use that PHP script. The package writes JRS_JASPER_SYSTEMD_USE_SUDO=true and JRS_JASPER_SYSTEMD_UNIT_DIR under the install root.
QGIS¶
| Variable | Purpose | Default | Read by |
|---|---|---|---|
JRS_QGIS_UPSTREAM |
QGIS Server base URL | empty, which leaves /qgis/* without an upstream |
jrs-server (Professional binary mounts the proxy) |
JRS_QGIS_MAP_PREFIX |
Prefix rewritten into QGIS MAP paths |
/qgis/projects |
jrs-server |
JRS_QGIS_CONNECTIONS_PATH |
QGIS connection properties file | {app}/docker/report-server/qgis-connections.properties |
jrs-server |
The package sets the properties path to /opt/tomcat/conf/qgis-connections.properties. Compose sets /usr/local/tomcat/conf/qgis-connections.properties and defaults the upstream to http://qgis-server.
GeoServer and ArcGIS connection storage¶
| Variable | Purpose | Code fallback | Package path |
|---|---|---|---|
JRS_GEOSERVER_CONNECTIONS_PATH |
GeoServer connection properties | {app}/docker/report-server/geoserver-connections.properties |
/opt/tomcat/conf/geoserver-connections.properties |
JRS_ARCGIS_CONNECTIONS_PATH |
ArcGIS connection properties | {app}/docker/report-server/arcgis-connections.properties |
/opt/tomcat/conf/arcgis-connections.properties |
Compose uses /usr/local/tomcat/conf/ for both files. These files store connection secrets. ArcGIS entitlement is separate from the file path: the Open Source package serves the ArcGIS admin route as not found, and an unlicensed Professional process denies the ArcGIS provider.
Resources and folders¶
| Variable | Purpose | Default |
|---|---|---|
JRS_RESOURCES_DIR |
Non-image resources | {app}/resources |
JRS_RESOURCE_THUMBNAILS_DIR |
Image-resource thumbnails | {app}/thumbnails |
JRS_RESOURCE_PATHS_DIR |
Path-addressable image resources for Jasper | sibling resource-paths of the JRXML directory |
JRS_FOLDER_ALLOW_RECURSIVE_DELETE |
Allow DELETE /api/v1/folders/{id}?recursive=1&confirm=1 |
off unless 1/true/yes/on |
JRS_RESOURCE_SYNC_VERBOSE |
Extra resource-sync log lines | off |
The package sets JRS_RESOURCE_PATHS_DIR to /opt/tomcat/acugis/resource-paths.
QCarta / Central¶
| Variable | Purpose | Default |
|---|---|---|
JRS_PROFILE |
Set to qcarta |
empty |
JRS_CENTRAL_LOGIN_URL |
External login URL | empty, which keeps /login |
JRS_AUTH_DATABASE_URL |
Separate auth database URL | empty |
Aliases: JRS_DEPLOYMENT_PROFILE, CENTRAL_LOGIN_URL, CENTRAL_DATABASE_URL. When the profile is qcarta, or when a central login URL is set, local login and logout redirect to that Central URL. This is a deployment cut. It does not change edition.
DuckDB home¶
| Variable | Purpose | Default |
|---|---|---|
ACUGIS_DUCKDB_HOME |
DuckDB extension home | alias DUCKDB_HOME, then a directory under the user home, cache, or temp |
ACUGIS_DUCKDB_HTTPFS |
Optional httpfs extension path for the JDBC session | empty |
Compose sets ACUGIS_DUCKDB_HOME to /opt/acugis-report-server/var/duckdb.
Installer-only variables¶
scripts/native-setup.sh and the release install.sh read these. jrs-server does not use them as feature switches. JRS_ADMIN_USER and JRS_ADMIN_PASSWORD seed the first administrator. They are written to /etc/acugis-report-server/env and the first-boot file /etc/acugis-report-server/initial-credentials.
| Variable | Purpose | Default |
|---|---|---|
JRS_INSTALL_DIR |
Install root | /opt/acugis-report-server |
JRS_TOMCAT_HOME |
Tomcat directory | /opt/tomcat |
JRS_TOMCAT_VERSION |
Tomcat release downloaded when missing | 10.1.57 |
JRS_APACHE_CONF |
Apache snippet path | /etc/apache2/conf-available/acugis-report-server.conf |
JRS_SYSTEMD_ENV_FILE |
Env file path | /etc/acugis-report-server/env |
JRS_CREDENTIALS_FILE |
First-boot password file | /etc/acugis-report-server/initial-credentials |
JRS_SERVICE_USER |
jrs-server user |
www-data |
JRS_TOMCAT_USER |
Tomcat user | tomcat |
JRS_ADMIN_USER |
Seeded administrator | admin |
JRS_ADMIN_PASSWORD |
Seeded administrator password | generated on first local boot when empty |
JRS_SKIP_TOMCAT |
Skip Tomcat download and permission fix | 0 |
JRS_SKIP_DB |
Skip database setup | 0 |
JRS_SKIP_APACHE |
Skip Apache snippet | 0 |
JRS_APACHE_OVERWRITE |
Replace an existing Apache snippet | 1 for the tarball; Debian postinst uses 0 |
JRS_EDITION_STATE |
Installer edition marker path | /var/lib/acugis-report-server/edition |
JRS_SUDOERS_FILE |
sudoers drop-in for schedule units | /etc/sudoers.d/acugis-report-server |
The installer does not replace an existing env file. It refreshes JRS_APP_VERSION, and on upgrade it sets JRS_JASPER_SYSTEMD_USE_SUDO=true when that value is missing or false. It does not write installation-id or license.lic.
Docker entrypoint-only variables¶
These are read by docker/report-server/docker-entrypoint.sh or by Compose. They are not jrs-server configuration. Do not treat them as feature flags inside the Go process.
| Variable | Purpose | Default |
|---|---|---|
ACUGIS_DOCKER_ROLE |
scheduler selects the dispatcher process |
empty (combined server) |
ACUGIS_DOCKER_SEED_DEMO |
Seed demo content on first boot | 1 |
ACUGIS_DOCKER_IMAGE_ROOT |
Image tree copied into the data volume | /opt/acugis-image |
ACUGIS_DOCKER_CONF_PERSIST |
Persisted Tomcat conf directory | /var/acugis/tomcat-conf |
ACUGIS_BUILD_EDITION |
Which schema file the entrypoint applies | professional unless the image was built oss |
JRS_HOST_PORT |
Host port published to container 9088 |
9088 (Compose only) |
JRS_DATA_HOST_PATH |
Host directory mounted at /data |
./data (Compose only) |
Compose also sets ACUGIS_REPORTS_DIR, ACUGIS_UPLOADS_DIR, ACUGIS_FONTS_DIR, ACUGIS_DRIVERS_DIR, ACUGIS_LICENSES_DIR, ACUGIS_TEMP_DIR, and ACUGIS_RESOURCE_PATHS_DIR. jrs-server config loading does not read those names. The Go process uses the JRS_* path variables above.
BUILD_EDITION is a Docker build argument (professional or oss). It chooses which binary is compiled into the image. It is not read by a running jrs-server as a license.
Client variables¶
Read by the CLI and SDKs. Not read by jrs-server.
| Variable | Purpose |
|---|---|
ACUGIS_REPORT_URL |
Report Server base URL. Use the public origin. Add a path only when JRS_BASE_PATH is not /. |
ACUGIS_REPORT_TOKEN |
Bearer personal access token (jrs_…) |