Skip to content

RawDigs Infrastructure MapΒΆ

Complete overview of the RawDigs microservices architecture, service connections, and data flow for Infrastructure as Code (IaC) implementation.

πŸ—οΈ Architecture OverviewΒΆ

graph TB
    subgraph "Client Layer"
        BROWSER[Web Browser]
        MOBILE[Mobile App]
    end

    subgraph "Application Layer"
        APP[Laravel Application<br/>:80]
        VITE[Vite Dev Server<br/>:5173]
        HORIZON[Horizon Dashboard<br/>/monitoring/horizon]
    end

    subgraph "Primary Data Layer"
        PGSQL[(PostgreSQL<br/>:5432<br/>App Database)]
    end

    subgraph "Monitoring Data Layer"
        MYSQL[(MySQL<br/>:3307<br/>Monitoring DB)]
    end

    subgraph "Cache Layer"
        MEMCACHED[(Memcached<br/>:11211<br/>Application Cache)]
    end

    subgraph "Session & Queue Layer"
        REDIS[(Redis<br/>:6379)]
        REDIS_DB0[DB 0: Default/General]
        REDIS_DB1[DB 1: Cache Store]
        REDIS_DB2[DB 2: Session Cache]
        REDIS_DB3[DB 3: Queues]

        REDIS --> REDIS_DB0
        REDIS --> REDIS_DB1
        REDIS --> REDIS_DB2
        REDIS --> REDIS_DB3
    end

    subgraph "Message Broker Layer"
        RABBITMQ[RabbitMQ<br/>:5672<br/>Management :15672]
    end

    subgraph "Search Layer"
        MEILISEARCH[Meilisearch<br/>:7700<br/>Full-Text Search]
    end

    subgraph "Storage Layer"
        MINIO[MinIO S3<br/>:9000<br/>Console :8900<br/>Object Storage]
        R2[Cloudflare R2<br/>Production Storage]
    end

    subgraph "Monitoring & Debugging"
        TELESCOPE[Telescope<br/>/telescope<br/>Debug Tool]
        PULSE[Pulse<br/>/pulse<br/>Performance Monitor]
    end

    subgraph "Security & Secrets"
        VAULT[HashiCorp Vault<br/>:8200<br/>Secrets Management]
    end

    subgraph "Development Tools"
        MAILPIT[Mailpit<br/>:8025<br/>Email Testing]
        DOCS[MkDocs<br/>:8000<br/>Documentation]
    end

    subgraph "External Microservices"
        AUDIO[Python Audio Service<br/>Audio Processing]
    end

    %% Client Connections
    BROWSER --> APP
    BROWSER --> VITE
    MOBILE --> APP

    %% App to Databases
    APP -->|Read/Write| PGSQL
    APP -->|Monitoring Data| MYSQL

    %% App to Cache/Session
    APP -->|Cache Ops| MEMCACHED
    APP -->|Sessions| REDIS_DB2
    APP -->|Queue Jobs| REDIS_DB3
    APP -->|General| REDIS_DB0

    %% App to Message Broker
    APP -->|Publish Events| RABBITMQ
    RABBITMQ -->|Consume Events| AUDIO

    %% App to Search
    APP -->|Index/Search| MEILISEARCH

    %% App to Storage
    APP -->|Store Files| MINIO
    APP -->|Production| R2
    AUDIO -->|Process Files| R2

    %% App to Monitoring
    TELESCOPE -->|Query| MYSQL
    PULSE -->|Query| MYSQL
    APP -->|Log Events| TELESCOPE
    APP -->|Record Metrics| PULSE

    %% App to Security
    APP -->|Fetch Secrets| VAULT

    %% Queue Processing
    HORIZON -->|Monitor| REDIS_DB3
    APP -->|Process| REDIS_DB3

    %% Dev Tools
    APP -->|Send Email| MAILPIT

    style APP fill:#4F46E5,stroke:#312E81,color:#fff
    style PGSQL fill:#336791,stroke:#1F4662,color:#fff
    style MYSQL fill:#00758F,stroke:#004D66,color:#fff
    style REDIS fill:#DC382D,stroke:#A6241C,color:#fff
    style RABBITMQ fill:#FF6600,stroke:#CC5200,color:#fff
    style VAULT fill:#FFD814,stroke:#CC9900,color:#000

