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

Production Hardening

APP_DEBUG=false
LOG_CHANNEL=stderr

Database Security


Related Documentation