Skip to main content
Version: 1.4 (Current)

Settings file and environment variables

Complete reference for configuring ToBeAlert in Docker, Kubernetes, and bare-metal deployments — and how those settings interact with Backend Config in the UI.

Most operators start here

If you only need to change alert retention, timeouts, or SMTP for account emails, use Management → Backend Config in the UI. Use this page when you deploy containers, set secrets, or need the full list of keys.

How configuration really works​

ToBeAlert loads settings in this order. Higher layers win only where the backend re-reads that key from the environment.

PriorityMechanismWhat it covers
1Environment variables (selected keys only)Keys reloaded through get_config() at backend startup — see Runtime env vars
2Extra conf file ALERTA_SVR_CONF_FILEOptional override file loaded after the main conf
3/tobealert/config/tobealertd.confFull backend settings; also what Backend Config writes
4Built-in defaults (settings.py)Defaults shipped in the backend image
Env does not override everything

Many important keys — including ALERT_TIMEOUT, CLEANUP_FREQUENCY, ACK_TIMEOUT, SHELVE_TIMEOUT, and ENABLED — are not read from the environment. Setting ALERT_TIMEOUT=60 as a Docker env var has no effect. Put them in tobealertd.conf or change them in Backend Config.

The active settings file path is fixed: /tobealert/config/tobealertd.conf.

On first backend container start the entrypoint:

  1. Copies tobealertd.conf.example → tobealertd.conf (if missing)
  2. Replaces SECRET_KEY = 'CHANGEME' with a random value
  3. Creates the bootstrap UI user from ADMIN_USER / ADMIN_PASSWORD only if that login does not already exist in PostgreSQL

See Bootstrap — ADMIN_PASSWORD is not re-applied on later restarts.

Environment variable formats​

TypeFormat in envExample
Booleantrue, yes, on, 1, enabled, …DEBUG=true
ListComma-separatedPLUGINS=delay,notifications
Integer / stringPlain valueREDIS_PORT=6379

Backend Config UI vs env vs conf​

Where you change itPersists toApplies to running APIApplies to Celery Beat/workers
Docker/K8s env (supported keys)Process envOn restartOn restart
tobealertd.conf editFileOn restart (or UI write)On restart
Backend Config UIWrites tobealertd.conf + updates API memoryImmediately in the API processRetention keys trigger worker pool restart; Beat interval may need a Celery Beat restart

If the same key exists as env and in the conf file, at the next backend start the env value wins (for keys in the runtime list below). The UI can still rewrite the file, but the process keeps using the env until you remove the env override.


Alert lifecycle: timeout, expiry, and cleanup​

This is the section that answers “I set delete after 1 minute — why are alerts still there?”

There are two different clocks:

SettingWhat it controlsDefault
Alert timeout (ALERT_TIMEOUT)When an open alert becomes expired (status change, not delete)86400 s (24 h)
Retain closed/expired (DELETE_EXPIRED_AFTER)How old a closed or expired alert must be (from last_receive_time) before it is deleted7200 s (2 h)
Retain informational (DELETE_INFO_AFTER)Same idea for informational-severity alerts43200 s (12 h)
Housekeeping interval (CLEANUP_FREQUENCY)How often the cleaner job wakes up to delete / unack / unshelve3600 s (1 h)
Housekeeping enabled (ENABLED)Master switch for the cleaner job onlytrue

Step by step​

  1. Receive — An alert is open. Its timeout comes from the payload, or defaults to ALERT_TIMEOUT (24 hours).
  2. Expire (status) — Celery task expire_alerts runs about every 5 seconds. When last_receive_time + timeout is in the past, status becomes expired. This does not wait for housekeeping.
  3. Delete (retention) — Celery task run_housekeeping runs every CLEANUP_FREQUENCY seconds (default hourly). It deletes rows where:
    • status is closed or expired, and
    • last_receive_time is older than DELETE_EXPIRED_AFTER
    • (separately) informational severity older than DELETE_INFO_AFTER
  4. Ack / shelve — The same housekeeping run also auto-unacks / auto-unshelves using ACK_TIMEOUT / SHELVE_TIMEOUT.
  5. History cleanup — The same run deletes policy/tool run history older than 30 days (hardcoded; not configurable).

Retention vs interval (the common confusion)​

time until delete ≈ DELETE_*_AFTER  +  (0 … CLEANUP_FREQUENCY)  + worker latency
  • DELETE_*_AFTER = “how old must the alert be?”
  • CLEANUP_FREQUENCY = “how often do we look?”