πŸ”Œ Service Connection MatrixΒΆ

Service Connects To Protocol Port Purpose
Laravel App PostgreSQL TCP 5432 Primary database (users, media, etc.)
Laravel App MySQL Monitoring TCP 3307 Telescope & Pulse data
Laravel App Redis DB 0 TCP 6379 General purpose cache
Laravel App Redis DB 2 TCP 6379 User sessions
Laravel App Redis DB 3 TCP 6379 Job queues
Laravel App Memcached TCP 11211 Application cache
Laravel App RabbitMQ AMQP 5672 Message publishing
Laravel App Meilisearch HTTP 7700 Search indexing/queries
Laravel App MinIO S3 API 9000 File storage (dev)
Laravel App Vault HTTP 8200 Secret retrieval
Laravel App Mailpit SMTP 1025 Email delivery (dev)
Horizon Redis DB 3 TCP 6379 Queue monitoring
Telescope MySQL Monitoring TCP 3307 Debug data storage
Pulse MySQL Monitoring TCP 3307 Metrics storage
Audio Service RabbitMQ AMQP 5672 Event consumption
Audio Service Cloudflare R2 S3 API 443 Audio file processing

πŸ“Š Data Flow DiagramsΒΆ

User Request FlowΒΆ

sequenceDiagram
    participant Browser
    participant Laravel
    participant PostgreSQL
    participant Redis
    participant Memcached

    Browser->>Laravel: HTTP Request
    Laravel->>Redis: Check Session (DB 2)
    Redis-->>Laravel: Session Data

    Laravel->>Memcached: Check Cache
    alt Cache Hit
        Memcached-->>Laravel: Cached Data
    else Cache Miss
        Laravel->>PostgreSQL: Query Database
        PostgreSQL-->>Laravel: Data
        Laravel->>Memcached: Store in Cache
    end

    Laravel-->>Browser: HTTP Response

Job Queue FlowΒΆ

sequenceDiagram
    participant Laravel
    participant Redis
    participant Horizon
    participant Worker

    Laravel->>Redis: Dispatch Job (DB 3)
    Redis-->>Laravel: Job ID

    Horizon->>Redis: Monitor Queue
    Redis-->>Horizon: Queue Stats

    Worker->>Redis: Fetch Job
    Redis-->>Worker: Job Data
    Worker->>Worker: Process Job
    Worker->>Redis: Mark Complete

Media Upload & Processing FlowΒΆ

sequenceDiagram
    participant User
    participant Laravel
    participant MinIO
    participant RabbitMQ
    participant AudioService
    participant R2

    User->>Laravel: Upload Audio File
    Laravel->>MinIO: Store Raw File (Dev)
    Laravel->>PostgreSQL: Create Media Record
    Laravel->>RabbitMQ: Publish media.uploaded Event

    RabbitMQ->>AudioService: Consume Event
    AudioService->>R2: Download Raw File
    AudioService->>AudioService: Process Audio<br/>(Transcode, Analyze, Generate Waveform)
    AudioService->>R2: Upload Processed Files
    AudioService->>RabbitMQ: Publish media.processed Event

    RabbitMQ->>Laravel: Consume Event
    Laravel->>PostgreSQL: Update Media Record
    Laravel-->>User: Processing Complete Notification

Monitoring Data FlowΒΆ

sequenceDiagram
    participant Laravel
    participant Telescope
    participant Pulse
    participant MySQL
    participant Dashboard

    Laravel->>Telescope: Log Request/Query/Exception
    Telescope->>MySQL: Store Debug Entry (DB: monitoring)

    Laravel->>Pulse: Record Metric (Cache Hit, Slow Query, etc.)
    Pulse->>MySQL: Store Metric (DB: monitoring)

    Dashboard->>Telescope: View Debug Data
    Telescope->>MySQL: Query Entries
    MySQL-->>Dashboard: Debug Information

    Dashboard->>Pulse: View Metrics
    Pulse->>MySQL: Query Aggregates
    MySQL-->>Dashboard: Performance Data

πŸ—„οΈ Database ArchitectureΒΆ

