---
title: Deployment tiers
url: https://www.tines.com/docs/self-hosted/reference-architecture/sizing-and-scaling/deployment-tiers/
updated: 2026-03-10T12:51:41+00:00
---

*[tines.com](https://www.tines.com/llms.txt) › [Docs](https://www.tines.com/llms.txt) › [Self-Hosted](https://www.tines.com/llm/docs/self-hosted.md) › [Reference Architecture](https://www.tines.com/llm/docs/self-hosted/reference-architecture.md) › [Sizing & Scaling](https://www.tines.com/llm/docs/self-hosted/reference-architecture/sizing-and-scaling.md)*

# Deployment tiers

*[View on tines.com](https://www.tines.com/docs/self-hosted/reference-architecture/sizing-and-scaling/deployment-tiers/)*

Choosing the right deployment size starts with understanding your workload. This guide covers five reference tiers from single-node evaluation deployments through to high-availability Kubernetes clusters for production, using daily action runs as the primary scaling dimension.

All Tines self-hosted deployments consist of the same core components — **tines-app** (web server), **tines-sidekiq** (background worker), **tines-command-runner** (optional), **PostgreSQL**, **Redis**, and a **load balancer / reverse proxy** — scaled according to workload.

## Deployment Options and Sizing Overview

| Component | Tier 1: Small | Tier 2: Medium | Tier 3: Large | Tier 4: X-Large | Tier 5: XX-Large |
| --- | --- | --- | --- | --- | --- |
| **Daily Action Runs** | Up to 100K | Up to 1M | Up to 5M | Up to 10M | 25M+ |
| **Deployment Model** | Docker Compose | Docker Compose | Kubernetes (HA) | Kubernetes (HA) | Kubernetes (HA) |
| **Host / Cluster** | Single node | Single node + managed data tier | K8s cluster | K8s cluster | K8s cluster |
| **High Availability** | No | No | Yes | Yes | Yes |
| **Recommended For** | Evaluation, PoC, small teams | Small-to-mid production | Mid production | Large production | Enterprise / high-throughput |

> **NOTE:** These tiers are reference architectures. Actual resource requirements vary depending on story complexity, action payload sizes, webhook volume, concurrent users, and whether AI / command runner features are enabled. Start at the recommended baseline and scale up based on observed utilization.

## Tier 1: Small 

**Docker Compose (up to 100K actions/day)**

All containers run on a single host. Suitable for evaluation, proof-of-concept, and small production workloads.

### Host Specifications

| Resource | Specification |
| --- | --- |
| **vCPU** | 4 |
| **RAM** | 16 GB |
| **Disk** | 500 GB SSD |
| **OS** | Linux (Ubuntu 22.04+, RHEL 8+, Amazon Linux 2) |

### Container Layout (single host)

| Container | CPU Allocation | RAM Allocation | Instances |
| --- | --- | --- | --- |
| **tines-app** | shared | shared | 1 |
| **tines-sidekiq** | shared | shared | 1 |
| **tines-command-runner** | shared | shared | 1 |
| **tines-nginx** | shared | shared | 1 |
| **postgres** | shared | shared | 1 |
| **redis** | shared | shared | 1 |

### Notes

-   All services share the single host’s resources; no dedicated infrastructure required.
-   TLS terminated at the bundled nginx container.
-   Postgres and Redis run as local containers; regular backups via `pg_dump` cron job recommended.
-   **Not recommended** for production workloads requiring uptime SLAs.

## Tier 2: Medium

**Docker Compose (up to 1M actions/day)**

Single application host with externalized (managed) data services recommended. Suitable for small-to-mid production workloads.

### Application Host Specifications

| Resource | Specification |
| --- | --- |
| **vCPU** | 8 |
| **RAM** | 32 GB |
| **Disk** | 500 GB SSD |
| **OS** | Linux (Ubuntu 22.04+, Amazon Linux 2) |

### Container Layout (application host)

| Container | CPU Allocation | RAM Allocation | Instances |
| --- | --- | --- | --- |
| **tines-app** | shared | shared | 2 |
| **tines-sidekiq** | shared | shared | 2 |
| **tines-command-runner** | shared | shared | 2 |
| **tines-nginx** | shared | shared | 1 |

### Data Tier (managed services recommended)

| Service | Specification | Example (AWS) |
| --- | --- | --- |
| **PostgreSQL 14.x** | 4 vCPU, 32 GB RAM, 500 GB SSD, automated backups | RDS `db.r6g.xlarge` |
| **Redis 7.2** | 2 vCPU, 4 GB RAM | ElastiCache `cache.r6g.large` |

> If managed services are unavailable, Postgres and Redis may run as containers on the application host. In this case, increase the host to **16 vCPU / 64 GB RAM / 1 TB SSD** to accommodate the data tier locally.

### Recommended ENV Tuning

| Variable | Value | Notes |
| --- | --- | --- |
| `SIDEKIQ_CONCURRENCY` | 12 | Default; suitable for this tier |
| `RAILS_MAX_THREADS` | 16 | Default |
| `DATABASE_POOL` | 24 | Default |

### Notes

-   Externalizing Postgres and Redis to managed services simplifies backups, scaling, and maintenance.
-   TLS terminated at nginx container or an upstream load balancer.
-   Single point of failure at the application host — schedule maintenance windows accordingly.

## Tier 3: Large

**Kubernetes (up to 5M actions/day)**

Multi-pod Kubernetes deployment with HA data services. First tier to support horizontal pod autoscaling and data tier redundancy.

### Application Tier (K8s pods)

| Component | vCPU (per pod) | RAM (per pod) | Pod Count | Total vCPU | Total RAM |
| --- | --- | --- | --- | --- | --- |
| **tines-app** | 2 | 8 GB | 3 | 6 | 24 GB |
| **tines-sidekiq** | 2 | 8 GB | 5 | 10 | 40 GB |
| **tines-command-runner** | 2 | 8 GB | 2 | 4 | 16 GB |
| **Subtotal** |  |  | **10** | **20** | **80 GB** |

### Data Tier (High Availability)

| Service | vCPU (per instance) | RAM (per instance) | Instances | Total vCPU | Total RAM | Example (AWS) |
| --- | --- | --- | --- | --- | --- | --- |
| **PostgreSQL 14.x** | 8 | 64 GB | 2 (Primary + Secondary) | 16 | 128 GB | RDS `db.r6g.2xlarge` (Multi-AZ) |
| **Redis 7.2** | 2 | 4 GB | 2 (Primary + Replica) | 4 | 8 GB | ElastiCache `cache.r6g.large` (replica mode) |

### Cluster Sizing Guidance

| Resource | Recommendation |
| --- | --- |
| **Worker nodes** | 3+ nodes (spread across availability zones for resilience) |
| **Node size** | 8 vCPU / 32 GB each (minimum) |
| **Ingress** | Cloud load balancer with web application firewall (e.g., AWS ALB + WAF, GCP Cloud Armor) |
| **Storage** | Managed Postgres and Redis — no persistent volumes required for app pods |

### Notes

-   HPA (Horizontal Pod Autoscaler) can be enabled for tines-sidekiq and tines-app to handle burst workloads.
-   `DATABASE_READONLY_ENDPOINT` can be configured to offload read queries to the Postgres secondary.

> **NOTE:** For Tiers 3–5, Redis should be deployed in a **ReplicaSet** (primary + replica) configuration — not sharded. Tines does not provide or manage PostgreSQL high availability; customers are responsible for configuring their own Postgres replication and failover mechanisms (e.g., AWS RDS Multi-AZ, Aurora failover, Patroni, or equivalent).

## Tier 4: X-Large

**Kubernetes HA (up to 10M actions/day)**

High-availability Kubernetes deployment. All data services run in HA pairs. This is the recommended production configuration for large-scale deployments.

### Application Tier (K8s pods with HPA + ReplicaSets)

| Component | vCPU (per pod) | RAM (per pod) | Pod Count | Total vCPU | Total RAM |
| --- | --- | --- | --- | --- | --- |
| **tines-app** | 2 | 8 GB | 6 | 12 | 48 GB |
| **tines-sidekiq** | 2 | 8 GB | 9 | 18 | 72 GB |
| **tines-command-runner** | 2 | 8 GB | 3 | 6 | 24 GB |
| **Subtotal** |  |  | **18** | **36** | **144 GB** |

### Data Tier (High Availability)

| Service | vCPU (per instance) | RAM (per instance) | Instances | Total vCPU | Total RAM | Example (AWS) |
| --- | --- | --- | --- | --- | --- | --- |
| **PostgreSQL 14.x** | 16 | 128 GB | 2 (Primary + Secondary) | 32 | 256 GB | Aurora `db.r6g.4xlarge` |
| **Redis 7.2** | 2 | 4 GB | 2 (Primary + Secondary) | 4 | 8 GB | ElastiCache `cache.r6g.large` (cluster mode) |

### Cluster Sizing Guidance

| Resource | Recommendation |
| --- | --- |
| **Worker nodes** | 6+ nodes (across 3 availability zones) |
| **Node size** | 8 vCPU / 32 GB each (minimum) |
| **Ingress** | Cloud load balancer with web application firewall (e.g., AWS ALB + WAF, GCP Cloud Armor) |
| **HPA** | Enabled on all application deployments |

### Total Resource Summary

| Resource | Count |
| --- | --- |
| **Application pods** | 18 |
| **Application vCPU** | 36 |
| **Application RAM** | 144 GB |
| **Postgres vCPU** | 32 |
| **Postgres RAM** | 256 GB |
| **Redis vCPU** | 4 |
| **Redis RAM** | 8 GB |
| **Grand Total vCPU** | 72 |
| **Grand Total RAM** | 408 GB |

### Notes

-   HPA targets should be tuned based on CPU utilization (recommended: 60–70% target).
-   `DATABASE_READONLY_ENDPOINT` should be configured to leverage the Postgres secondary for read queries.

## Tier 5: XX-Large

Enterprise-scale high-availability deployment for the highest throughput requirements. Scales the Tier 4 reference architecture proportionally.

### Application Tier (K8s pods with HPA + ReplicaSets)

| Component | vCPU (per pod) | RAM (per pod) | Pod Count | Total vCPU | Total RAM |
| --- | --- | --- | --- | --- | --- |
| **tines-app** | 2 | 8 GB | 12 | 24 | 96 GB |
| **tines-sidekiq** | 2 | 8 GB | 18 | 36 | 144 GB |
| **tines-command-runner** | 2 | 8 GB | 6 | 12 | 48 GB |
| **Subtotal** |  |  | **36** | **72** | **288 GB** |

### Data Tier (High Availability)

| Service | vCPU (per instance) | RAM (per instance) | Instances | Total vCPU | Total RAM | Example (AWS) |
| --- | --- | --- | --- | --- | --- | --- |
| **PostgreSQL 14.x** | 32 | 256 GB | 2 (Primary + Secondary) | 64 | 512 GB | Aurora `db.r6g.8xlarge` |
| **Redis 6.x** | 4 | 16 GB | 2 (Primary + Secondary) | 8 | 32 GB | ElastiCache `cache.r6g.xlarge` (cluster mode) |

### Cluster Sizing Guidance

| Resource | Recommendation |
| --- | --- |
| **Worker nodes** | 12+ nodes (across 3 availability zones) |
| **Node size** | 8 vCPU / 32 GB each (minimum) |
| **Ingress** | Cloud load balancer with web application firewall (e.g., AWS ALB + WAF, GCP Cloud Armor) |
| **HPA** | Enabled and tuned on all application deployments |

### Total Resource Summary

| Resource | Count |
| --- | --- |
| **Application pods** | 36 |
| **Application vCPU** | 72 |
| **Application RAM** | 288 GB |
| **Postgres vCPU** | 64 |
| **Postgres RAM** | 512 GB |
| **Redis vCPU** | 8 |
| **Redis RAM** | 32 GB |
| **Grand Total vCPU** | 144 |
| **Grand Total RAM** | 832 GB |

### Notes

-   HPA targets should be tuned based on CPU utilization (recommended: 60–70% target).
-   `DATABASE_READONLY_ENDPOINT` should be configured to leverage the Postgres secondary for read queries.
