This document outlines all the infrastructure dependencies required to deploy and run SuprSend in self-hosted mode.
At a Glance
| Component | Version | Purpose | Recommended Deployment |
|---|
| Kubernetes | v1.29+ | Container orchestration | Managed (GKE, EKS, AKS) |
| PostgreSQL | v17+ | Primary data store | Outside Kubernetes |
| ClickHouse | v24.9+ | Analytics and logs | Outside Kubernetes |
| Redis (×2) | v7.0+ | Cache and state management | Dedicated deployment |
| OpenSearch | v1.3+ | Full-text search | External service |
| Temporal | v1.25+ | Workflow orchestration | In-cluster or external |
| NATS | v2.10+ | Message broker | In-cluster or external |
| Object Storage | — | Files, attachments, media | AWS S3 / Azure Blob / GCS |
Core Infrastructure
Kubernetes Cluster
- Version: Kubernetes v1.29+
- Purpose: Container orchestration for SuprSend services
- Deployment: Can be deployed on any Kubernetes distribution (GKE, EKS, AKS, DigitalOcean, etc.)
Use managed Kubernetes services for production deployments.
Storage Requirements
| Requirement | Details |
|---|
| Persistent Volumes | Required for stateful services |
| Storage Classes | Must support ReadWriteOnce access mode |
| Recommended | SSD storage for optimal performance |
| Size | Minimum 100–200 GB per database instance |
Temporal
- Version: Temporal v1.25+
- Purpose: Workflow orchestration and state management
- Deployment: Can be deployed in-cluster or as external service
- Use Case: Reliable workflow execution and state management
Database Dependencies
PostgreSQL
- Version: PostgreSQL v17+ (required)
- Purpose: Primary data store for users, templates, workflows, and notifications
Configuration Requirements:
shared_preload_libraries = 'pg_stat_statements,pg_cron'
cron.database_name = 'defaultdb'
cron.max_running_jobs = 1
hot_standby_feedback = on
max_standby_archive_delay = -1
max_standby_streaming_delay = -1
wal_level = logical
Required Extensions:
| Extension | Purpose |
|---|
pg_cron | Scheduled jobs |
pgcrypto | Cryptographic functions |
pg_stat_statements | Query performance monitoring |
btree_gin | GIN indexes |
btree_gist | GiST indexes |
Databases — 6 databases required:
| Database | Purpose |
|---|
suprsend | Main application database |
defaultdb | Default database for cron jobs |
pronto | Pronto service database |
svix | Svix webhook service database |
temporal | Temporal workflow database |
temporal_visibility | Temporal visibility database |
ClickHouse
- Version: ClickHouse v24.9+
- Purpose: Analytics and logs storage
- Deployment: Recommended outside Kubernetes for better performance
- Storage: High-performance storage recommended (SSD)
- Configuration: Single-node or clustered setup based on scale requirements
OpenSearch
- Version: OpenSearch v1.3+
- Purpose: Full-text search and advanced query capabilities
- Deployment: External service recommended
- Use Case: Advanced search and log analysis features
Data Stores and Messaging
Redis
- Version: Redis v7.0+
- Purpose: Cache and short-term state management
- Deployment: Dedicated deployment preferred (outside Kubernetes)
- Configuration: High availability setup recommended
Instances — 2 Redis stores required:
| Instance | Purpose |
|---|
| Redis 1 | Short-term load management |
| Redis 2 | Workflow states and data processing |
NATS
- Version: NATS v2.10+
- Purpose: Message broker for scalable event ingestion
- Deployment: Can be deployed in-cluster or as external service
- Use Case: High-volume event processing scenarios
Object Storage
- Purpose: Object storage for files, attachments, and media assets
- Supported Providers:
- AWS S3 — Amazon Simple Storage Service
- Azure Blob Storage — Microsoft Azure object storage
- Google Cloud Storage — Google Cloud object storage
Bucket Configuration — Two buckets required:
| Bucket | Purpose |
|---|
| Private Bucket | Sensitive files, user uploads, and internal assets |
| Public Bucket | Publicly accessible content and media files |
Use Cases:
- Template assets and media files
- User-uploaded attachments
- Backup storage for database dumps
Requirements:
- Access Control: IAM policies for secure access to private bucket
- Public Access: Public read access for public bucket
Setup Guides