PostgreSQL (Primary Database - Port 5432)ΒΆ

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         PostgreSQL Database             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Schema: public                         β”‚
β”‚                                         β”‚
β”‚  βœ“ users                                β”‚
β”‚  βœ“ roles                                β”‚
β”‚  βœ“ permissions                          β”‚
β”‚  βœ“ media                                β”‚
β”‚  βœ“ jobs                                 β”‚
β”‚  βœ“ failed_jobs                          β”‚
β”‚  βœ“ sessions                             β”‚
β”‚  βœ“ cache / cache_locks                  β”‚
β”‚  βœ“ migrations                           β”‚
β”‚                                         β”‚
β”‚  Total Tables: 15                       β”‚
β”‚  Size: ~320 KB                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

MySQL Monitoring (Port 3307)ΒΆ

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      MySQL Monitoring Database          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Database: monitoring                   β”‚
β”‚                                         β”‚
β”‚  Telescope Tables:                      β”‚
β”‚  βœ“ telescope_entries                    β”‚
β”‚  βœ“ telescope_entries_tags               β”‚
β”‚  βœ“ telescope_monitoring                 β”‚
β”‚                                         β”‚
β”‚  Pulse Tables:                          β”‚
β”‚  βœ“ pulse_values                         β”‚
β”‚  βœ“ pulse_entries                        β”‚
β”‚  βœ“ pulse_aggregates                     β”‚
β”‚                                         β”‚
β”‚  Total Tables: 6                        β”‚
β”‚  Size: ~192 KB                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Redis Database Layout (Port 6379)ΒΆ

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           Redis Databases               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  DB 0: Default / General                β”‚
β”‚  β”œβ”€ Prefix: rawdigs_                    β”‚
β”‚  └─ Purpose: General cache, locks       β”‚
β”‚                                         β”‚
β”‚  DB 1: Cache Store                      β”‚
β”‚  β”œβ”€ Prefix: cache:                      β”‚
β”‚  └─ Purpose: Cache tags, locks          β”‚
β”‚                                         β”‚
β”‚  DB 2: Session Cache                    β”‚
β”‚  β”œβ”€ Prefix: session:                    β”‚
β”‚  β”œβ”€ Purpose: Session cache layer        β”‚
β”‚  └─ Source of Truth: PostgreSQL         β”‚
β”‚                                         β”‚
β”‚  DB 3: Queues                           β”‚
β”‚  β”œβ”€ Prefix: queue:                      β”‚
β”‚  └─ Purpose: Job queues, Horizon        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Note: Sessions use a database-first architecture with Redis as an optional cache layer: - Primary Storage: PostgreSQL sessions table (always reliable) - Cache Layer: Redis DB 2 (for performance) - Automatic Fallback: If Redis fails, sessions continue working from database

πŸ” Security ArchitectureΒΆ

graph LR
    subgraph "Secret Sources"
        VAULT[HashiCorp Vault<br/>:8200]
        ENV[.env File<br/>Development]
    end

    subgraph "Application"
        APP[Laravel App]
        CONFIG[Config Files]
    end

    subgraph "Secrets"
        DB_CREDS[Database Credentials]
        API_KEYS[API Keys]
        TOKENS[Auth Tokens]
        ENCRYPT[Encryption Keys]
    end

    ENV -->|Development| CONFIG
    VAULT -->|Production| CONFIG
    CONFIG --> APP

    APP --> DB_CREDS
    APP --> API_KEYS
    APP --> TOKENS
    APP --> ENCRYPT

    style VAULT fill:#FFD814,stroke:#CC9900,color:#000
    style APP fill:#4F46E5,stroke:#312E81,color:#fff

Vault Secret PathsΒΆ

secret/
β”œβ”€β”€ development/
β”‚   β”œβ”€β”€ app              # APP_KEY, APP_SECRET
β”‚   β”œβ”€β”€ database         # DB credentials
β”‚   └── services         # Third-party API keys
β”œβ”€β”€ staging/
β”‚   β”œβ”€β”€ app
β”‚   β”œβ”€β”€ database
β”‚   └── services
└── production/
    β”œβ”€β”€ app
    β”œβ”€β”€ database
    └── services

🎯 Service Endpoints & Access¢

