Self-Host (Business tier)
Self-Host
Section titled “Self-Host”Business-tier subscribers can run ACECode on their own infrastructure. Your code, your embeddings, and your LLM keys stay inside your perimeter — ACE talks to your chosen LLM providers directly, never to our cloud.
What you provision
Section titled “What you provision”A single Linux VPS or container can run the entire stack. Minimum specs:
| Component | Spec | Notes |
|---|---|---|
| CPU | 4 vCPU | Indexing parallelism scales linearly |
| RAM | 8 GB | Postgres + Redis + Node.js |
| Disk | 50 GB SSD | Chunks + embeddings + KB; scales with indexed lines |
| OS | Ubuntu 22.04 / 24.04, Debian 12, or Docker-capable host |
Production recommended: 6 vCPU / 12 GB RAM / 100 GB SSD. This matches our hosted instance and handles ~5M indexed chunks comfortably.
Stack overview
Section titled “Stack overview”┌─────────────────────────────────────────┐│ Caddy (reverse proxy) ││ TLS termination, HTTP/2, automatic LE │└────────────────────┬────────────────────┘ ↓┌─────────────────────────────────────────┐│ @ace/api (Hono on Node 22+) ││ MCP server + REST API + indexer │└─────┬─────────────────────────┬─────────┘ ↓ ↓┌─────────────┐ ┌──────────────┐│ PostgreSQL │ │ Redis 7 ││ + pgvector │ │ ││ (all data) │ │ (cache) │└─────────────┘ └──────────────┘ ↑┌─────────────────────────────────────────┐│ External LLM + Embedding providers ││ Voyage (embed) + your choice of LLM │└─────────────────────────────────────────┘Quick start (Docker Compose)
Section titled “Quick start (Docker Compose)”-
Get the Docker Compose bundle
Business tier customers receive a private Compose bundle. The bundle ships:
docker-compose.yml— services:api,postgres,redis,caddyCaddyfile— TLS-terminated reverse proxy.env.example— required env varsinit.sql— pgvector extension + initial migrations
-
Provide LLM keys
ACE doesn’t ship LLM credentials. Add your own to
.env:Terminal window # Required: embedding providerVOYAGE_API_KEY=pa-...# At least one LLM provider (more = better fallback)XAI_API_KEY=xai-...GOOGLE_API_KEY=...OPENAI_API_KEY=sk-... # or any OpenAI-compatible endpointNINEROUTER_BASE_URL=http://... # if using 9router gateway -
Set your domain + license key
Terminal window ACE_DOMAIN=ace.your-company.comACE_LICENSE_KEY=<provided-with-subscription> -
Start the stack
Terminal window docker compose up -ddocker compose exec api pnpm db:push # apply schemadocker compose exec api pnpm seed:admin # create first admin user -
Verify
Terminal window curl https://ace.your-company.com/v1/health# → { "status": "ok", "version": "x.y.z" } -
Connect the CLI
Terminal window export ACE_API_URL=https://ace.your-company.comexport ACE_API_KEY=<from-admin-dashboard>ace initace index
Self-host vs hosted differences
Section titled “Self-host vs hosted differences”| Feature | Hosted (api.acecode.dev) | Self-host (Business) |
|---|---|---|
| Latency from your region | Depends — US-east origin | Wherever you put it |
| Code privacy | Hosted on our infra | Stays inside your perimeter |
| LLM provider keys | We provide + pool | You provide + manage |
| Indexed-chunk limit | Tier-capped | Bounded by your disk |
| Upgrades | Automatic | git pull && docker compose up -d |
| Backup | Automatic snapshots, off by default | Your responsibility |
| SSO | Not yet | SAML 2.0 / OIDC (Business only) |
| Audit log | Not surfaced | Postgres admin_activity_log table |
| Support SLA | Best-effort | 24h response (Business) |
Migrating from hosted to self-host
Section titled “Migrating from hosted to self-host”If you started on hosted and want to move on-premises:
- Export —
ace export --project=<slug>produces a tarball with files + chunks + embeddings + memories. Embeddings are portable (same Voyage model on both sides). - Restore — on your self-hosted instance:
ace import <tarball>re-creates the project with all data. - Switch endpoint — point your CLI / VS Code extension at the new
host:
ACE_API_URL=https://ace.your-company.com.
Embeddings re-importing avoids re-billing Voyage tokens. Expect ~5 minutes per 100K chunks for the import step.
Hardening checklist
Section titled “Hardening checklist”- Postgres on a private network, not bound to public IP
- Redis bound to
127.0.0.1only (it does not need network access) - Caddy auto-HTTPS, force HTTPS redirect
- LLM provider keys in a secrets manager, not in
.envon disk - Daily
pg_dumpto off-host storage - OS auto-updates enabled (
unattended-upgradeson Debian/Ubuntu) - Firewall: only ports 80 + 443 open inbound
Support
Section titled “Support”Business-tier self-host comes with:
- Private support channel (Slack Connect or Discord)
- 24h response SLA on infra issues
- Direct line to the founding team for architectural questions
- Pre-release access to new MCP tools
Email [email protected] for self-host onboarding.