| title | Docker Installation |
|---|---|
| description | Run IncidentRelay with Docker Compose |
Docker Compose is the fastest way to run IncidentRelay for testing, demos and simple self-hosted deployments.
The default Compose setup starts:
incidentrelay # HTTP API, UI, incoming webhooks
incidentrelay-scheduler # reminders, escalations, periodic jobs
PostgreSQL is optional. SQLite is suitable for small installations and quick starts.
Docker Compose
├── incidentrelay
│ └── Gunicorn + Flask application
├── incidentrelay-scheduler
│ └── standalone scheduler worker
└── incidentrelay-data
└── SQLite database volume
Default SQLite path inside the container:
/var/lib/incidentrelay/incidentrelay.db
Default config path inside the container:
/etc/incidentrelay/incidentrelay.conf
The config file is selected by:
INCIDENTRELAY_CONFIG_FILE
docker compose up -d --buildOpen the UI:
http://SERVER_IP:8080/login
Show logs:
docker compose logs -f incidentrelay
docker compose logs -f incidentrelay-schedulerIf migrations are not run automatically by your container entrypoint, run:
docker compose exec incidentrelay python manage.py migratedocker compose exec incidentrelay \
python manage.py create-admin \
--username admin \
--password 'change-me-123' \
--email admin@example.comChange the password and email before production use.
File:
docker/incidentrelay.docker.conf
Example:
[main]
log_level = INFO
log_file = /var/log/incidentrelay/incidentrelay.log
[server]
host = 0.0.0.0
port = 8080
public_base_url = http://localhost:8080
[database]
type = sqlite
path = /var/lib/incidentrelay/incidentrelay.db
[sqlite]
wal = true
busy_timeout = 5000
[voice]
provider = stub
providers_dir = /usr/local/lib/incidentrelay/voice_providers
callback_secret = change-meUse PostgreSQL for:
- larger teams;
- higher alert volume;
- multiple web workers;
- longer-term production installations.
Start with PostgreSQL if the repository provides a PostgreSQL Compose override:
docker compose \
-f docker-compose.yml \
-f docker-compose.postgres.yml \
up -dPostgreSQL config example:
[database]
type = postgresql
host = postgres
port = 5432
name = incidentrelay
user = incidentrelay
password = incidentrelay-change-meWith this mapping:
ports:
- "8080:8080"IncidentRelay is available on:
http://SERVER_IP:8080
if the firewall allows port 8080.
For production, it is better to expose IncidentRelay through Nginx or HAProxy with HTTPS:
Internet -> Nginx/HAProxy :443 -> IncidentRelay :8080
Set the public URL correctly:
[server]
public_base_url = https://incidentrelay.example.compublic_base_url is used for generated links and callbacks.
Custom voice providers can be mounted into:
/usr/local/lib/incidentrelay/voice_providers
Example Compose mount:
volumes:
- ./custom_voice_providers:/usr/local/lib/incidentrelay/voice_providers:roAfter changing provider files, restart the containers:
docker compose restart incidentrelay incidentrelay-scheduler