Example: retain = 60 seconds, interval = 3600 seconds:

  • The alert becomes eligible for delete 1 minute after last_receive_time.
  • The cleaner only wakes once per hour → in the worst case the row stays until the next hourly run.
  • So you can wait up to ~1 hour + 1 minute, not “about 1 minute”.

If you need near-real-time deletion, lower both:

  • set a small DELETE_EXPIRED_AFTER, and
  • set a small CLEANUP_FREQUENCY (for example 60), then restart Celery Beat so the new schedule is picked up.

Extra delete path in expire_alerts​

After marking alerts expired, expire_alerts can also DELETE expired rows where update_time + timeout has elapsed again. With default timeouts (24 h) this path usually fires later than housekeeping retention (2 h). Treat DELETE_EXPIRED_AFTER + CLEANUP_FREQUENCY as the retention controls you care about.

What ENABLED=false does not stop​

Turning off housekeeping does not stop expire_alerts. Open alerts still become expired every ~5 seconds based on timeout — they just are not deleted / unacked / unshelved by housekeeping until you enable it again.

Where to configure​

GoalPrefer
Day-to-day retention / timeoutsBackend Config → Housekeeping / Alerts / Timeouts
Deploy-time defaults in GitOpstobealertd.conf mounted into the backend
Secrets (DB URL, admin password)Environment variables

Frontend (tobealert-frontend)​

All frontend runtime configuration is done with environment variables (injected at container start; nginx substitutes them into the config).

VariableRequiredDefaultDescription
BASE_URLYes—URL the browser uses to open the web UI (scheme + host + port, no trailing path). Example: http://localhost or https://alerts.example.com. For HTTPS see HTTPS and TLS.
API_URLYes—URL the browser uses for API calls. Example: http://localhost:9000 or https://alerts.example.com:9000. Do not append /api. For HTTPS this must be https://.
BACKEND_SERVICEYes—Hostname nginx uses as upstream for /api and /management. In Compose: backend service name. In Kubernetes: backend Service DNS name.
BACKEND_PORTYes9000TCP port of the backend upstream

Nginx proxies to http://BACKEND_SERVICE:BACKEND_PORT using the env values above. BACKEND_SERVICE must resolve on the same network as the frontend (not localhost unless using host networking).


PostgreSQL (tobealert-bbdd)​

Standard PostgreSQL Docker image variables.

VariableRequiredDefaultDescription
POSTGRES_USERYes—Database user created on first init
POSTGRES_PASSWORDYes—Password for POSTGRES_USER
POSTGRES_DBYes—Database name created on first init
TZNo—Container timezone (e.g. Europe/Madrid)
POSTGRES_HOST_AUTH_METHODNoscram-sha-256Auth method (dev stacks sometimes use trust)

Backend DATABASE_URL must match these credentials and use a hostname reachable from the backend (tobealert-bbdd in Compose, not localhost).

Slow database?

When ToBeAlert uses an external PostgreSQL server, Management → Diagnostics times the real alert queries, checks shared_buffers, effective_cache_size, work_mem, autovacuum, connections, dead tuples and missing indexes, and names the likely bottleneck. Run it before and after tuning postgresql.conf.


Backend — overview​

CategoryVariables / keysPurpose
BootstrapADMIN_USER, ADMIN_PASSWORDFirst UI superadmin
API adminAPI_ADMIN_USER, API_ADMIN_PASSWORDHTTP Basic Auth on selected admin API routes
Runtime envSubset loaded via get_config()Safe to set as Docker/K8s env
Additional envEntrypoint / CLI / webhooksRead outside the main loader
Conf / Backend ConfigTimeouts, housekeeping, logging, templates, …File or UI — not env unless listed above

Two different “admin” credentials​

UI superadminAPI admin
VariablesADMIN_USER, ADMIN_PASSWORDAPI_ADMIN_USER, API_ADMIN_PASSWORD
Used forWeb UI login; created by entrypoint once (password is not re-read from env)HTTP Basic Auth on admin API endpoints
DefaultMust be set in Compose/K8sImage default admin / admin — change in production

Bootstrap (first container start)​

These variables are read by the backend entrypoint, not from tobealertd.conf.

ADMIN_PASSWORD applies only on first user creation

