---
title: Self-Hosting Introduction
description: Deploy Plunk on your own infrastructure
---

## Overview

Plunk is fully open-source and can be self-hosted on your own infrastructure. This gives you complete control over your data, email delivery, and infrastructure costs.

## Requirements

### System Requirements

- **Node.js**: Version 20 or higher
- **PostgreSQL**: Version 14 or higher
- **Redis**: Version 6 or higher
- **Docker** (recommended): For easy deployment

### AWS Services

- **AWS SES** (Required): For email sending
- **AWS S3** (Optional): For asset storage (Minio is included by default)

### Minimum Server Specs

For small to medium usage (up to 100K contacts):
- **CPU**: 1-2 cores
- **RAM**: 2GB
- **Storage**: 10GB (grows with contact data)

For larger scale (1M+ contacts):
- **CPU**: 2-4 cores
- **RAM**: 4GB
- **Storage**: 50GB+

## Architecture Components

Plunk uses a containerized architecture with the following components:

### 1. Plunk Application Container
Single container running all application services (API, Worker, Web, Landing, Wiki) with nginx reverse proxy for subdomain-based routing.

**Resources**: 1GB RAM, 1 CPU core (can scale up as needed)

**Services included**:
- **API Server**: Express.js application handling HTTP requests
- **Worker Process**: BullMQ worker processing background jobs
- **Web Dashboard**: Next.js application for the UI
- **Landing Page**: Marketing website
- **Documentation**: Wiki/docs site
- **SMTP Relay**: Email relay server (ports 465, 587)

**Note**: Services can be run separately by setting the `SERVICE` environment variable (`api`, `worker`, `web`, `landing`, `wiki`, or `all`).

### 2. PostgreSQL Database
Stores all data (contacts, campaigns, workflows, etc.).

**Resources**: 512MB-1GB RAM, SSD storage recommended

### 3. Redis
Queue system for background jobs (BullMQ).

**Resources**: 256MB-512MB RAM

### 4. Minio (S3-compatible Storage)
Object storage for file uploads and assets.

**Resources**: 256MB-512MB RAM, storage for uploaded files

## Deployment Options

### Docker Compose (Recommended)

Easiest way to get started. Includes all services pre-configured.

[View Docker Guide](/self-hosting/docker)

### Kubernetes

For production deployments at scale.

### Manual Deployment

Deploy each component separately on your infrastructure.

## Quick Start

1. Clone the repository
2. Copy `.env.self-host.example` to `.env`
3. Configure environment variables (see [Environment Variables](/self-hosting/environment-variables))
4. Run `docker compose up -d`
5. Access dashboard at `http://app.localhost` (or your configured domain)

## What's Included

- ✅ Full API server
- ✅ Worker process
- ✅ Web dashboard
- ✅ PostgreSQL database
- ✅ Redis queue
- ✅ All features (campaigns, workflows, segments)
- ✅ No feature limitations
- ✅ No phone-home telemetry

## What's Not Included

- ❌ Managed infrastructure
- ❌ Automatic updates
- ❌ Support (community only)
- ❌ SLA guarantees

## Cost Considerations

### AWS SES Costs

- First 62,000 emails/month: **FREE** (when sent from EC2)
- Additional emails: **$0.10 per 1,000 emails**

### Infrastructure Costs

**All-in-One VPS** (recommended for small to medium usage):
- **Single VPS**: $5-12/month (2GB RAM, services like DigitalOcean, Hetzner, Vultr)
  - Runs all containers (Plunk, PostgreSQL, Redis, Minio)
- **AWS SES**: $0-10/month (depends on volume)
- **Storage**: Included in VPS

**Total**: ~$5-20/month for self-hosting

**Managed Services** (for larger scale or production):
- **VPS**: $10-20/month (4GB RAM for Plunk application)
- **Managed PostgreSQL**: $10-15/month (512MB-1GB)
- **Managed Redis**: $5-10/month (256MB-512MB)
- **AWS SES**: $10-50/month (depends on volume)
- **AWS S3**: $1-5/month (if not using Minio)

**Total**: ~$35-100/month for production with managed services

## Support

### Community Support

- GitHub Issues
- Community Forum
- Documentation

## Next Steps

- [Deploy with Docker](/self-hosting/docker)
- [Configure environment variables](/self-hosting/environment-variables)
- [Set up database](/self-hosting/database-setup)
- [Configure email delivery](/self-hosting/email-setup)
