Epure
Self-hosting

Cheap VPS Epure install + verify (prod overlay)

install error tracking on VPS

Production install on a small VPS: ./configure --prod, deploy overlay, HTTPS proxy, GET /health, DSN then Verify. Commands-only; no RAM remake.

On this pageShow
  1. Provider class
  2. Prod env file
  3. DNS and TLS
  4. Start overlay
  5. Health and register
  6. DSN then Verify
  7. Who should use what
  8. Limitations
  9. Questions

Install Epure on a small VPS with the production path: ./configure --prod (or deploy/env.production.example), docker compose overlay up -d, HTTPS reverse proxy, GET /health, register, copy DSN, Confirm with Verify. As of 2026-09-28 PT this guide is commands-only for a Hetzner CX22-class / DigitalOcean droplet-class box; it does not remake RAM-floor scoreboards.

You want exception tracking on hardware you control using two Compose services (Rust binary + PostgreSQL 16) without a 20-container Sentry self-host. Laptop compose is not production. PaaS one-click is a sibling path. This how-to is the VPS production install + verify narrative.

Unique wedge: Installation § Production commands (configure --prod, deploy/docker-compose.prod.yml, Caddy/nginx, public /health, then Verify). Bias disclosed: Epure first-party docs. Distinct from self-hosted-under-512mb (RAM scoreboard), two-container-error-tracking (architecture), one-click-deploy-epure (PaaS).

Primary how-to: Installation. Env: Configuration. Acceptance: Verify. Pin/init: Quickstart. Context: Welcome.

Provider class

As of 2026-09-28 PT, treat a Hetzner CX22-class or DigitalOcean droplet-class small VPS as the target class for this commands-only path. This article does not publish idle MiB, OOM, or dmesg labs. For dated RAM scoreboards see Self-hosted under 512MB; do not remake that angle here.

Prod env file

Clone https://github.com/epure-sh/epure.git, then run ./configure --prod, or cp deploy/env.production.example .env and replace every CHANGE_ME (openssl rand -hex 24). Fresh Postgres volume; do not reuse a laptop data directory.

Production env vars (Installation)

EPURE_PUBLIC_URL

Value
https://errors.example.com (must be https://)

EPURE_CORS_ORIGINS

Value
App origins, comma-separated; not *

POSTGRES_PASSWORD

Value
Superuser; first empty volume only

EPURE_INGEST_PASSWORD

Value
Ingest role; set on every boot

EPURE_APP_PASSWORD

Value
Dashboard role; set on every boot
DimensionValue
EPURE_PUBLIC_URLhttps://errors.example.com (must be https://)
EPURE_CORS_ORIGINSApp origins, comma-separated; not *
POSTGRES_PASSWORDSuperuser; first empty volume only
EPURE_INGEST_PASSWORDIngest role; set on every boot
EPURE_APP_PASSWORDDashboard role; set on every boot

Leave EPURE_DEV_SEED unset. Overlay forces EPURE_SESSION_SECURE=1 and refuses example passwords. Pin the app image with EPURE_IMAGE when you want a release tag; default pull is ghcr.io/epure-sh/epure:latest. Postgres image is postgres:16-alpine.

DNS and TLS

Point the hostname at the box. Put Caddy or nginx in front of 127.0.0.1:8080 (or your EPURE_PORT). Forward Host, X-Forwarded-For, X-Forwarded-Proto. Allow POST and OPTIONS on /api/{project_id}/envelope/ and /api/{project_id}/store/.

Caddy example: errors.example.com { reverse_proxy 127.0.0.1:8080 }. Start the proxy before you expect browser login; session cookies are Secure-only.

Start overlay

Run docker compose -f docker-compose.yml -f deploy/docker-compose.prod.yml up -d. Postgres is not published on the host. Migrations run on boot; ingest/app role passwords come from .env.

Health and register

Public health: curl -sS https://errors.example.com/health → { "status": "ok" }. On the box, curl -sS http://127.0.0.1:8080/health also works. Open /login; the first register becomes workspace owner. Do not run ./scripts/seed.sh in production.

DSN then Verify

Copy the DSN from Settings → SDK connection. Point your official Sentry SDK at that DSN (sample rates 0), then Sentry.captureException(new Error("Epure verify test")). Expect 202 plus { "id" }, then an Issues row. Match the env chip. Full matrix: Verify.

Who should use what

Use this guide for a VPS production install + verify. Use the one-click post for Render / Railway / Coolify / Dokploy Git import. Use under-512mb for RAM scoreboards. Use two-container for architecture narrative.

Use this guide if

  • You have a small VPS and want the production overlay path.
  • You will terminate HTTPS and Confirm /health then Verify.
  • You need commands-only install without a RAM remake.

Read something else if

Limitations

Laptop compose is not production. No Redis/Kafka defaults. Not 100% Sentry compatible. No idle RAM headline in this URL. Cloud is not live.

  • Do not use root docker-compose.yml as production; use the prod overlay.
  • Epure is not 100% Sentry compatible.
  • Redis, Kafka, and ClickHouse are not default Epure services.
  • This article omits idle MiB / OOM / dmesg labs (commands-only as of 2026-09-28 PT).
  • Do not remake under-512mb, two-container, one-click, or RAM-warning angles here.
  • Cloud is not live.

Deep links: Installation | Configuration | Verify | Quickstart | Welcome.

FAQ

Questions

Can I use the laptop compose file in production?
No. Root docker-compose.yml allows example DB passwords only while EPURE_PUBLIC_URL is localhost. Use deploy/docker-compose.prod.yml and deploy/env.production.example (or ./configure --prod).
Do I need Redis?
No. The stack is two containers: epure + postgres:16-alpine. See Configuration.
How do I start the production overlay?
After ./configure --prod (or filling deploy/env.production.example), run docker compose -f docker-compose.yml -f deploy/docker-compose.prod.yml up -d.
How do I confirm the install?
GET /health on the public origin should return { "status": "ok" }. Then register, copy a DSN, capture an exception, and Confirm with Verify (202 then Issues).
Should I use Coolify or a VPS overlay?
Both are valid. For Git import templates see One-click deploy Epure. This post is the VPS production overlay path.
Why are there no RAM numbers here?
As of 2026-09-28 PT this guide ships commands-only. For dated RAM scoreboards read Self-hosted under 512MB; do not remake that angle in this URL.
Is Epure 100% Sentry compatible?
No. Exception-only on two Compose services; no replay/tracing/profiling as Epure features.