Skip to content

Choose where to run LyEve

LyEve ships as two container images. You run each one where it fits, next to a database you provide.

ImageWhat it isListens on
ghcr.io/lyeve-labs/lyeve-coreThe engine: the Admin API and the Content API3001 (Admin API), 3002 (Content API)
ghcr.io/lyeve-labs/lyeve-adminThe admin console, a Node server that calls the engine for the browser3002

The engine is a long-running server. It keeps a pool of database connections open, holds its signing key, and applies its migrations when it starts. A platform that starts a process per request, such as Vercel Functions, Cloudflare Workers or Netlify Functions, cannot host it. Concepts explains what each API is for.

HostBest forWhat you give upGuide
DockerTrying LyEve, or one server you manage yourselfYou wire the database, the proxy and TLSDocker images
Docker ComposeThe whole stack on one server: engine, admin console, Postgres and TLSOne machine, so no failoverDocker Compose
KubernetesSeveral replicas, rolling deploys and a cluster you already runMore than one replica needs Redis, an S3 bucket and a shared signing keyKubernetes
Google Cloud RunAn engine that scales to zero and bills per requestOne API per service, cold starts, and a new signing key per instanceCloud Run
Fly.ioBoth APIs public from one small MachineUsage is billed, the Admin API answers on port 8443, and each Machine start signs everyone out unless a volume keeps the signing keyFly.io
RailwayBoth APIs from one service, with a volume for the signing keyNo lasting free plan, usage is billedRailway
RenderA free engine for a demo or stagingOne API per service, and a free service spins down and signs everyone outRender
Free-tier stackAn engine and a database at $0 a monthCold starts, tight connection limits, and no free host for the admin consoleFree-tier stack
Stateless modeA webhook relay in one container, with no databaseNo admin console, one tenant, and nothing kept across a restartStateless mode

The engine stores everything in one database. It reads the type from the scheme of DATABASE_URL and creates its tables on first start.

DatabaseDATABASE_URL form
PostgreSQLpostgres://user:pass@host:5432/lyeve?sslmode=require (or postgresql://)
MySQL 8 or latermysql://user:pass@tcp(host:3306)/lyeve, with the host in tcp(...)
SQL Server 2019 or later, and Azure SQLsqlserver://user:pass@host:1433?database=lyeve

SQL Server needs read committed snapshot isolation turned on before it takes traffic. See Installation.

Use a dedicated database user. A production engine refuses to start as postgres on PostgreSQL, root on MySQL or sa on SQL Server.

SQLite, Turso and libSQL are not supported

Section titled “SQLite, Turso and libSQL are not supported”

The engine reads any URL whose scheme is not one of the above as PostgreSQL. A URL for SQLite, Turso or libSQL therefore fails to connect, and the engine does not start. For a free database with no server to run, use managed Postgres instead:

  • Supabase: free managed Postgres.
  • Neon: free serverless Postgres that suspends when idle.

Both are a DATABASE_URL value and nothing more. For an engine with no database at all, see Stateless mode.

The admin console needs a server, not Vercel or Cloudflare Pages

Section titled “The admin console needs a server, not Vercel or Cloudflare Pages”

The admin console ships only as the container image ghcr.io/lyeve-labs/lyeve-admin. Vercel and Cloudflare Pages build a site from its source repository and do not run a container image, and the console's source is not published. The console cannot be hosted on either.

Run the image on a host that runs containers. The console's server sends every /api call to one base URL, CORE_INTERNAL_URL, so that URL must route /api/admin to the engine's port 3001 and every other /api path to port 3002. A small proxy or an Ingress does that:

  • Docker Compose: the engine, the console, Postgres and a TLS proxy on one host.
  • Kubernetes: the same images on a cluster, routed by an Ingress.

The single-container engine hosts above give the engine no such route, so the free-tier stack has no host for the console. Run it with Compose on a server you control.