Configuration Reference
Version: 1.0.0
This document describes all environment variables and configuration options for notifito.
Environment Variables
Core Application (apps/core)
| Variable |
Required |
Default |
Description |
APP_NAME |
No |
Laravel |
Application name |
APP_ENV |
No |
local |
Environment (local, production, testing) |
APP_KEY |
Yes |
— |
Laravel encryption key (32 chars, base64) |
APP_DEBUG |
No |
true |
Enable debug mode |
APP_URL |
Yes |
— |
Application URL (e.g., https://core.notifito.com) |
APP_TIMEZONE |
No |
UTC |
Application timezone |
LOG_CHANNEL |
No |
stack |
Log channel (stack, stderr, single) |
DB_CONNECTION |
No |
pgsql |
Database driver |
DB_HOST |
Yes |
postgres |
PostgreSQL host |
DB_PORT |
Yes |
5432 |
PostgreSQL port |
DB_DATABASE |
Yes |
notifito_core |
Database name |
DB_USERNAME |
Yes |
notifito |
Database user |
DB_PASSWORD |
Yes |
notifito |
Database password |
REDIS_HOST |
Yes |
redis |
Redis host |
REDIS_PORT |
Yes |
6379 |
Redis port |
CACHE_STORE |
No |
redis |
Cache driver |
QUEUE_CONNECTION |
No |
redis |
Queue driver |
SESSION_DRIVER |
No |
redis |
Session driver |
INTERNAL_SECRET |
Yes |
— |
Shared secret for internal API |
EDGE_URL |
Yes |
— |
Edge service URL for building links |
Edge Application (apps/edge)
| Variable |
Required |
Default |
Description |
APP_NAME |
No |
Laravel |
Application name |
APP_ENV |
No |
local |
Environment |
APP_KEY |
Yes |
— |
Laravel encryption key |
APP_DEBUG |
No |
true |
Enable debug mode |
APP_URL |
Yes |
— |
Application URL |
LOG_CHANNEL |
No |
stack |
Log channel |
DB_CONNECTION |
No |
pgsql |
Database driver |
DB_HOST |
Yes |
postgres |
PostgreSQL host |
DB_PORT |
Yes |
5432 |
PostgreSQL port |
DB_DATABASE |
Yes |
notifito_core |
Database name (shares with core) |
DB_USERNAME |
Yes |
notifito |
Database user |
DB_PASSWORD |
Yes |
notifito |
Database password |
REDIS_HOST |
Yes |
redis |
Redis host |
REDIS_PORT |
Yes |
6379 |
Redis port |
CACHE_STORE |
No |
redis |
Cache driver |
QUEUE_CONNECTION |
No |
redis |
Queue driver |
INTERNAL_SECRET |
Yes |
— |
Shared secret for internal API |
Dispatch Application (apps/dispatch)
| Variable |
Required |
Default |
Description |
APP_NAME |
No |
Laravel |
Application name |
APP_ENV |
No |
local |
Environment |
APP_KEY |
Yes |
— |
Laravel encryption key |
APP_DEBUG |
No |
true |
Enable debug mode |
APP_URL |
Yes |
— |
Application URL |
LOG_CHANNEL |
No |
stack |
Log channel |
DB_CONNECTION |
No |
pgsql |
Database driver |
DB_HOST |
Yes |
postgres |
PostgreSQL host |
DB_PORT |
Yes |
5432 |
PostgreSQL port |
DB_DATABASE |
Yes |
notifito_dispatch |
Database name |
DB_USERNAME |
Yes |
notifito |
Database user |
DB_PASSWORD |
Yes |
notifito |
Database password |
REDIS_HOST |
Yes |
redis |
Redis host |
REDIS_PORT |
Yes |
6379 |
Redis port |
CACHE_STORE |
No |
redis |
Cache driver |
QUEUE_CONNECTION |
No |
redis |
Queue driver |
POSTMARK_TOKEN |
Yes |
— |
Postmark API token |
POSTMARK_BASE_URL |
No |
https://api.postmarkapp.com |
Postmark API URL |
Dashboard Application (apps/dashboard)
| Variable |
Required |
Default |
Description |
APP_NAME |
No |
Laravel |
Application name |
APP_ENV |
No |
local |
Environment |
APP_KEY |
Yes |
— |
Laravel encryption key |
APP_DEBUG |
No |
true |
Enable debug mode |
APP_URL |
Yes |
— |
Application URL |
LOG_CHANNEL |
No |
stack |
Log channel |
DB_CONNECTION |
No |
null |
Database driver (dashboard has no database) |
REDIS_HOST |
Yes |
redis |
Redis host |
REDIS_PORT |
Yes |
6379 |
Redis port |
CACHE_STORE |
No |
redis |
Cache driver |
SESSION_DRIVER |
No |
redis |
Session driver |
QUEUE_CONNECTION |
No |
sync |
Queue driver |
CORE_URL |
Yes |
— |
Core service URL |
EDGE_URL |
Yes |
— |
Edge service URL |
INTERNAL_SECRET |
Yes |
— |
Shared secret for internal API |
Docker Compose Configuration
Service Definitions
services:
tools:
# Development container with PHP, Composer, Node.js
postgres:
# PostgreSQL 18 database
image: postgres:18-alpine
ports: ["55432:5432"]
redis:
# Redis 8 cache/queue
image: redis:8-alpine
ports: ["56379:6379"]
core:
# Core domain service
command: php artisan serve --host=0.0.0.0 --port=8000
edge:
# Public API service
command: php artisan serve --host=0.0.0.0 --port=8000
ports: ["8002:8000"]
dispatch:
# Email delivery service
command: php artisan serve --host=0.0.0.0 --port=8000
dashboard:
# Seller UI service
command: php artisan serve --host=0.0.0.0 --port=8000
core-horizon:
# Core queue worker (Horizon)
command: php artisan horizon
dispatch-horizon:
# Dispatch queue worker (Horizon)
command: php artisan horizon
core-outbox:
# Outbox relay
command: php artisan outbox:relay
caddy:
# Reverse proxy
image: caddy:2-alpine
ports: ["80:80"]
Volume Mounts
volumes:
pgdata:
# PostgreSQL data persistence
composer-cache:
# Composer package cache
caddy-data:
# Caddy SSL certificates
Horizon Configuration
Core Horizon (apps/core/config/horizon.php)
'environments' => [
'production' => [
'supervisor-matching' => [
'connection' => 'redis',
'queue' => ['core-matching'],
'balance' => 'auto',
'minProcesses' => 1,
'maxProcesses' => 6,
'tries' => 5,
'timeout' => 120,
],
'supervisor-delivery' => [
'connection' => 'redis',
'queue' => ['core-delivery'],
'balance' => 'auto',
'minProcesses' => 1,
'maxProcesses' => 3,
'tries' => 5,
'timeout' => 60,
],
],
],
Dispatch Horizon (apps/dispatch/config/horizon.php)
'environments' => [
'production' => [
'supervisor-send' => [
'connection' => 'redis',
'queue' => ['dispatch-send'],
'balance' => 'auto',
'minProcesses' => 1,
'maxProcesses' => 10,
'tries' => 6,
'backoff' => [60, 300, 900, 3600, 10800],
'timeout' => 60,
],
],
],
Caddy Configuration
Caddyfile
{
auto_https on
admin off
}
edge.notifito.com {
reverse_proxy edge:8000
}
app.notifito.com {
reverse_proxy dashboard:8000
}
cdn.notifito.com {
root * /srv/widget
header Cache-Control "public, max-age=300"
header Access-Control-Allow-Origin "*"
file_server
}
Domain Routing
| Domain |
Service |
Purpose |
edge.notifito.com |
edge |
Public API |
app.notifito.com |
dashboard |
Seller UI |
cdn.notifito.com |
static files |
Widget bundle |
Queue Configuration
Queue Connections
// apps/core/config/queue.php
'connections' => [
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'core-matching,core-delivery',
'retry_after' => 300,
],
],
Queue Names
| Queue |
Service |
Purpose |
core-matching |
core |
Availability matching |
core-delivery |
core |
Delivery status updates |
dispatch-send |
dispatch |
Email sending |
Database Configuration
Connection Settings
// apps/core/config/database.php
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', 'postgres'),
'port' => env('DB_PORT', '5432'),
'database' => env('DB_DATABASE', 'notifito_core'),
'username' => env('DB_USERNAME', 'notifito'),
'password' => env('DB_PASSWORD', 'notifito'),
'charset' => 'utf8',
'prefix' => '',
'search_path' => 'public',
],
Database Names
| Service |
Database |
Purpose |
| core |
notifito_core |
Domain data |
| core (test) |
notifito_core_test |
Testing |
| dispatch |
notifito_dispatch |
Delivery data |
| dispatch (test) |
notifito_dispatch_test |
Testing |
Redis Configuration
Connection Settings
// config/database.php
'redis' => [
'default' => [
'host' => env('REDIS_HOST', 'redis'),
'password' => env('REDIS_PASSWORD'),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
],
Usage
| Purpose |
Database |
TTL |
| Cache |
0 |
Configurable |
| Queue |
0 |
— |
| Session |
0 |
120 min |
| Horizon |
0 |
— |
Notifito-Specific Configuration
apps/core/config/notifito.php
return [
'internal_secret' => env('INTERNAL_SECRET'),
'edge_url' => env('EDGE_URL'),
'subscription_expiry_days' => 90,
'confirmation_expiry_hours' => 72,
'cooldown_hours' => 24,
'capacity_multiple' => 3,
];
apps/dashboard/config/notifito.php
return [
'core_url' => env('CORE_URL'),
'edge_url' => env('EDGE_URL'),
'internal_secret' => env('INTERNAL_SECRET'),
];
Environment File Examples
Development (.env.local)
APP_NAME=notifito-core
APP_ENV=local
APP_KEY=base64:generated-key
APP_DEBUG=true
APP_URL=http://core:8000
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=notifito_core
DB_USERNAME=notifito
DB_PASSWORD=notifito
REDIS_HOST=redis
REDIS_PORT=6379
CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=array
INTERNAL_SECRET=dev-internal-secret
EDGE_URL=http://edge:8000
Production (.env.production)
APP_NAME=notifito-core
APP_ENV=production
APP_KEY=base64:strong-random-key
APP_DEBUG=false
APP_URL=https://core.notifito.com
LOG_CHANNEL=stderr
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=notifito_core
DB_USERNAME=notifito
DB_PASSWORD=strong-database-password
REDIS_HOST=redis
REDIS_PORT=6379
CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
INTERNAL_SECRET=strong-internal-secret
EDGE_URL=https://edge.notifito.com
Testing (.env.testing)
APP_NAME=notifito-core
APP_ENV=testing
APP_KEY=base64:test-key
APP_DEBUG=true
DB_CONNECTION=pgsql
DB_DATABASE=notifito_core_test
CACHE_STORE=array
QUEUE_CONNECTION=sync
SESSION_DRIVER=array
MAIL_MAILER=array
INTERNAL_SECRET=test-internal-secret
EDGE_URL=http://edge.test
Security Considerations
Secrets Management
- Never commit
.env files to version control
- Use strong, unique passwords for all services
- Generate random keys for
APP_KEY and INTERNAL_SECRET
- Rotate secrets periodically
Production Hardening
APP_DEBUG=false
LOG_CHANNEL=stderr
Database Security
- Use strong passwords
- Limit database access to application containers
- Enable SSL for database connections in production
Related Documentation