This page documents the environment variables and configuration values used by OPBX.
Environment Variables
Core Application
| Variable | Default | Description |
|---|
APP_NAME | OPBX - Open Source Business PBX | Application name |
APP_ENV | production | Environment mode |
APP_KEY | — | Encryption key. Generate with php artisan key:generate |
APP_DEBUG | false | Enable debug mode |
APP_URL | https://your-domain.com | Base URL |
APP_PORT | 80 | Host port for Nginx |
APP_LOCALE | en | Default locale |
Application Mode
| Variable | Default | Description |
|---|
OPBX_APPLICATION_MODE | development | development or production (SaaS) |
OPBX_APPLICATION_WEBHOOK_BASEURL | — | Application-level webhook base URL |
Database
| Variable | Default | Description |
|---|
DB_CONNECTION | mysql | Database driver |
DB_HOST | mysql | Database host |
DB_PORT | 3306 | Database port |
DB_DATABASE | opbx | Database name |
DB_USERNAME | opbx | Database user |
DB_PASSWORD | — | Database password |
DB_ROOT_PASSWORD | — | MySQL root password |
DB_EXPOSE_PORT | — | Expose MySQL port to host (dev only) |
Redis
| Variable | Default | Description |
|---|
REDIS_CLIENT | phpredis | PHP Redis client |
REDIS_HOST | redis | Redis host |
REDIS_PORT | 6379 | Redis port |
REDIS_PASSWORD | — | Redis password |
REDIS_DB | 0 | Default database |
REDIS_EXPOSE_PORT | — | Expose Redis port to host (dev only) |
Session / Sanctum
| Variable | Default | Description |
|---|
SESSION_DRIVER | redis | Session storage |
SESSION_LIFETIME | 120 | Session lifetime (minutes) |
SANCTUM_STATEFUL_DOMAINS | localhost:3000,127.0.0.1:3000 | Cookie auth domains |
SANCTUM_EXPIRATION | 1440 | Token expiration (minutes) |
Broadcasting / WebSockets
| Variable | Default | Description |
|---|
BROADCAST_DRIVER | pusher | Broadcasting driver |
PUSHER_APP_ID | app-id | Soketi app ID |
PUSHER_APP_KEY | pbxappkey | Soketi app key |
PUSHER_APP_SECRET | — | Soketi app secret |
PUSHER_HOST | soketi | Soketi host |
PUSHER_PORT | 6001 | Soketi port |
PUSHER_SCHEME | http | |
SOKETI_PORT | 6001 | Host port for Soketi |
SOKETI_METRICS_PORT | 9601 | Host port for Soketi metrics |
Frontend (Vite)
| Variable | Default | Description |
|---|
FRONTEND_PORT | 3000 | Host port for Vite dev server |
FRONTEND_URL | http://localhost:3000 | |
VITE_API_BASE_URL | /api/v1 | API base path |
VITE_WS_HOST | localhost | WebSocket host |
VITE_WS_PORT | 6001 | WebSocket port |
VITE_WS_SCHEME | http | WebSocket scheme |
MinIO / S3 Storage
| Variable | Default | Description |
|---|
MINIO_ACCESS_KEY | minioadmin | MinIO root user |
MINIO_SECRET_KEY | minioadmin | MinIO root password |
MINIO_REGION | us-east-1 | |
MINIO_BUCKET | recordings | Default bucket |
MINIO_ENDPOINT | http://minio:9000 | |
MINIO_USE_PATH_STYLE | true | |
MINIO_EXPOSE_PORT | — | Expose MinIO API port (dev only) |
MINIO_CONSOLE_EXPOSE_PORT | — | Expose MinIO console port (dev only) |
Cloudonix CPaaS
| Variable | Default | Description |
|---|
CLOUDONIX_API_BASE_URL | https://api.cloudonix.io | Cloudonix API base URL |
CLOUDONIX_API_TIMEOUT | 30 | API timeout |
CLOUDONIX_SIP_SERVER | sip.cloudonix.io | SIP server |
Per-organization credentials are stored in cloudonix_settings.
Webhooks / Rate Limiting
| Variable | Default | Description |
|---|
RATE_LIMIT_API | 60 | API requests per minute |
RATE_LIMIT_WEBHOOKS | 100 | Webhook requests per minute |
RATE_LIMIT_VOICE | 1000 | Voice requests per minute |
RATE_LIMIT_SENSITIVE | 10 | Sensitive operations per minute |
RATE_LIMIT_SENSITIVE_ADMIN | 60 | Admin sensitive operations |
RATE_LIMIT_AUTH | 5 | Auth attempts per minute |
CLOUDONIX_CDR_AUTH_KEY | — | Optional CDR auth key |
Voice Routing
| Variable | Default | Description |
|---|
VOICE_CACHE_EXTENSION_TTL | 1800 | Extension cache TTL (seconds) |
VOICE_CACHE_BUSINESS_HOURS_TTL | 900 | Business hours cache TTL |
VOICE_LOCK_TIMEOUT | 30 | Lock timeout |
VOICE_LOCK_BLOCK | 3 | Lock block time |
VOICE_MAX_RETRIES | 3 | Max retries |
VOICE_IDEMPOTENCY_TTL | 3600 | Idempotency TTL |
VOICE_NO_ANSWER_TIMEOUT | 30 | No-answer timeout |
CXML_DEFAULT_TIMEOUT | 30 | CXML default timeout |
Circuit Breaker
| Variable | Default | Description |
|---|
CIRCUIT_BREAKER_ENABLED | true | Enable circuit breaker |
CIRCUIT_BREAKER_CLOUDONIX_THRESHOLD | 5 | Failure threshold |
CIRCUIT_BREAKER_CLOUDONIX_TIMEOUT | 30 | Timeout (seconds) |
CIRCUIT_BREAKER_CLOUDONIX_RETRY_AFTER | 60 | Retry after (seconds) |
Dialer Worker
| Variable | Default | Description |
|---|
DIALER_WORKER_ID | worker-1 | Worker identifier |
DIALER_LARAVEL_API_URL | http://nginx | Laravel API URL |
DIALER_WORKER_API_TOKEN | — | Worker auth token |
DIALER_WEBHOOK_PORT | 8081 | Worker webhook port |
DIALER_WEBHOOK_SECRET | — | HMAC secret for CDR webhooks |
DIALER_POLL_INTERVAL | 10s | Campaign poll interval |
AMD Worker
| Variable | Default | Description |
|---|
AMD_WORKER_API_TOKEN | — | Callback auth token |
AMD_MAX_CONCURRENT_STREAMS | 100 | Max streams |
AMD_DUMP_AUDIO | false | Dump audio to WAV |
AMD_DUMP_AUDIO_PATH | /tmp/amd-dumps | Dump directory |
ngrok
| Variable | Default | Description |
|---|
NGROK_AUTHTOKEN | — | ngrok authtoken |
NGROK_DOMAIN | — | Custom domain (paid plans) |
UserCheck
| Variable | Default | Description |
|---|
USERCHECK_ENABLED | true | Enable email validation |
USERCHECK_API_TOKEN | — | API token |
USERCHECK_BASE_URL | https://api.usercheck.com | |
USERCHECK_TIMEOUT | 5 | |
reCAPTCHA
| Variable | Default | Description |
|---|
RECAPTCHA_ENABLED | false | Enable reCAPTCHA v3 |
RECAPTCHA_SITE_KEY | — | |
RECAPTCHA_SECRET_KEY | — | |
RECAPTCHA_MIN_SCORE | 0.5 | |
Transactional Email
| Variable | Default | Description |
|---|
EMAIL_PROVIDER | mailgun | Enabled provider |
EMAIL_QUEUE | default | Queue for email jobs |
EMAIL_TRACK_OPENS | true | |
EMAIL_TRACK_CLICKS | true | |
MAIL_MAILER | smtp | Mail driver |
MAIL_HOST | mailpit | SMTP host |
MAIL_PORT | 1025 | SMTP port |
MAIL_FROM_ADDRESS | noreply@your-domain.com | |
MAIL_FROM_NAME | ${APP_NAME} | |
Provider-specific variables are in .env.example for Mailgun, Mailjet, MailerLite, and SendInBlue/Brevo.
Logging
| Variable | Default | Description |
|---|
LOG_CHANNEL | stack | |
LOG_LEVEL | info | |
Health Check Endpoints
| Endpoint | Purpose |
|---|
/api/health | Public API health |
/api/storage/health | Storage health (auth required) |
/api/websocket/health | WebSocket health (auth required) |
/webhooks/health | Dialer worker health |
/health (amd-worker:8083) | AMD worker health |
Docker Services
| Service | Container | Purpose |
|---|
app | opbx_app | Laravel PHP-FPM |
nginx | opbx_nginx | Reverse proxy |
frontend | opbx_frontend | Vite dev server |
mysql | opbx_mysql | MySQL 8 |
redis | opbx_redis | Cache, sessions, queues |
minio | opbx_minio | Object storage |
soketi | opbx_websocket | WebSocket server |
queue-worker | opbx_queue_worker | Queue worker |
scheduler | opbx_scheduler | Task scheduler |
dialer-worker | opbx_dialer_worker | Go dialer worker |
amd-worker | opbx_amd_worker | Java AMD worker |
ngrok | opbx_ngrok | Webhook tunnel (dev) |