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.
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 |
| pgvector 0.5.0 or newer (HNSW indexes) |
| Ships with the PostgreSQL contrib package |
| 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). PointDATABASE_URLat 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.
Docker (recommended)
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 = replicaStorage 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
Related articles
Was this helpful?
Your feedback shapes what we write next.
