Prerequisites
Everything you need before deploying HelloJohn — infrastructure, tools, and accounts.
Prerequisites
Before deploying HelloJohn, make sure you have the following infrastructure and tools in place. This page covers the minimum requirements for a production-ready deployment.
Infrastructure
PostgreSQL
HelloJohn requires PostgreSQL 14 or later. This is the only required dependency.
| Setting | Minimum | Recommended |
|---|---|---|
| Version | 14 | 15+ |
| Storage | 10 GB | 50 GB+ (SSD) |
| Connections | 20 | 100+ (use PgBouncer) |
Managed options (recommended):
- Neon — serverless, autoscaling, free tier
- Supabase — PostgreSQL with extras, free tier
- Amazon RDS — managed, Multi-AZ available
- Google Cloud SQL
Connection string format:
postgresql://user:password@host:5432/hellojohn?sslmode=requireRedis (Optional)
Redis is optional but recommended for production workloads. It enables:
- Distributed rate limiting
- Session storage caching
- Webhook event queuing
| Setting | Minimum | Recommended |
|---|---|---|
| Version | 6 | 7+ |
| Memory | 256 MB | 1 GB+ |
Managed options:
- Upstash — serverless Redis, per-request billing
- Amazon ElastiCache
- Redis Cloud
If Redis is not configured, HelloJohn falls back to in-memory rate limiting (suitable for single-instance deployments only).
Compute
| Setting | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2+ vCPU |
| RAM | 512 MB | 1 GB+ |
| OS | Linux (64-bit) | Ubuntu 22.04 LTS |
HelloJohn is a single statically-linked Go binary — no runtime dependencies beyond the database.
Required Software
Docker
Required for the Docker Compose deployment method:
# Check Docker version
docker --version
# Docker version 24.0.0 or later
docker compose version
# Docker Compose version v2.20.0 or laterHelloJohn CLI (Optional)
The CLI is used for:
- Running migrations
- Managing tenants
- Local development webhook forwarding
npm install -g @hellojohn/cli
hj --versionNetwork Requirements
DNS
You need a domain for HelloJohn. The API is typically served on a subdomain:
auth.example.com # HelloJohn API
app.example.com # Your applicationPoint your DNS A record to your server IP before setting up TLS.
Ports
| Port | Protocol | Purpose |
|---|---|---|
| 80 | TCP | HTTP (redirect to HTTPS) |
| 443 | TCP | HTTPS (reverse proxy) |
| 8080 | TCP | HelloJohn internal (not exposed publicly) |
| 5432 | TCP | PostgreSQL (internal only) |
| 6379 | TCP | Redis (internal only) |
PostgreSQL and Redis should not be exposed to the public internet. Use private networking or firewall rules.
TLS Certificate
HelloJohn requires HTTPS in production. Obtain a certificate from:
- Let's Encrypt (free) — via Certbot or Caddy (auto-provisioned)
- AWS Certificate Manager (free with ALB)
- Cloudflare (free with proxy)
Accounts & Keys
Signing Keys
HelloJohn uses Ed25519 keys to sign JWTs. Generate them before deployment:
# Generate Ed25519 private key (PEM format)
openssl genpkey -algorithm ed25519 -out signing_key.pem
# Extract the public key
openssl pkey -in signing_key.pem -pubout -out signing_key_pub.pem
# View the private key (for the environment variable)
cat signing_key.pemStore the private key as the HELLOJOHN_JWT_SIGNING_KEY environment variable.
Security: Never commit signing keys to source control. Use a secrets manager (AWS Secrets Manager, HashiCorp Vault, Doppler, etc.).
Email Provider (Required)
HelloJohn sends transactional emails for:
- Email verification
- Magic link sign-in
- Password reset
- MFA OTP
- Organization invitations
You need an SMTP server or transactional email provider:
- Resend — developer-friendly, free tier
- Postmark — high deliverability
- SendGrid
- Amazon SES — low cost at volume
See the SMTP Configuration guide for setup.
Checklist
Before proceeding to deployment:
- PostgreSQL 14+ provisioned and accessible
- Database user created with schema creation privileges
- Ed25519 signing key generated and stored securely
- Domain name pointed to your server
- TLS certificate provisioned (or Caddy auto-provisioning configured)
- Email/SMTP provider credentials obtained
- Redis provisioned (optional but recommended)
- Docker 24+ and Docker Compose v2 installed (if using Docker)
- Firewall rules: only ports 80 and 443 exposed publicly