Deploy Epure in one click (Render, Railway, Coolify, Dokploy)
deploy self hosted error tracking render railway coolify
Same two-container stack as a VPS: ghcr.io/epure-sh/epure plus PostgreSQL 16. Import compose from GitHub or sync render.yaml. No marketplace export required.
On this pageShowHide
If you searched deploy self hosted error tracking render railway coolify, you probably already rejected Sentry self-host’s container count. You want a working stack tonight without Kafka, and you want the official Sentry SDK after install.
Epure still runs two containers (Two-container guide). The compose files now live in the repo so panels and PaaS import from GitHub instead of hand-copying YAML. Walkthrough: Self-host. Install steps: Installation.
You do not export a template
Render reads render.yaml from the repo. Railway imports deploy/railway/docker-compose.yml once (drag onto the project canvas). Coolify and Dokploy pull compose from a Git path. Railway marketplace publish, Dokploy blueprints PR, and Coolify service catalog are optional distribution, not prerequisites.
What every path runs
epure
- Service
- ghcr.io/epure-sh/epure (pin a tag in prod)
- Role
- Ingest, API, embedded dashboard on :8080
postgres
- Service
- postgres:16-alpine
- Role
- Issues, events, releases, RLS
| Dimension | Service | Role |
|---|---|---|
| epure | ghcr.io/epure-sh/epure (pin a tag in prod) | Ingest, API, embedded dashboard on :8080 |
| postgres | postgres:16-alpine | Issues, events, releases, RLS |
No Redis, no worker fleet. Spike valve and ingest caps are in-process on the Rust binary.
Production templates set EPURE_ALLOW_EXAMPLE_PASSWORDS=0 and three database URLs (superuser, ingest, app). That matches the VPS overlay in deploy/docker-compose.prod.yml, not the localhost-only passwords in the root laptop compose file.
Render (blueprint button)
- Open the Deploy to Render link from the repo README or Self-host.
- Approve the blueprint: private Postgres pserv + public Epure web image.
- Wait for deploy; curl https://YOUR-SERVICE.onrender.com/health → {"status":"ok"}.
- Register at /login, create a project, paste the DSN into your SDK (Quickstart).
Render assembles DATABASE_URL at container start from generated secrets and the private Postgres host. Pin ghcr.io/epure-sh/epure to a release tag when you leave a trial.
Railway (compose import)
- New Railway project → drag deploy/railway/docker-compose.yml from the repo onto the canvas.
- Add shared variables POSTGRES_PASSWORD, EPURE_INGEST_PASSWORD, EPURE_APP_PASSWORD (see deploy/railway/README.md on GitHub).
- Public networking on epure only; volumes on postgres (/var/lib/postgresql/data) and epure (/data/artifacts).
- Open the public URL → /health → sign up → DSN.
Railway does not continuously sync compose from Git; treat import as bootstrap, then attach GitHub per service or publish a template when you want a shareable marketplace URL.
Coolify (Git compose build pack)
- New resource → public Git https://github.com/epure-sh/epure → build pack Docker Compose.
- Base directory: deploy/templates/coolify. Compose file: docker-compose.yml.
- On service epure, set Domains to https://your-host:8080 (internal listen port 8080).
- Deploy; Coolify fills SERVICE_PASSWORD_* and SERVICE_URL_EPURE_8080 from the compose file.
Dokploy (compose from Git)
- Add Compose service → Git repo → compose path deploy/templates/dokploy/docker-compose.yml.
- Set POSTGRES_PASSWORD, EPURE_INGEST_PASSWORD, EPURE_APP_PASSWORD, EPURE_PUBLIC_URL, EPURE_CORS_ORIGINS (openssl rand -hex 24 ×3 for passwords).
- Ensure dokploy-network exists; assign domain to epure:8080.
- Optional marketplace: PR deploy/templates/dokploy/ to Dokploy/templates. Not required for your instance.
VPS path still wins for many teams
If you already run Caddy on a Hetzner box, clone + ./configure --prod + deploy/docker-compose.prod.yml is fewer moving parts than a PaaS bill. RAM story: Self-hosted under 512 MB. Roster context: Sentry alternatives.
After install (every path)
- GET /health on the public origin.
- HTTPS in production (EPURE_SESSION_SECURE=1 on templates).
- SDK: keep @sentry/*, change DSN only. See Sentry SDK compatible.
- Confirm 202 on ingest, then issue in UI. See Verify.
- Source maps: Source maps guide.
Compare hosted stacks: Epure vs Sentry. Integrations by language: Integrations.