The bootstrap UI user (ADMIN_USER, typically tbadmin) is created once: the first time the backend starts and that login is not already in PostgreSQL.

ADMIN_PASSWORD is hashed into the database at that moment. After the user exists, changing the env var (Compose, Kubernetes, systemd, .env) has no effect — the entrypoint skips creation and never updates the stored password.

Set a strong ADMIN_PASSWORD before the first backend start. To change it later, use Access Control → Users → Change password (Managing users), not the environment variable.

VariableRequiredDescription
ADMIN_USERYesUsername for the bootstrap superadmin (also seeds ADMIN_USERS at runtime)
ADMIN_PASSWORDYesPassword used only when the bootstrap user is first created
CELERY_WORKER_CONCURRENCYNoWorker concurrency (default 1)

API admin (HTTP Basic Auth)​

VariableRequiredDefaultDescription
API_ADMIN_USERRecommendedadminHTTP Basic Auth username
API_ADMIN_PASSWORDRecommendedadminHTTP Basic Auth password

Backend — runtime environment variables​

These keys are reloaded at backend startup from the environment (overriding conf for the same key).

General and security​

VariableDefaultDescription
DEBUGfalseDebug mode. Prefer this over legacy TOBEALERT_DEBUG / FLASK_DEBUG.
TZUTCClock for scheduled tasks and timestamps. Set TZ. Default UTC. A leftover TIMEZONE key is ignored.
SECRET_KEY''Signing key for sessions/JWT. Usually auto-generated on first start if conf contains CHANGEME.
BASE_URL''Public base URL of the backend (absolute links)
TRUST_PROXY_HEADERStrueTrust X-Forwarded-* behind a reverse proxy

Database and Redis​

VariableDefaultDescription
DATABASE_URLpostgres://tobealert-bbdd:5432 (loader)PostgreSQL connection URL
DATABASE_NAMEtobealertDatabase name
DATABASE_SCHEMApublicPostgreSQL schema
REDIS_HOSTlocalhostRedis hostname (Compose service name, e.g. tobealert-redis)
REDIS_PORT6379Redis TCP port
CELERY_RESULT_EXPIRES300TTL (seconds) for Celery task results

Redis database indices used by the backend are fixed in code (broker 0, result backend 1, alerts cache 2, healthcheck 3). They are not configurable.

Authentication and users​

VariableDefaultDescription
AUTH_REQUIREDtrueRequire authentication for API access
ADMIN_USERS[ADMIN_USER]Comma-separated admin usernames
SIGNUP_ENABLEDtrueAllow user self-registration
LOCAL_LOGIN_ENABLEDtrueEnable local username/password login
ALLOWED_EMAIL_DOMAINS* / []Comma-separated allowed email domains for signup
CORS_ORIGINSsee settings.pyAllowed browser origins for Flask-CORS (comma-separated in env)

LDAP and SAML use external auth providers in the UI / API (auth_providers). They are not configured with global LDAP_* / SAML2_* environment variables.

Mail (SMTP) — app-internal only​

Used for signup verification / password reset — not for alert notification methods (those have their own SMTP in Notifications).

VariableDefaultDescription
MAIL_FROM—Sender email address
SMTP_HOSTsmtp.office365.comSMTP server hostname
SMTP_PORT587SMTP port
SMTP_PASSWORD—SMTP password
SMTP_STARTTLStrueEnable STARTTLS
SMTP_USE_SSLfalseUse SSL/TLS for SMTP

SMTP_USERNAME is set in tobealertd.conf / Backend Config only (not as env).

Plugins and retention (env-capable)​

VariableDefaultDescription
PLUGINSsee conf templateComma-separated plugin names
WORKFLOWS_ENABLEDfalseEnable workflow execution
DELETE_EXPIRED_AFTER7200Delete closed or expired after N seconds since last_receive_time (0 = never). See Alert lifecycle.
DELETE_INFO_AFTER43200Delete informational-severity alerts after N seconds (0 = never)
TOOL_HISTORY_RETENTION_DAYS30Delete tool executions older than N days (0 = never). Also in Backend Config.
POLICY_HISTORY_RETENTION_DAYS30Delete policy executions older than N days (0 = never). Also in Backend Config.
NOTIFICATION_HISTORY_RETENTION_DAYS30Delete notification rule executions older than N days (0 = never). Also in Backend Config.
DEFAULT_EXPIRED_DELETE_HRS / HK_EXPIRED_DELETE_HRS0Legacy hours. If non-zero, they override DELETE_EXPIRED_AFTER (converted to seconds). Prefer seconds.
DEFAULT_INFO_DELETE_HRS / HK_INFO_DELETE_HRS0Legacy hours for informational delete — same override behaviour
DEMO_MODEfalseEnable demo mode
DEMO_CLEANUP_HOURS24Demo data retention (hours)
QA_MODEfalseEnable QA mode flag
FLAPPING_TIME_WINDOW60Flapping detection window (minutes)
FLAPPING_CHANGE_THRESHOLD4Status changes before marking flapping
INSTRUCTION_LINK_TEMPLATEevent-based templateBuilds the wiki path from alert fields (default uses the alert event; see Instructions from alerts)
NOTIFICATION_DELAY—Delay-plugin fallback in minutes (not a notification hold). See Backend Config.

