Skip to the content.

Deployment

qhook runs as a long-running process. Choose a platform that supports persistent services (not serverless/Lambda).

Platform Comparison

  AWS ECS Fly.io Railway Render Cloudflare Containers
Best for Production at scale Simple deployment Quick prototyping Easy setup Edge + D1
Database RDS Postgres Fly Postgres Railway Postgres Render Postgres D1 (SQLite-based)
SQLite support EFS volume Fly Volume Limited Disk (Standard+) D1 (native)
TLS ALB (auto) Built-in Built-in Built-in Built-in
Multi-instance Yes (Fargate) Yes No No No (single writer)
Cost Pay-per-use From $0 From $0 From $0 Pay-per-use
Custom domain Route 53 / ALB fly certs Dashboard Dashboard Dashboard

Guides

General Requirements

Docker

# Development (SQLite)
docker compose up

# Production (Postgres)
DATABASE_URL=postgres://user:pass@db:5432/qhook docker compose -f docker-compose.prod.yaml up

The Docker image (ghcr.io/totte-dev/qhook) exposes port 8888 and expects a config file at /data/qhook.yaml.

TLS / HTTPS

qhook does not terminate TLS itself. All deployment platforms above provide TLS termination:

For self-hosted (EC2, VPS), use a reverse proxy like Caddy (auto HTTPS) or nginx + Let’s Encrypt. See the AWS guide for an nginx example.