Skip to docs content
Self-Hosting Apito
Open Source
Updated 2026-08-12
Prerequisites: Docker Engine 20.10+ and Docker Compose 2.x · 2GB+ RAM, 10GB disk

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 5050 in 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 initapito 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
  1. Sync stages a draft only.
  2. Console publishes.
  3. 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.