Service URL Credentials Purpose
Main App http://rawdigs.local - Application UI
Vite Dev http://rawdigs.local:5173 - Hot reload assets
Horizon http://rawdigs.local/monitoring/horizon Local env auto-auth Queue dashboard
Telescope http://rawdigs.local/telescope Auth required Debug tool
Pulse http://rawdigs.local/pulse Auth required Performance monitor
RabbitMQ UI http://rabbitmq.rawdigs.local guest/guest Queue management
Vault UI http://vault.rawdigs.local admin/admin-change-me Secrets management
Mailpit http://mail.rawdigs.local - Email testing
Meilisearch http://search.rawdigs.local - Search admin
MinIO Console http://minio.rawdigs.local sail/password Object storage
MkDocs http://docs.rawdigs.local - Documentation

πŸš€ Environment Variables MapΒΆ

Application LayerΒΆ

APP_URL=http://localhost              β†’ Laravel base URL
VITE_PORT=5173                        β†’ Vite dev server

Database LayerΒΆ

DB_CONNECTION=pgsql                   β†’ PostgreSQL (primary)
DB_HOST=pgsql                         β†’ Service name
DB_PORT=5432                          β†’ PostgreSQL port
DB_DATABASE=laravel                   β†’ Database name

DB_MONITORING_HOST=mysql_monitoring   β†’ MySQL monitoring service
DB_MONITORING_PORT=3306               β†’ MySQL port (exposed as 3307)
DB_MONITORING_DATABASE=monitoring     β†’ Monitoring database

Cache & Session LayerΒΆ

CACHE_STORE=memcached                 β†’ Primary cache
MEMCACHED_HOST=memcached              β†’ Memcached service
MEMCACHED_PORT=11211                  β†’ Memcached port

# Sessions: Database-first with Redis cache
SESSION_DRIVER=database               β†’ Database as source of truth
SESSION_CONNECTION=pgsql              β†’ PostgreSQL connection
SESSION_TABLE=sessions                β†’ Sessions table
SESSION_STORE=redis                   β†’ Redis cache layer (optional)
REDIS_HOST=redis                      β†’ Redis service
REDIS_PORT=6379                       β†’ Redis port
REDIS_SESSION_DB=2                    β†’ Redis database for session cache

Queue LayerΒΆ

QUEUE_CONNECTION=redis                β†’ Queue driver
REDIS_QUEUE_DB=3                      β†’ Redis database for queues
HORIZON_PATH=monitoring/horizon       β†’ Horizon URL path
HORIZON_NAME=RawDigs                  β†’ Horizon instance name

Message BrokerΒΆ

RABBITMQ_HOST=rabbitmq                β†’ RabbitMQ service
RABBITMQ_PORT=5672                    β†’ AMQP port
RABBITMQ_USER=guest                   β†’ Username
RABBITMQ_PASSWORD=guest               β†’ Password
SCOUT_DRIVER=meilisearch              β†’ Search engine
MEILISEARCH_HOST=http://meilisearch:7700  β†’ Meilisearch URL

StorageΒΆ

FILESYSTEM_DISK=local                 β†’ Dev storage
# Production: s3 or r2

MonitoringΒΆ

TELESCOPE_ENABLED=true                β†’ Enable Telescope
TELESCOPE_DB_CONNECTION=mysql_monitoring  β†’ Telescope database
PULSE_ENABLED=true                    β†’ Enable Pulse
PULSE_DB_CONNECTION=mysql_monitoring  β†’ Pulse database

SecurityΒΆ

VAULT_ADDR=http://vault:8200          β†’ Vault URL
VAULT_ROOT_TOKEN=xxx                  β†’ Vault token

πŸ“¦ Docker ServicesΒΆ

Service DependenciesΒΆ

graph TB
    APP[laravel.test]
    HORIZON[horizon]

    APP --> PGSQL
    APP --> MYSQL
    APP --> REDIS
    APP --> MEMCACHED
    APP --> MEILISEARCH
    APP --> MINIO
    APP --> MAILPIT
    APP --> RABBITMQ
    APP --> VAULT

    HORIZON --> PGSQL
    HORIZON --> REDIS

    PGSQL[pgsql<br/>PostgreSQL]
    MYSQL[mysql_monitoring<br/>MySQL]
    REDIS[redis<br/>Redis]
    MEMCACHED[memcached<br/>Memcached]
    MEILISEARCH[meilisearch<br/>Search]
    MINIO[minio<br/>Storage]
    MAILPIT[mailpit<br/>Email]
    RABBITMQ[rabbitmq<br/>Message Broker]
    VAULT[vault<br/>Secrets]

