Self-Hosting Apito
Self-host the open-core Engine for full control, air-gapped deploys, or unlimited local projects. Free Cloud / Pro stay on Apito-managed hosts — this guide is for your stack.
What you run
- Engine — system GraphQL + project secured/public APIs (default port
5050in the image) - Console (recommended) — review drafts and publish
- Backing stores — system DB + Redis (and the project DB driver you configure)
Two supported paths:
| Path | Best for |
|---|---|
CLI local stack (apito init → apito start) |
Laptop / team local Engine |
| Production Compose | VPS / Traefik / pinned image tags |
Path 1 — Local stack with the Apito CLI
Install the CLI, then bootstrap Docker Compose for Engine (+ Console):
# macOS
brew install apito-cli
# or Linux / macOS install script
curl -fsSL https://get.apito.io/install.sh | bash
apito init # writes docker-compose.yml + config with pinned image tags
apito start # pulls Engine/Console images and starts containers
# optional DBs:
# apito start --db system
# apito start --db project
Check health, then open Console and create a project. Point the CLI at your Engine:
apito account create local
# server URL = http://localhost:5050 (or the URL printed by apito start)
apito account test local
apito account select local
Pin or upgrade versions in config.yml, then re-run apito init / apito start. The CLI can pull updates such as ghcr.io/apito-io/engine:<tag>.
Details: CLI Sync and the CLI README.
Path 2 — Production Compose
A reference Compose file ships with this site at /docker-compose.yml (Engine + Console + ArangoDB + Redis + Traefik). Treat it as a template — replace domains, passwords, and image tags for your environment.
Typical shape:
services:
apito:
image: registry.gitlab.com/apito.io/engine:<tag> # or ghcr.io/apito-io/engine:<tag>
environment:
- CORS_ORIGIN=https://console.your-domain.com
- COOKIE_DOMAIN=your-domain.com
# SYSTEM_DB_* / PROJECT_DB_* / KV_HOST = your stores
# expose / reverse-proxy to port 5050
apito-console:
image: registry.gitlab.com/apito-front/apito-console-v4:<tag>
environment:
- VITE_REST_API=https://api.your-domain.com
- VITE_GRAPH_API=https://api.your-domain.com/system/graphql
- VITE_PUBLIC_GRAPH_API=https://api.your-domain.com/secured/graphql
Bring it up with Docker Compose v2, confirm Engine health and Console login, then create a project and Publish schema changes in Console.
Confirm current image registries and tags in Engine releases / your ops channel — do not invent alternate installers.
Schema workflow (same as Cloud)
apito sync --from filesystem --to local --type schema --dir blueprints/newspaper-cms --dry-run
apito sync --from filesystem --to local --type schema --dir blueprints/newspaper-cms --yes
- Sync stages a draft only.
- Console publishes.
- Seed content with SDK / blueprint scripts after publish.
Networking checklist
- Separate hosts or paths for API vs Console
CORS_ORIGIN= Console origin- TLS in front of Engine for production
- Do not expose system GraphQL publicly without auth
Editions note
Self-host = Open Source Engine. Pro Console features (tenant DB UX, billing, advanced schema versioning UI) may require a Pro-capable build — confirm against your release. Workers bindings are a separate runtime; do not assume every Engine image includes them.