Docker & Deploy
Docker (quickest)
docker run -d \
--name cntrlnode \
-p 7474:7474 \
ghcr.io/meetpatell07/cntrlnode:latest
Verify:
curl http://localhost:7474/health
# {"status":"ok","version":"0.1.0-alpha"}
Docker Compose (with PostgreSQL)
# docker-compose.yml
services:
cntrlnode:
image: ghcr.io/meetpatell07/cntrlnode:latest
restart: unless-stopped
ports:
- "7474:7474"
environment:
CNTRLNODE_STORAGE: postgres
CNTRLNODE_DB_URL: postgres://cntrlnode:secret@db:5432/cntrlnode
CNTRLNODE_AUTH_ENABLED: "true"
CNTRLNODE_API_KEYS: "${CNTRLNODE_API_KEYS}"
CNTRLNODE_OLLAMA_HOST: ollama:11434
depends_on:
db:
condition: service_healthy
db:
image: pgvector/pgvector:pg16
restart: unless-stopped
environment:
POSTGRES_DB: cntrlnode
POSTGRES_USER: cntrlnode
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U cntrlnode"]
interval: 5s
retries: 10
ollama:
image: ollama/ollama
restart: unless-stopped
volumes:
- ollama_data:/root/.ollama
volumes:
pgdata:
ollama_data:
docker compose up -d
# Pull the embedding model (first time only)
docker compose exec ollama ollama pull nomic-embed-text
Binary (no Docker)
Download from GitHub Releases:
# macOS (Apple Silicon)
curl -L https://github.com/meetpatell07/cntrlnode/releases/latest/download/cntrlnode-darwin-arm64 \
-o /usr/local/bin/cntrlnode && chmod +x /usr/local/bin/cntrlnode
# Linux (x86_64)
curl -L https://github.com/meetpatell07/cntrlnode/releases/latest/download/cntrlnode-linux-amd64 \
-o /usr/local/bin/cntrlnode && chmod +x /usr/local/bin/cntrlnode
# Start
cntrlnode start
systemd (Linux production)
# /etc/systemd/system/cntrlnode.service
[Unit]
Description=CntrlNode runtime
After=network.target postgresql.service
[Service]
Type=simple
User=cntrlnode
ExecStart=/usr/local/bin/cntrlnode start
Restart=on-failure
RestartSec=5s
EnvironmentFile=/etc/cntrlnode/env
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now cntrlnode
sudo journalctl -u cntrlnode -f
Fly.io
# fly.toml
app = "my-cntrlnode"
primary_region = "iad"
[build]
image = "ghcr.io/meetpatell07/cntrlnode:latest"
[[services]]
internal_port = 7474
protocol = "tcp"
[[services.ports]]
port = 443
handlers = ["tls", "http"]
[env]
CNTRLNODE_PORT = "7474"
CNTRLNODE_STORAGE = "postgres"
flyctl launch --no-deploy
flyctl secrets set CNTRLNODE_API_KEYS=your-key CNTRLNODE_DB_URL=postgres://...
flyctl postgres create --name cntrlnode-db
flyctl postgres attach cntrlnode-db
flyctl deploy
Railway
- New project → Deploy from Docker image →
ghcr.io/meetpatell07/cntrlnode:latest - Add a PostgreSQL database service
- Set environment variables:
CNTRLNODE_STORAGE=postgres,CNTRLNODE_DB_URL=${{Postgres.DATABASE_URL}},CNTRLNODE_AUTH_ENABLED=true,CNTRLNODE_API_KEYS=your-key - Expose port
7474
Health check
All platforms: configure health checks against GET /health.
Path: /health
Interval: 30s
Timeout: 5s
Expected: {"status":"ok"}