Volume MountsΒΆ

sail-pgsql              β†’ PostgreSQL data
sail-mysql-monitoring   β†’ MySQL monitoring data
sail-redis              β†’ Redis data
sail-meilisearch        β†’ Meilisearch indexes
sail-minio              β†’ MinIO objects
sail-rabbitmq           β†’ RabbitMQ data
sail-vault-data         β†’ Vault secrets
sail-vault-logs         β†’ Vault audit logs

πŸ”„ Infrastructure as Code (IaC) ConsiderationsΒΆ

Docker Compose StructureΒΆ

services:
  # Application Layer
  - laravel.test        # Main app
  - horizon             # Queue worker
  - docs                # MkDocs

  # Data Layer
  - pgsql               # Primary DB
  - mysql_monitoring    # Monitoring DB

  # Cache & Session
  - redis               # Multi-DB cache/session/queue
  - memcached           # Application cache

  # Message Broker
  - rabbitmq            # Event messaging

  # Search & Storage
  - meilisearch         # Full-text search
  - minio               # Object storage (dev)

  # Security & Dev Tools
  - vault               # Secrets management
  - mailpit             # Email testing
  - selenium            # Browser testing

Production ConsiderationsΒΆ

For production IaC (Terraform, Kubernetes, Docker Swarm):

  1. Separate Services:
  2. Database: Managed PostgreSQL (AWS RDS, DO Managed DB)
  3. Cache: Managed Redis (ElastiCache, Redis Cloud)
  4. Storage: Cloudflare R2 or AWS S3
  5. Search: Managed Meilisearch Cloud

  6. Scalability:

  7. Horizontal scaling for Laravel app (load balancer)
  8. Multiple Horizon workers
  9. Redis Cluster for high availability
  10. Separate RabbitMQ cluster

  11. Security:

  12. Vault in HA mode with external storage
  13. TLS/SSL for all connections
  14. Network isolation (VPC, subnets)
  15. Secret rotation

  16. Monitoring:

  17. External APM (New Relic, Datadog)
  18. Log aggregation (ELK, Loki)
  19. Metrics (Prometheus, Grafana)

πŸ“ Service Health ChecksΒΆ

Health Check EndpointsΒΆ

Service Health Check Command
Laravel GET / curl http://localhost/
PostgreSQL pg_isready sail artisan db:show
MySQL mysqladmin ping sail artisan db:show --database=mysql_monitoring
Redis redis-cli ping sail exec redis redis-cli ping
Memcached telnet stats echo "stats" \| nc memcached 11211
RabbitMQ Management API curl http://localhost:15672/api/healthchecks/node
Meilisearch GET /health curl http://localhost:7700/health
MinIO mc ready curl http://localhost:9000/minio/health/ready
Vault vault status sail exec vault vault status

🎨 Network Topology¢

graph TB
    subgraph "sail Network Bridge"
        APP[laravel.test]
        PGSQL[pgsql]
        MYSQL[mysql_monitoring]
        REDIS[redis]
        MEMCACHED[memcached]
        RABBITMQ[rabbitmq]
        MEILISEARCH[meilisearch]
        MINIO[minio]
        VAULT[vault]
        MAILPIT[mailpit]
        SELENIUM[selenium]
        HORIZON[horizon]
        DOCS[docs]
    end

    subgraph "Host Machine"
        HOST[localhost]
    end

    HOST -.->|:80| APP
    HOST -.->|:5173| APP
    HOST -.->|:5432| PGSQL
    HOST -.->|:3307| MYSQL
    HOST -.->|:6379| REDIS
    HOST -.->|:11211| MEMCACHED
    HOST -.->|:5672, :15672| RABBITMQ
    HOST -.->|:7700| MEILISEARCH
    HOST -.->|:9000, :8900| MINIO
    HOST -.->|:8200| VAULT
    HOST -.->|:8025| MAILPIT
    HOST -.->|:8000| DOCS

πŸ“š Additional ResourcesΒΆ


Last Updated: October 17, 2025
Version: 1.0.0
Maintained By: RawDigs DevOps Team