Self-Hosting ReqPour
Why Self-Host?
ReqPour is open source and can be self-hosted for teams that need full control over their webhook data. Self-hosting is useful when: your security policy requires webhook data to stay within your infrastructure, you need custom modifications, you want unlimited endpoints and requests, or you are working in an air-gapped environment.
For most developers and small teams, the hosted version at reqpour.com is simpler and more cost-effective. Self-hosting requires maintaining your own server, SSL certificates, and database. The hosted Pro plan at $3/month eliminates this operational overhead.
If you decide to self-host, ReqPour is packaged as a Docker container for easy deployment. The stack consists of the API server (Node.js), a PostgreSQL database for request storage, and a Redis instance for WebSocket pub/sub and real-time features.
Docker Deployment
The quickest way to self-host is with Docker Compose:
# docker-compose.yml
version: '3.8'
services:
api:
image: reqpour/api:latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://reqpour:password@db:5432/reqpour
REDIS_URL: redis://redis:6379
JWT_SECRET: your-secret-key-here
BASE_URL: https://reqpour.yourdomain.com
depends_on:
- db
- redisdb: image: postgres:16 environment: POSTGRES_USER: reqpour POSTGRES_PASSWORD: password POSTGRES_DB: reqpour volumes: - pgdata:/var/lib/postgresql/data
redis: image: redis:7-alpine
volumes: pgdata: ```
Run docker compose up -d and the API server will be available on port 3000. Place a reverse proxy (nginx, Caddy, or Traefik) in front of it for SSL termination and subdomain routing.
Configuration
Configure your self-hosted instance with environment variables:
DATABASE_URL: PostgreSQL connection string. Required. The database stores user accounts, endpoints, and captured requests.
REDIS_URL: Redis connection string. Required. Redis handles WebSocket pub/sub for real-time request forwarding and relay connections.
JWT_SECRET: Secret key for signing JWT tokens. Required. Use a strong, random string. This secures user authentication and API tokens.
BASE_URL: The public URL of your instance (e.g., https://reqpour.yourdomain.com). Required. Used for generating endpoint URLs and email links.
SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS: Email server configuration for sending verification and notification emails. Optional — if not configured, email features are disabled.
WILDCARD_DOMAIN: The domain used for endpoint subdomains (e.g., reqpour.yourdomain.com). Requires a wildcard DNS record (*.reqpour.yourdomain.com) and a wildcard SSL certificate.
DNS and SSL Setup
ReqPour uses subdomains for endpoint URLs (e.g., abc123.reqpour.yourdomain.com). This requires:
1. A wildcard DNS record: *.reqpour.yourdomain.com -> your-server-ip
2. A wildcard SSL certificate for *.reqpour.yourdomain.com
For SSL, use Let's Encrypt with DNS-01 challenge (required for wildcard certificates). Caddy or Traefik can automate this. Example Caddy configuration:
*.reqpour.yourdomain.com {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
reverse_proxy api:3000
}Alternatively, use a non-subdomain URL scheme where endpoints use paths instead of subdomains (reqpour.yourdomain.com/e/abc123). This avoids the wildcard DNS/SSL requirement but changes the endpoint URL format.
Updating and Maintenance
Update your self-hosted instance by pulling the latest Docker image:
docker compose pull
docker compose up -dDatabase migrations run automatically on startup. The API server checks the current schema version and applies any pending migrations.
For backups, periodically back up the PostgreSQL database. Request data can be large if you have high traffic — configure request retention to automatically delete old requests and keep database size manageable.
Monitor the server with standard tools: check that the API responds to health check requests at /health, monitor PostgreSQL disk usage and connection count, and watch Redis memory usage. The API server logs to stdout in JSON format for easy integration with log aggregation tools.
Point the CLI at your self-hosted instance using the REQPOUR_API_URL environment variable:
export REQPOUR_API_URL=https://reqpour.yourdomain.com
npx reqpour login
npx reqpour relay --to http://localhost:3000Related
Get started with ReqPour
Catch, inspect, and relay webhooks to localhost. Free to start, $3/mo for Pro.