Installation
Manor AI supports two common self-hosted workflows:
- Docker Compose for a production-like single-host deployment.
- Local development with Python, Node.js, PostgreSQL, Redis, and MinIO.
Docker Compose
Docker Compose is the recommended first install path.
git clone https://github.com/manor-os/manor-ai.git
cd manor-ai
cp .env.example .env
docker compose up --build -d
This starts the API, web frontend, worker, PostgreSQL, Redis, MinIO, sandbox, and supporting services.
Keep DEPLOYMENT_MODE=oss. A self-hosted deployment can contain multiple users
and Entities with separate permissions; this does not change the license's
restrictions on offering a hosted service to third parties. Configure your
Entity's model provider and BYOK credentials before running AI. Manor-managed
keys are never a fallback, including Gateway and voice calls.
SMTP, Nango/OAuth, Twilio, media providers and Sites hosting are optional.
Missing credentials disable the dependent operation, not the whole Workspace.
Sites require MANOR_SITES_DOMAIN, apex/wildcard DNS, and a reverse proxy with
TLS forwarding site hosts to the API; leave the domain empty to disable hosting.
Stable Flows are enabled even with MANOR_ENV=prod; explicit
FLOWS_AVAILABLE=false disables them. Experimental task engines remain opt-in.
Optional Sites Proxy
Use a separate host from the authenticated application. For example, with
MANOR_SITES_DOMAIN=sites.example.com, point the wildcard DNS to your server
and obtain a certificate covering *.sites.example.com. A standalone Nginx
proxy on that server can use:
server {
listen 443 ssl;
server_name *.sites.example.com;
ssl_certificate /etc/ssl/sites/fullchain.pem;
ssl_certificate_key /etc/ssl/sites/privkey.pem;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8010/api/v1/site-host/;
}
}
The trailing slash maps / and /__manor/* to the Sites API. Do not apply the
application's robots.txt or global noindex headers to site hosts. Custom
domains additionally require registration in Sites, matching DNS and their
own TLS certificates/proxy host configuration. Unknown/unpublished sites 404.
Local Development
Use this path when changing code.
cp .env.example .env
pip install ".[dev]"
cd apps/web
npm ci
cd ../..
./scripts/dev.sh infra
./scripts/dev.sh init
Run the API and web app in separate terminals:
./scripts/dev.sh api
./scripts/dev.sh web
Optional worker:
./scripts/dev.sh worker
Database Initialization
./scripts/dev.sh init runs migrations and seed logic. Docker deployments run
the same initialization path through the container entrypoint.
Updating an Existing Install
For source installs:
git pull
pip install ".[dev]"
cd apps/web && npm ci && cd ../..
docker compose up --build -d
Review release notes before applying updates to shared environments.