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
SearchΒΆ
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):
- Separate Services:
- Database: Managed PostgreSQL (AWS RDS, DO Managed DB)
- Cache: Managed Redis (ElastiCache, Redis Cloud)
- Storage: Cloudflare R2 or AWS S3
-
Search: Managed Meilisearch Cloud
-
Scalability:
- Horizontal scaling for Laravel app (load balancer)
- Multiple Horizon workers
- Redis Cluster for high availability
-
Separate RabbitMQ cluster
-
Security:
- Vault in HA mode with external storage
- TLS/SSL for all connections
- Network isolation (VPC, subnets)
-
Secret rotation
-
Monitoring:
- External APM (New Relic, Datadog)
- Log aggregation (ELK, Loki)
- 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ΒΆ
- Database Migrations Guide
- Vault Secrets Management
- Local Domain Setup
- Audio Processing Microservices
Last Updated: October 17, 2025
Version: 1.0.0
Maintained By: RawDigs DevOps Team