Skip to main content
This document outlines all the infrastructure dependencies required to deploy and run SuprSend in self-hosted mode.

At a Glance

ComponentVersionPurposeRecommended Deployment
Kubernetesv1.29+Container orchestrationManaged (GKE, EKS, AKS)
PostgreSQLv17+Primary data storeOutside Kubernetes
ClickHousev24.9+Analytics and logsOutside Kubernetes
Redis (×2)v7.0+Cache and state managementDedicated deployment
OpenSearchv1.3+Full-text searchExternal service
Temporalv1.25+Workflow orchestrationIn-cluster or external
NATSv2.10+Message brokerIn-cluster or external
Object StorageFiles, attachments, mediaAWS 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

RequirementDetails
Persistent VolumesRequired for stateful services
Storage ClassesMust support ReadWriteOnce access mode
RecommendedSSD storage for optimal performance
SizeMinimum 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:
ExtensionPurpose
pg_cronScheduled jobs
pgcryptoCryptographic functions
pg_stat_statementsQuery performance monitoring
btree_ginGIN indexes
btree_gistGiST indexes
Databases — 6 databases required:
DatabasePurpose
suprsendMain application database
defaultdbDefault database for cron jobs
prontoPronto service database
svixSvix webhook service database
temporalTemporal workflow database
temporal_visibilityTemporal 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:
InstancePurpose
Redis 1Short-term load management
Redis 2Workflow 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:
BucketPurpose
Private BucketSensitive files, user uploads, and internal assets
Public BucketPublicly 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