Skip to main content
Entri is open source (MIT) and runs on your own infrastructure. One container image serves the web app, the REST and GraphQL APIs, authentication, and the real-time progress channels. MongoDB stores your data and Redis handles caching and cross-process messaging.
The hosted service at app.nt3.io is being retired. If your organization has data there, see Migrating from Entri Cloud.

Architecture

All durable data lives in MongoDB. Back up MongoDB, plus the secrets in your configuration (see Security).

Requirements

  • A Linux host with Docker Engine 24+ and the Compose plugin
  • A DNS name pointing at the host (for HTTPS)
  • Ports 80 and 443 open, if you use the bundled Caddy proxy

Sizing

We do not publish benchmarks. These numbers are starting points, not limits:
  • The Helm chart requests 250m CPU and 512 MiB of memory for Entri, with a 1 GiB memory limit. The bundled MongoDB requests 512 MiB (1 GiB limit) and the bundled Redis 64 MiB (256 MiB limit).
  • For a small team on Docker Compose, a VM with 2 vCPUs and 4 GB of RAM leaves room for Entri, MongoDB, Redis and the operating system. Add memory if you enable Typesense, which keeps its index in RAM.
  • MongoDB disk usage grows with the number of keys, languages, and the translation history. Watch it and grow the volume as needed. The chart’s default volume is 8 GiB.
Large imports and AI batch translations are the heaviest operations. If you see memory pressure during them, raise the Entri memory limit first.

Docker Compose or Kubernetes?

Docker Compose

One VM, everything included: Entri, MongoDB, Redis, and optional Caddy (automatic HTTPS) and Typesense. The quickest path for most teams.

Kubernetes (Helm)

For teams that already run Kubernetes. Works with managed MongoDB and Redis. The chart can also bundle simple single-pod databases.
Both use the same image and the same environment variables.
Run one Entri replica unless your proxy has sticky sessions (cookie affinity). AI batch-translation progress streams are held in process memory. If a request lands on a different replica, its progress stream breaks.

Security

  • The first account bootstraps the instance. On an empty database, the first person to sign up can always create an account, even with DISABLE_SIGNUP=true. Sign up right after you deploy, or keep the instance unreachable until you have.
  • Close sign-up after that. Set DISABLE_SIGNUP=true so only invited email addresses can create accounts. This covers email and password sign-up and social login. GET /api/v1/config reports the current state as signupEnabled.
  • Back up ENCRYPTION_KEY. It encrypts organization AI keys (and cached GitHub installation tokens) at rest. If you lose it or change it, Entri cannot decrypt the stored keys, and every organization has to enter them again. Store it with your other secrets, separately from your database backups.
  • Keep BETTER_AUTH_SECRET stable. It signs sessions. Changing it signs everyone out.
  • Proxy trust. By default (TRUST_PROXY unset), Entri trusts X-Forwarded-For only from loopback, link-local and private-network peers. This covers a proxy in the same Compose network or an in-cluster ingress controller, and stops clients that connect directly from spoofing their IP address. The per-IP rate limiter depends on this. Set TRUST_PROXY only if the proxy in front of Entri has a public IP. See Server settings.
  • Instance-wide AI keys are shared. OPENAI_API_KEY and ANTHROPIC_API_KEY act as a fallback for every organization on the instance that has not set its own keys.
  • Databases are private. The Compose file publishes no host ports for MongoDB or Redis, and both require a password. The Helm chart adds NetworkPolicies for its bundled databases.

Next steps

Deploy with Docker Compose

Deploy with Helm

Configuration reference

Upgrading