Server
Deployment
Deploy Aelio Server with Docker, Railway, Render, or Fly.io.
Docker (recommended)
docker build -t aelio/server:latest -f server/Dockerfile .
docker run -p 3010:3010 \
-e AELIO_SDK_SECRET=your-secret \
-e OPENAI_API_KEY=sk-... \
-e AELIO_CONFIG=/config/config.docker.yaml \
-v $(pwd)/config.docker.yaml:/config/config.docker.yaml \
aelio/server:latestThe image is ~190MB (distroless). Includes SQLite, widget bundle, and all runtime dependencies.
Deploy templates
The server/ directory includes ready-made deploy templates:
| Platform | Template |
|---|---|
| Railway | server/deploy/railway/ |
| Render | server/deploy/render/ |
| Fly.io | server/deploy/fly/ |
Production checklist
- Set
AELIO_SDK_SECRETto a strong random value - Set
identity.allow_anonymous: falsein config - Configure
channels.web.allowed_originswith your production domains - Set your LLM API key (
OPENAI_API_KEY, etc.) - Set
AELIO_REQUIRE_LLM_KEY=1to hard-fail without an LLM key - Enable HTTPS (widget requires
wss://in production) - Point your SDK at the production WebSocket URL
Static export (optional)
For static hosting of docs only (not the server):
// next.config.mjs
const config = {
output: 'export',
images: { unoptimized: true },
};Base path (subpath deployment)
const config = {
basePath: '/docs',
};Connecting SDK and widget to production
# Your backend
AELIO_SDK_SECRET=your-secret
AELIO_SERVER_URL=wss://your-aelio-server.com
# Your frontend
NEXT_PUBLIC_AELIO_SERVER_URL=https://your-aelio-server.comHealth monitoring
# Liveness probe
GET /health
# Readiness probe (checks db, migrations, widget, sdk)
GET /readyIn production, /ready redacts the SDK function catalog for security.