Skip to main content

Overview

Learnille uses a hybrid production architecture. The backend application runs through Dokploy, PostgreSQL is hosted on Neon, Redis is hosted on Redis Cloud, OpenSearch is hosted on Aiven, InstantDB is self-hosted, and media and file assets are stored on Cloudflare R2. Application observability, logging, and APM are centralized in New Relic.

🏗 Infrastructure Overview


🛠 Self-Hosted Stack Components

1. Compute & Application Hosting

  • Server Deployment: The independent server package is deployed as a Docker application through Dokploy.
  • Reverse Proxy / SSL: Dokploy and its ingress layer handle service routing and TLS termination for the production API.

2. Primary Database & Storage

  • PostgreSQL: Neon for production; Aiven for development and non-production environments.
  • Cloudflare R2 Object Storage: S3 API-compatible storage used for storing course video files, thumbnails, document attachments, and PDF certificates without egress data transfer charges.
  • MinIO: Local development fallback for offline S3 testing.

3. Queue & Real-Time Middleware

  • Redis: Redis Cloud backing BullMQ worker queues (email delivery, outbox events), throttling, sessions, and API caching.
  • OpenSearch: Aiven OpenSearch for search and indexing.
  • InstantDB & Soketi: Self-hosted InstantDB for real-time room state and Soketi for WebSocket push notifications.

4. Observability & Logging

  • New Relic APM: Application Performance Monitoring agent integrated into the NestJS backend to track API endpoint latencies, transaction traces, and database query profiling.
  • New Relic Log Management: Winston logger sending structured JSON logs directly to New Relic for centralized log searching and alerting.
  • Sentry: Real-time frontend and backend exception tracking.

🔒 Security & Backup Policies

  • Backups: Daily automated database snapshots compressed and stored in Cloudflare R2 bucket with 30-day lifecycle retention.
  • Firewall & Access: Port 22 (SSH) restricted to authorized admin IPs / SSH keys; public ingress restricted to ports 80/443.