Installation
Configuration reference Every setting in .env: required ones, security, ES connection, models and reasoning, alert ingest, scheduled reports, baseline, audit and retention. Values changed in the UI win.
All configuration lives in .env in the install directory and is read when docker compose starts. After editing .env, docker compose -f docker-compose.prod.yml up -d recreates the gateway so the change applies.
Whatever can be changed on the Settings and AI models pages (ES connection, whitelist, masking, audit, providers) is stored in the gateway's state volume and takes precedence over .env . Those variables only seed the first start.
Variable Notes ES_URLYour Elasticsearch, https://es.corp.local:9200; several nodes comma-separated ES_USER / ES_PASSWORDES account; both empty when security is off LLM_API_KEY / LLM_BASE_URL / LLM_MODELThe first LLM provider CADDY_SITE_ADDRESSHostname analysts use; several space-separated RST_GATEWAY_SHARED_SECRETShared secret between Caddy and the gateway, generated by deploy.sh RST_ADMIN_TOKENOps API token (X-RST-Admin-Token header), generated RST_ADMIN_PASSWORD_HASHFirst administrator's password hash, generated. Unset, the gateway refuses every non-local login GATEWAY_IMAGE_TAGImage tag to run; written by deploy.sh, changed by rst-update.sh
Variable Default Notes RST_ADMIN_USERNAMEadminFirst administrator's name RST_SESSION_TTL_HOURS12Session lifetime RST_USER_DB_URLset by compose Postgres for the multi-user table; empty = single account RST_USER_DB_PASSWORDgenerated Password of the bundled userdb RST_ALLOW_DEFAULT_PASSWORDempty 1 allows the shipped password over the LAN (isolated labs only)RST_CORS_ORIGINSempty Cross-origin sources; not needed, the gateway serves its own frontend
Variable Default Notes RST_ES_VERIFY_CERTStrueVerify the ES certificate; false for self-signed, or set a CA RST_ES_CA_CERTempty Private CA path inside the container, e.g. /certs/es-ca.pem; put the file under ./certs/ RST_ES_TIMEOUT_S30Per-request ES timeout RST_ES_MAX_RETRIES2Transparent retries on timeout / connection error RST_INDEX_WHITELISTempty Strongly recommended : queryable index patterns, logs-*,filebeat-*,winlogbeat-*KIBANA_URLempty Kibana, for deep links only; empty = off KIBANA_PUBLIC_URLempty The Kibana address the analyst browser can reach, when it differs from the gateway's RST_CONVERSATION_BACKENDesConversations in ES (.rst_copilot_conversations) - survive restarts, shared across replicas; memory = in-process only RST_CONVERSATION_TTL_DAYS7Idle expiry RST_DSL_CACHE_TTL_S600Cache identical NL→DSL generations; 0 = off RST_FIELD_DICT_CACHE_TTL_S300Field-dictionary scan cache
Variable Default Notes LLM_TIMEOUT_S180Per-call LLM timeout; raise if investigations / triage time out LLM_REASONINGautoThis provider's reasoning level auto / off / low / high, see AI models RST_NL2DSL_REASONINGlowReasoning for the NL→DSL step: none / low / high / native RST_LLM_FIRST_TOKEN_TIMEOUT_S45Hard cap on the first token while generating a query; 0 = unlimited RST_EMBED_MODEL / RST_EMBED_BASE_URL / RST_EMBED_DIMempty Embedding model; better set on the AI models page RST_EMBED_COOLDOWN_S60Cool-down after an embedding endpoint failure RST_MASKING_MODEper licence Force cloud / private / airgapped RST_TIMEZONEUTCTimezone the model uses for "today / yesterday"; set +08:00 for China RST_TRIAL_DAILY_LIMIT200Daily LLM calls while unactivated RST_RATELIMIT_GENERATE / _EXECUTE / _KIBANA_LINK30 / 30 / 120Per-IP per-minute limits; raise for a large team behind one NAT address
Variable Default Notes RST_ALERT_INGEST_INDEX.alerts-security.alerts-defaultAlert index to poll (the read alias); empty = off RST_ALERT_INGEST_INTERVAL_SECONDS10Poll interval RST_ALERT_WEBHOOK_SECRETempty Shared secret for Kibana webhook push (X-RST-Alert-Token); enables push when set RST_ALERT_INGEST_CONCURRENCY / RST_ALERT_INGEST_BUDGET_S4 / 20One push carries up to 200 alerts, each costing one summary call; these bound concurrency and total time
Variable Default Notes RST_REPORT_SCHEDULEempty daily,weekly,monthly; empty = no automatic reportsRST_REPORT_TZRST_TIMEZONETimezone of period boundaries RST_REPORT_WEBHOOK_URL / _HEADERSempty POST every report here RST_REPORT_PERSIST / RST_REPORT_INDEX1 / .rst_copilot_reportsArchive to ES RST_REPORT_CATCHUP_MAX7Periods to catch up after downtime RST_BASELINE_INTERVAL_SECONDSempty Baseline poll interval, ≥ 300; empty = manual only RST_BASELINE_MAX_AGE_HOURS48osquery data older than this is stale RST_BASELINE_HOST_ROSTER_DAYS30Hosts silent this long leave the roster RST_BASELINE_OSQUERY_INDEXlogs-osquery_manager.result-*Read: your osquery results RST_BASELINE_RESULTS_INDEX / _RULES_INDEX / _RUNS_INDEXbaseline-results / -rules / -runsWrite: the gateway's three indices
Variable Default Notes RST_AUDIT_ENABLEDtrueAudit to .rst_copilot_audit RST_AUDIT_WEBHOOK_ALLOWLISTempty Hosts audit forwarding may POST to; empty = only loopback / link-local refused RST_ILM_BOOTSTRAP01 = create the ILM policy + index template on start; do it when audit is onRST_AUDIT_RETENTION_DAYS180Audit retention (with ILM on) RST_METRICS_TOKENempty Scrape token for /metrics
Variable Default Notes RST_GATEWAY_CPUS / RST_GATEWAY_MEM2 / 2gGateway container ceiling
SSO variables are on the Enterprise SSO page.