| title | Configuration |
|---|---|
| description | IncidentRelay configuration file reference |
IncidentRelay reads the config file path from:
INCIDENTRELAY_CONFIG_FILE
Example:
export INCIDENTRELAY_CONFIG_FILE=/etc/incidentrelay/incidentrelay.confFor systemd:
Environment=INCIDENTRELAY_CONFIG_FILE=/etc/incidentrelay/incidentrelay.confFor Docker Compose:
environment:
INCIDENTRELAY_CONFIG_FILE: /etc/incidentrelay/incidentrelay.confThe old ONCALL_CONFIG_FILE name should not be used.
[server]
host = 0.0.0.0
port = 8080
public_base_url = https://incidentrelay.example.com
secret_key = change-me| Option | Description |
|---|---|
host |
Address to bind the web service to |
port |
HTTP port |
public_base_url |
External URL used in alert links, buttons and callbacks |
secret_key |
Application secret; change it in production |
In production, public_base_url must be the real external HTTPS URL.
[database]
type = sqlite
path = /var/lib/incidentrelay/incidentrelay.db
[sqlite]
wal = true
busy_timeout = 5000SQLite is suitable for small self-hosted installations. Keep one web worker when using SQLite.
[database]
type = postgresql
host = 127.0.0.1
port = 5432
name = incidentrelay
user = incidentrelay
password = change-meUse PostgreSQL for larger installations, higher alert volume, multiple web workers, or long-term production deployments.
Email notification channels use global SMTP settings. SMTP transport is not configured per channel.
[smtp]
host = 127.0.0.1
port = 25
from = incidentrelay@example.com
use_tls = false
user =
password =For an unauthenticated local relay, leave user and password empty.
For an authenticated SMTP server:
[smtp]
host = smtp.example.com
port = 587
from = incidentrelay@example.com
use_tls = true
user = incidentrelay@example.com
password = change-meEmail notifications are sent to the assigned user's profile email address.
If the environment requires a proxy for Telegram Bot API calls, configure it globally. Keep token values in channel configuration, not in the global config.
Example option names depend on the current service config implementation. Use the same config file for web and Telegram worker processes.
[voice]
provider = stub
providers_dir = /usr/local/lib/incidentrelay/voice_providers
callback_secret = change-me| Option | Description |
|---|---|
provider |
Voice provider name |
providers_dir |
Directory with custom provider modules |
callback_secret |
Secret used for callback validation |
Voice call notifications are sent to the assigned user's profile phone number.
Browser push notifications are profile-level PWA/browser notifications. They are not configured as notification channels.
[browser_push]
enabled = true
vapid_public_key = CHANGE_ME_PUBLIC_KEY
vapid_private_key = /etc/incidentrelay/vapid/private_key.pem
vapid_subject = mailto:admin@example.com
action_token_ttl_seconds = 900| Option | Description |
|---|---|
enabled |
Enables or disables browser push globally |
vapid_public_key |
Public VAPID key returned to the browser for PushManager.subscribe() |
vapid_private_key |
Private VAPID key or PEM file path used by the server to send Web Push messages |
vapid_subject |
Contact URI included in VAPID claims, usually mailto:admin@example.com |
action_token_ttl_seconds |
Lifetime of one-time ACK/Resolve tokens embedded into push notifications |
After changing browser push settings, restart the web service. Restart the scheduler too if it sends notifications in your installation.
Read more: Browser Push.
The scheduler process checks reminders, escalations and periodic jobs.
The scheduler wake-up interval is separate from rotation reminder intervals. Rotation reminder intervals are configured per rotation:
0 disables reminders for that rotation
>= 60 sends reminders at that interval in seconds
1..59 invalid
Do not use a global reminder-after setting as a runtime fallback when rotations require an explicit interval.
If file logging is enabled, use a writable path:
[main]
log_level = INFO
log_file = /var/log/incidentrelay/incidentrelay.logFor systemd and containers, also check journal or container logs.