logo
icon

Convoy

Open-source enterprise-grade webhook gateway for secure, scalable, and reliable webhook delivery. Bundled with PostgreSQL and Redis.

template cover
Deployed0 times
Publisheradrian539859
Created2026-05-20
Tags
ToolBackend

Convoy on Zeabur

Convoy is a fast, secure, open-source webhook gateway. It manages outgoing webhook delivery (with retries, rate limiting, signing, and a delivery log) and incoming webhook ingestion (HMAC verification, sources, replay). This template deploys Convoy in a one-click, self-hosted setup on Zeabur, bundled with the two services it needs: PostgreSQL for persistence and Redis for queueing.

Convoy is developed by Frain Technologies and released under the Elastic License 2.0. This template is a deployment recipe — you self-host your own instance and remain in full control of your data and API keys.


What you get

Three services in a single project:

ServiceImageWhat it does
convoygetconvoy/convoy:latestAPI + dashboard + webhook delivery worker (single binary). Auto-runs DB migrations on startup.
postgresqlpostgres:18Stores projects, endpoints, events, deliveries, attempts
redisredis/redis-stack-server:latestJob queue, rate limit counters, cache

Convoy is wired to PostgreSQL and Redis automatically via Zeabur's private networking — no manual configuration required.

Deploy

  1. Click Deploy on this template.
  2. Pick a Convoy Domain prefix (the default works for testing — you can bind a custom domain later from the Zeabur dashboard).
  3. Wait ~30 seconds for the three services to start. Convoy will run its database migrations automatically on first boot.
  4. Open the URL Zeabur prints for the convoy service.

First login

On first boot, Convoy creates a default superuser. Check the runtime logs of the convoy service — you'll see something like:

Superuser created successfully:
  Username: [email protected]
  Password: default

Log in with those credentials, then immediately:

  1. Create your own organisation and user.
  2. Delete the default [email protected] account.
  3. Rotate the API keys you'll use for real traffic.

Where to go next

  • Send your first webhook: in the dashboard, create a project → add an endpoint → publish an event. Convoy will sign, deliver, and log the attempt.
  • Ingest incoming webhooks: configure a Source under your project, and Convoy gives you a URL like https://convoy.zeabur.app/ingest/<id> to share with the third party sending webhooks.
  • API: full reference at getconvoy.io/docs/api-reference.
  • Self-host docs: getconvoy.io/docs.

Configuration knobs

All Convoy settings can be tuned via the convoy service's Variables tab. Useful ones:

VariableWhat it does
CONVOY_HOSTPublic URL of this Convoy instance. Pre-set to your Zeabur domain. Update if you bind a custom domain.
CONVOY_SIGNUP_ENABLEDtrue allows new user signup from the UI. Set false for a locked-down deployment.
CONVOY_DB_MAX_OPEN_CONNPostgres connection pool size (default 100). Lower this on smaller plans.
CONVOY_SMTP_*SMTP credentials for password-reset / invite emails. Optional.

Full env-var reference: convoy.env.example.

Maintenance

  • Database backups: Zeabur snapshots PostgreSQL automatically. Restore via the Backup tab on the postgresql service.
  • Upgrades: Convoy publishes new versions to getconvoy/convoy:latest. Restart the convoy service to pull the latest image — Convoy will apply any pending DB migrations on the next boot.
  • Resource sizing: For light traffic (~10 req/s), the default 1 vCPU / 1 GB tier per service is fine. Bump CPU on the convoy service first if delivery latency rises.

Troubleshooting

  • 502 on first deploy: Convoy needs ~15 s to run migrations before the HTTP server starts. Refresh after a moment.
  • Migration loop ("retrying in 5s"): PostgreSQL hasn't finished booting. Convoy retries automatically — give it up to a minute.
  • Can't see logs of failed deliveries: check the event_deliveries table in PostgreSQL, or use Convoy's UI under Project → Event Deliveries.

Credits