Prefer NOTIFICATION_DELAY (minutes) in conf / Backend Config. An integer minutesDelayed on the alert payload (including 0) overrides this value.


Backend — additional environment variables​

Read outside (or in addition to) the main configuration loader.

VariableDefaultDescription
TOBEALERT_DEBUGfalseLegacy debug alias — prefer DEBUG
FLASK_DEBUG—Legacy; can affect log formatting
TOBEALERT_SKIP_PERMISSION_CHECKfalseSkip filesystem permission checks (development only)
ALERTA_SVR_CONF_FILE—Path to an additional configuration file loaded after tobealertd.conf
SSL_CERT / SSL_KEY—PEM paths inside the backend container for HTTPS on port 9000. See HTTPS and TLS.
TOBEALERT_ENDPOINThttp://localhost:9000/apiDefault API URL for the CLI client
ALERTA_API_KEY—API key for the CLI client
NOTIFY_<name> / NOTIFY_PARAMETER_<name>—PostgreSQL NOTIFY script channels / parameters
NO_COLOR / TOBEALERT_STARTUP_NO_COLOR—Disable colour in startup logs
FLASK_SKIP_DOTENV1 (image)Disable automatic .env loading — leave as-is

Configuration file (tobealertd.conf)​

Python-style KEY = value file. Use for options that are not in the runtime env list, or when you prefer file-based / UI-managed config.

Template: /tobealert/config/tobealertd.conf.example

Many of these are also editable under Management → Backend Config. Prefer the UI for day-to-day changes.

Alert timeouts and housekeeping (file / UI — not env)​

KeyDefaultDescription
ALERT_TIMEOUT86400Default alert timeout (s). After last_receive_time + timeout, status → expired.
ACK_TIMEOUT0Auto-unack after N seconds (0 = off)
SHELVE_TIMEOUT7200Auto-unshelve after N seconds (0 = off)
HEARTBEAT_TIMEOUT86400Heartbeat timeout (s)
HEARTBEAT_MAX_LATENCY2000Max heartbeat latency (ms)
CLEANUP_FREQUENCY3600How often run_housekeeping runs (s). Not the retention age.
ENABLEDtrueMaster switch for run_housekeeping only
TOOL_HISTORY_RETENTION_DAYS30Delete tool executions older than N days (0 = never). Env, conf, or Backend Config.
POLICY_HISTORY_RETENTION_DAYS30Delete policy executions older than N days (0 = never). Env, conf, or Backend Config.
NOTIFICATION_HISTORY_RETENTION_DAYS30Delete notification rule executions older than N days (0 = never). Env, conf, or Backend Config.
DELETE_EXPIRED_AFTER7200Also settable as env — see lifecycle
DELETE_INFO_AFTER43200Also settable as env
NOTIFICATION_DELAY2Delay-plugin fallback (minutes). Prefer this key in conf/UI. Payload minutesDelayed (integer) overrides it.

Logging​

KeyDefaultDescription
LOG_CONFIG_FILE''External logging config file
LOG_HANDLERSconsole,fileLog handlers
LOG_FILE/tobealert/logs/tobealertd.logMain log file path
TASKS_LOG_FILE/tobealert/logs/tasks.logBackground tasks log
PLUGINS_LOG_FILE/tobealert/logs/plugins.logPlugins log
NOTIFICATIONS_LOG_FILE/tobealert/logs/notifications.logNotifications log
LOG_LEVELWARNINGDEBUG, INFO, WARNING, ERROR, CRITICAL
LOG_MAX_BYTES10485760Max log file size before rotation
LOG_BACKUP_COUNT2Rotated log files to keep
LOG_FORMATdefaultLog format name
LOG_FACILITYlocal7Syslog facility
LOG_METHODSHTTP methods listMethods to log

