Epure
Self-host

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 pageShow
  1. You do not export a template
  2. What every path runs
  3. Render (blueprint button)
  4. Railway (compose import)
  5. Coolify (Git compose build pack)
  6. Dokploy (compose from Git)
  7. VPS path still wins for many teams
  8. After install (every path)
  9. Questions

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

Same product as docker compose up on a VPS

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
DimensionServiceRole
epureghcr.io/epure-sh/epure (pin a tag in prod)Ingest, API, embedded dashboard on :8080
postgrespostgres:16-alpineIssues, 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.

FAQ

Questions

Do I need to publish a Railway or Dokploy marketplace template?
No. Import from GitHub (compose file or render.yaml) is enough. Marketplace publish is optional for a shareable template URL.
Is the laptop docker compose file the same as these templates?
No. Root docker-compose.yml allows example DB passwords only on localhost. PaaS templates and deploy/docker-compose.prod.yml require real passwords and HTTPS-facing URLs. See Installation.
How many containers either way?
Two: epure + postgres. Same constraint as Two-container error tracking.
Can I use Render free tier for production?
Use it to smoke-test install and DSN wiring. Pin image tags and size Postgres disk for real traffic; treat PaaS like any managed box you own backups on.
Where is the compose source of truth?
The public repo github.com/epure-sh/epure: render.yaml, deploy/railway/, deploy/templates/. Docs: Installation § PaaS.