System requirements

Hardware, PostgreSQL 14+ with pgvector and pg_trgm, object storage, ports, and security requirements for self-hosting Quackback. No Redis or pg_cron needed.

JM
James Morton
Written By James MortonLast updated 1 day ago

The hardware, software, and network you need to self-host Quackback. This applies to the open-source edition only; Quackback Cloud needs none of it.

Minimum requirements

Resource

Minimum

Recommended

CPU

1 core

2+ cores

RAM

1 GB

2+ GB

Storage

10 GB

20+ GB

PostgreSQL

14+

17 or 18

Software requirements

PostgreSQL

PostgreSQL is the only datastore Quackback needs. It holds your data, the background job queue, caches, rate limits, and realtime events. You do not need Redis, Dragonfly, or the pg_cron extension.

Requirement

Details

Version

PostgreSQL 14 or newer

vector extension

pgvector 0.5.0 or newer (HNSW indexes)

pg_trgm extension

Ships with the PostgreSQL contrib package

TEMPORARY privilege

The app's database user needs it. PostgreSQL grants it by default.

Connection mode

A direct or session-mode connection. Not a transaction-mode pooler.

Quackback creates both extensions on startup. If the database user can't create extensions, ask a superuser to run these once:

CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS pg_trgm;

Warning: Realtime updates use PostgreSQL LISTEN/NOTIFY, which doesn't work through a transaction-mode pooler (for example PgBouncer in transaction mode, or a hosted pooler on port 6543). Point DATABASE_URL at the database directly or at a session-mode pooler.

Before it runs migrations, Quackback checks the server version, both extensions, and the TEMPORARY privilege. If anything is missing, it stops without changing the database and names what to fix.

Object storage

File uploads need S3-compatible storage: AWS S3, Cloudflare R2, Backblaze B2, a Railway bucket, or the bundled PGSTY Silo (a maintained MinIO fork) in the Docker Compose stack. Without storage, uploads are disabled.

Component

Version

Docker Engine

20.10+

Docker Compose

v2+

The published image is multi-arch (linux/amd64 and linux/arm64), so it runs natively on both x86-64 and ARM hosts (Apple Silicon, AWS Graviton, Ampere, Raspberry Pi).

Bun (alternative)

If you run without Docker, you need Bun 1.4.0 or newer.

Network requirements

Ports

Port

Purpose

Required

3000

Application (default)

Yes

5432

PostgreSQL

Internal only

9000

Bundled object storage

Internal only

443

HTTPS (via proxy)

Production

80

HTTP redirect

Optional

Domains

You need:

  • A domain or subdomain (for example feedback.yourcompany.com). One instance serves every module (feedback portal, help center, status page, widget) on that domain.
  • A TLS certificate (Let's Encrypt works well)

Outbound connections

Quackback needs to reach:

  • Your email provider (SMTP, Amazon SES, or Resend)
  • OAuth providers you enable (GitHub, Google, and so on)
  • Integration services you connect (Slack and others)
  • Your AI endpoint, if you configure AI features

Database requirements

PostgreSQL configuration

Recommended settings for production:

# Memory
shared_buffers = 256MB
work_mem = 16MB
maintenance_work_mem = 128MB

# Connections
max_connections = 100

# WAL
wal_level = replica

Storage estimates

Data

Size estimate

1,000 posts

about 50 MB

10,000 posts

about 500 MB

100,000 posts

about 5 GB

Add headroom for attachments, vector embeddings (for AI features), logs, and backups.

Backups

Warning: Plan for regular backups to prevent data loss. Point-in-time recovery is recommended for production deployments.

  • Daily full backups
  • Point-in-time recovery (recommended)
  • Off-site backup storage

Cloud provider options

AWS

Service

Use

EC2

Application server

RDS

Managed PostgreSQL

S3

File uploads

ALB

Load balancing

Minimum instance: t3.small

Google Cloud

Service

Use

Compute Engine

Application server

Cloud SQL

Managed PostgreSQL

Cloud Load Balancing

Load balancing

Minimum machine: e2-small

DigitalOcean

Service

Use

Droplet

Application server

Managed Database

PostgreSQL

Load Balancer

Optional

Minimum droplet: 2 GB RAM

Railway, Render, Fly.io

All support Quackback with managed databases. Railway has a ready-made template: see Deploy to Railway.

VPS providers

Provider

Minimum plan

Hetzner

CX21 (2 GB RAM)

Vultr

2 GB plan

Linode

Nanode 2 GB

DigitalOcean

Basic 2 GB

Security requirements

TLS

  • Required for production
  • Use Let's Encrypt (free) or a commercial certificate
  • Minimum TLS 1.2

Firewall

Allow only:

  • 443 (HTTPS)
  • 80 (HTTP, redirect to HTTPS)
  • 22 (SSH, restricted IPs)

Block direct database access and public access to the application port.

Secrets

SECRET_KEY is required and must be at least 32 characters. Generate one with openssl rand -base64 32 and keep it the same across upgrades: it signs sessions and encrypts stored credentials.

Warning: Manage all secrets securely, including SECRET_KEY, database credentials, OAuth client secrets, and integration tokens. Use environment variables or a secrets manager.

Plan for scaling

  • Single server: suitable for up to about 10,000 users and moderate traffic.
  • Scale horizontally: for higher loads, split HTTP serving from background processing across replicas. See Scale with multiple replicas.
  • Scale the database: vertical scaling, read replicas for read-heavy loads, or connection pooling in session mode (PgBouncer pool_mode = session).

Set up monitoring

  • Application: the health endpoints, error tracking, request latency
  • Database: connection count, query performance, disk usage
  • Infrastructure: CPU, memory, disk I/O, network throughput

Was this helpful?

Your feedback shapes what we write next.