API, roles, tokens, audit​

KeyDefaultDescription
ALARM_MODELALERTAALERTA or ISA_18_2
DEFAULT_PAGE_SIZE50Default page size for paginated APIs
ADMIN_ROLESadminRole names treated as admin
DEFAULT_USER_ROLEuserDefault role for new users
USER_ROLESuserValid roles
USER_DEFAULT_SCOPESread,writeDefault API scopes
TOKEN_EXPIRE_DAYS14User JWT lifetime (days)
API_KEY_EXPIRE_DAYS365API key lifetime (days)
AUDIT_TRAILadminAudit categories: admin, write, auth
AUDIT_LOG—Log audit events to application log
AUDIT_LOG_REDACTtrueRedact sensitive fields in audit log
AUDIT_URL—Webhook URL for audit events

Auth proxy​

KeyDefaultDescription
AUTH_PROXYfalseEnable reverse-proxy authentication
AUTH_PROXY_USER_HEADERX-Proxy-UserHeader with authenticated username
AUTH_PROXY_ROLES_HEADERX-Proxy-RolesHeader with role list
AUTH_PROXY_ROLES_SEPARATOR,Separator for roles header
AUTH_PROXY_AUTO_SIGNUPtrueAuto-create users from proxy auth

Email (file / UI)​

KeyDescription
EMAIL_VERIFICATIONRequire email verification on signup
SMTP_USERNAMESMTP username
MAIL_LOCALHOSTHELO/EHLO hostname
SSL_KEY_FILE / SSL_CERT_FILESMTP client SSL material

Server version and templates (file)​

Alert list chrome — columns, sort, default filter, auto-refresh, site logo, date formats, default sound, font — is not configured in tobealertd.conf. Those choices live in the web console. Old Alerta keys left in a conf file are loaded by Flask but ignored by the product; see What not to keep.

These keys remain valid in the settings file (INSTRUCTION_LINK_TEMPLATE is also runtime env):

KeyDescription
SERVER_VERSIONShow server version: full, major, off
INSTRUCTION_LINK_TEMPLATEBuilds the wiki path from alert fields (default uses the alert event; see Instructions from alerts)

Optional limits (file)​

KeyDefaultDescription
SCHEDULED_POLICIES_ALERT_QUERYinternal defaultQuery used by scheduled policies
SCHEDULED_POLICIES_ALERT_LIMIT1000Max alerts per scheduled-policy run
RECURRING_NOTIFICATIONS_ALERT_LIMIT1000Max alerts per recurring-notification pass

Self-monitoring and health (file / UI)​

Scheduled self-checks that raise alerts inside ToBeAlert, and the token of the deep external health check. Also editable under Management → Backend Config → Self-monitoring and health; not read from the environment. Details in Diagnostics — Self-monitoring and External health endpoint.

KeyDefaultDescription
SELF_MONITORING_ENABLEDFalseRun the light diagnostics probes on a schedule and raise an alert per failing probe (origin self-monitoring)
SELF_MONITORING_INTERVAL300Seconds between runs. Minimum 60 (lower values are treated as 60).
SELF_MONITORING_ENVIRONMENT'ToBeAlert'environment of the generated alerts
SELF_MONITORING_SERVICE'tobealert'service of the generated alerts
HEALTHCHECK_TOKEN''Token an external monitor sends as X-Health-Token (or ?token=) to call GET /api/health?deep=1. Empty = deep mode disabled (403). The shallow GET /api/health needs no token.

The Celery workers read SELF_MONITORING_* when they start: restart the backend container after enabling self-monitoring on a running installation.

SNMP traps​

SNMP trap ingestion is handled by the ToBeAlert collector, not the API process. Do not put SNMP_TRAP_* keys in tobealertd.conf — the backend ignores them.


What not to keep / common mistakes​

ItemWhy
DELETE_CLOSED_AFTER / DELETE_RESOLVED_AFTER / DELETE_CLEARED_AFTERRemoved from defaults; if still in an old conf file they are ignored. Closed alerts use DELETE_EXPIRED_AFTER.
DEFAULT_*_DELETE_HRS / HK_*_DELETE_HRSLegacy hour-based overrides. Prefer DELETE_*_AFTER in seconds. If hours ≠ 0 they win and confuse operators.
Alerta leftovers: SITE_LOGO_URL, DATE_FORMAT_LONG_DATE, DATE_FORMAT_MEDIUM_DATE, DATE_FORMAT_SHORT_TIME, DEFAULT_AUDIO_FILE, COLUMNS, SORT_LIST_BY, DEFAULT_FILTER, ASI_SEVERITY, ASI_QUERIES, DEFAULT_FONT, AUTO_REFRESH_INTERVAL, ROUTING_DIST, FWD_DESTINATIONS, CLIPBOARD_TEMPLATERemoved from defaults. If they remain in an old tobealertd.conf, Flask still loads them but the product ignores them. Do not treat them as live settings. Alert list chrome is not configured here. SPA clipboard copy does not use a server template.
HISTORY_LIMIT, HISTORY_ON_VALUE_CHANGE, DEFAULT_FIELD, ACTIONSRemoved from defaults and from the config loader. Not live settings.
NOTIFICATION_SEVERITIESRemoved. Built-in mail paths do not read this key.
ORIGIN_BLACKLISTRemoved. Not a live reject list.
BLACKOUT_DURATION, NOTIFICATION_BLACKOUT, BLACKOUT_ACCEPTRemoved. Blackout behaviour is not configured with these keys.
GRAFANA_TAGS_AS_ATTRIBUTES, GRAFANA_TAGS_AS_TAGSRemoved Grafana ingest leftovers. Not live settings.
POLICY_CONTAINER_PATHRemoved. Not a live setting.
REDIS_DB_ALERTS (or any REDIS_DB_* override)Redis indices are fixed (0/1/2/3). This is not a configurable key.
CELERY as a conf dictNot an editable setting. The process rebuilds the Celery app; use CELERY_WORKER_CONCURRENCY / CELERY_RESULT_EXPIRES only.
SNMP_TRAP_* in backend confIgnored by the API — configure traps on the collector.
TIMEZONE (conf or TIMEZONE= env)Removed from defaults and the loader. Leftover only — do not use. Set TZ.
ALLOWED_ENVIRONMENTS, DEFAULT_ENVIRONMENTRemoved from defaults and the loader. Leftover Flask/env only — the product ignores them.
QUERY_LIMITRemoved. Runtime lists use DEFAULT_PAGE_SIZE (50). GET /config does not expose query_limit.
DELAY_NOTIFICATIONRemoved alias. Leftover Flask/env only — the product ignores it. Use NOTIFICATION_DELAY.
TELEGRAM_TOKEN, TELEGRAM_CHAT_ID, DASHBOARD_URLRemoved. The inbound Alerta Telegram webhook is gone. Leftover Flask/env only — the product ignores them. Notifications Telegram is configured as UI methods, not these env keys.
ALERT_TIMEOUT= / CLEANUP_FREQUENCY= as Docker envNot read from env — use conf or Backend Config.
Global LDAP_* / SAML2_*Replaced by External auth providers in the UI.
Expecting ENABLED=false to stop expiryOnly stops housekeeping deletes; expire_alerts still runs.

Minimal Docker Compose example​

services:
tobealert-bbdd:
image: postgres:17.5-alpine
environment:
POSTGRES_USER: tobealert
POSTGRES_PASSWORD: tobealert
POSTGRES_DB: tobealert
TZ: Europe/Madrid

tobealert-redis:
image: redis:latest

tobealert-backend:
image: tobek8s/tobealert-backend:latest
environment:
ADMIN_USER: tbadmin
ADMIN_PASSWORD: changeme
API_ADMIN_USER: apiadmin
API_ADMIN_PASSWORD: changeme-api
DATABASE_URL: postgres://tobealert:tobealert@tobealert-bbdd:5432/tobealert
REDIS_HOST: tobealert-redis
REDIS_PORT: "6379"
TZ: Europe/Madrid
# Retention CAN be set as env (these keys are in get_config):
# DELETE_EXPIRED_AFTER: "7200"
# DELETE_INFO_AFTER: "43200"
# Alert timeout / cleanup frequency: set in tobealertd.conf or Backend Config — NOT here.

tobealert-frontend:
image: tobek8s/tobealert-frontend:latest
environment:
BASE_URL: http://localhost
API_URL: http://localhost:9000
BACKEND_SERVICE: tobealert-backend
BACKEND_PORT: "9000"

Replace placeholder passwords before production use.