syntaxis/docs/installation-contexts.md
Jesús Pérez 9cef9b8d57 refactor: consolidate configuration directories
Merge _configs/ into config/ for single configuration directory.
Update all path references.

Changes:
- Move _configs/* to config/
- Update .gitignore for new patterns
- No code references to _configs/ found

Impact: -1 root directory (layout_conventions.md compliance)
2025-12-26 18:36:23 +00:00

13 KiB

Installation Contexts Guide

This guide explains the different installation contexts (presets) available for syntaxis and how to choose the right one for your use case.

Table of Contents:


Quick Reference

# Simple dev on laptop (SQLite, no services)
nu scripts/install-syntaxis.nu --preset local

# Dev with services (SurrealDB server, NATS)
nu scripts/install-syntaxis.nu --preset dev

# Staging/CI-CD (Docker services, monitoring)
nu scripts/install-syntaxis.nu --preset staging

# Production (Kubernetes)
nu scripts/install-syntaxis.nu --preset production

# Interactive mode (will ask questions)
nu scripts/install-syntaxis.nu --interactive

# Generate config without installing
nu scripts/install-syntaxis.nu --preset dev --generate-config > my-install.toml

# Install from config file
nu scripts/install-syntaxis.nu --config my-install.toml

Installation Presets

Local Development

Best for: Single developer on a laptop, offline work, minimal setup

nu scripts/install-syntaxis.nu --preset local

Configuration:

  • Database: SQLite (file-based)
  • Services: None (binaries only)
  • provctl: Not needed
  • Startup Time: ~5 minutes
  • Dependencies: Rust toolchain (for building)

What gets installed:

  • syntaxis-cli - Command-line interface
  • syntaxis-tui - Terminal user interface
  • syntaxis-api - Disabled
  • dashboard - Disabled
  • Wrapper scripts for auto-config discovery

Database Configuration:

[database]
backend = "sqlite"
path = "~/.local/share/core/workspace.db"

Next Steps:

# Use the CLI
syntaxis-cli init my-project
syntaxis-cli list

# Or use the TUI
syntaxis-tui

# To upgrade to dev preset later:
nu scripts/install-syntaxis.nu --preset dev

Pros:

  • Minimal installation time
  • No external dependencies
  • Works offline
  • Lightweight (SQLite)
  • Good for learning

Cons:

  • No API/Dashboard
  • No real-time messaging (NATS)
  • Limited scaling
  • SQLite has concurrency limits

Development with Services

Best for: Full-stack development, testing API, dashboard work, local experimentation

nu scripts/install-syntaxis.nu --preset dev

Configuration:

  • Database: SurrealDB (server mode)
  • Services: SurrealDB, NATS, syntaxis-api, Dashboard
  • provctl: Recommended (handles service startup)
  • Startup Time: ~10-15 minutes
  • Dependencies: Docker (optional), SurrealDB CLI, NuShell

What gets installed:

  • All binaries (CLI, TUI, API)
  • syntaxis-api - REST API server (port 3000)
  • dashboard - Web UI (port 8080)
  • SurrealDB configuration
  • NATS configuration (optional)
  • Service startup scripts

Database Configuration:

[database.surrealdb.server]
mode = "server"
url = "ws://127.0.0.1:8000"
namespace = "syntaxis"
database = "projects"

Services:

SurrealDB (Port 8000)
  ↓
syntaxis-api (Port 3000)
  ↓
Dashboard (Port 8080)

Startup with provctl:

# Auto-start services
nu scripts/install-syntaxis.nu --preset dev

# Or manually with provctl
provctl start surrealdb
provctl start nats
provctl start syntaxis-api

# Check status
provctl status

Startup without provctl (manual):

# Terminal 1: Start SurrealDB
surreal start --bind 127.0.0.1:8000 memory

# Terminal 2: Start NATS
nats-server

# Terminal 3: Start API
syntaxis-api

# Terminal 4: Use API/Dashboard
open http://localhost:3000
open http://localhost:8080

Next Steps:

# Test the API
curl http://localhost:3000/health

# Use the CLI
syntaxis-cli list-projects

# Open dashboard in browser
open http://localhost:3000

Pros:

  • Full feature set
  • Can test API integration
  • Dashboard available
  • NATS for async messaging
  • SurrealDB supports scaling
  • provctl automates startup

Cons:

  • More startup time
  • Requires SurrealDB CLI
  • More resource usage
  • Need to manage services

Staging / CI-CD

Best for: Integration testing, CI/CD pipelines, team environments, pre-production validation

nu scripts/install-syntaxis.nu --preset staging

Configuration:

  • Database: SurrealDB (Docker mode)
  • Services: SurrealDB (Docker), NATS (Docker), API, Dashboard, Prometheus
  • provctl: Recommended (manages Docker containers)
  • Startup Time: ~20 minutes
  • Dependencies: Docker, Docker Compose

What gets installed:

  • All binaries
  • Docker Compose configuration
  • Service health checks
  • Prometheus monitoring
  • Automated startup scripts

Docker Services:

services:
  surrealdb:      # SurrealDB in Docker
  nats:           # NATS message broker
  syntaxis-api:   # API server
  dashboard:      # Web UI
  prometheus:     # Metrics collection

Database Configuration:

[database.surrealdb.docker]
mode = "docker"
url = "ws://surrealdb:8000"
docker_image = "surrealdb/surrealdb:latest"

Startup with Docker Compose:

# Start all services
docker-compose -f docker/docker-compose.yml up

# Or with provctl
provctl deploy --config configs/provisioning/services/surrealdb.toml

Health Checks:

# Verify services are healthy
curl http://localhost:3000/health
curl http://localhost:9090/metrics  # Prometheus

# Check service status
provctl status

Ports:

SurrealDB:   8000/tcp
NATS:        4222/tcp
API:         3000/tcp
Dashboard:   8080/tcp
Prometheus:  9090/tcp

CI/CD Integration:

# Example GitHub Actions
- name: Start services
  run: docker-compose -f docker/docker-compose.yml up -d

- name: Wait for API
  run: curl --retry 10 http://localhost:3000/health

- name: Run tests
  run: cargo test --all

Pros:

  • Container-based (reproducible)
  • Easy scaling
  • Monitoring included
  • Great for CI/CD
  • Team-friendly

Cons:

  • Requires Docker
  • More complex setup
  • Higher resource usage
  • Network overhead

Production

Best for: Enterprise deployments, high availability, Kubernetes clusters, managed infrastructure

nu scripts/install-syntaxis.nu --preset production

Configuration:

  • Database: SurrealDB (Kubernetes cluster)
  • Services: All services in Kubernetes with replicas
  • provctl: Optional (K8s manages services)
  • Startup Time: ~30-60 minutes
  • Dependencies: Kubernetes cluster, kubectl, TLS certificates

What gets installed:

  • All binaries
  • Kubernetes manifests
  • Service definitions (Deployments, StatefulSets)
  • Ingress configuration
  • TLS certificates
  • RBAC policies
  • Resource limits
  • Monitoring (Prometheus + Grafana)

Kubernetes Services:

# High-availability setup
- SurrealDB:     3 replicas (StatefulSet)
- NATS:          3 replicas (StatefulSet)
- syntaxis-api:  3 replicas (Deployment)
- Dashboard:     2 replicas (Deployment)
- Prometheus:    1 replica (Deployment)
- Grafana:       1 replica (Deployment)

Database Configuration:

[database.surrealdb.kubernetes]
mode = "kubernetes"
url = "ws://surrealdb.syntaxis.svc.cluster.local:8000"
replicas = 3

Deployment:

# Apply Kubernetes manifests
kubectl apply -f kubernetes/namespace.yaml
kubectl apply -f kubernetes/secrets.yaml
kubectl apply -f kubernetes/configmaps.yaml
kubectl apply -f kubernetes/surrealdb/
kubectl apply -f kubernetes/nats/
kubectl apply -f kubernetes/syntaxis-api/
kubectl apply -f kubernetes/dashboard/

# Check deployment
kubectl get pods -n syntaxis
kubectl get svc -n syntaxis

# Monitor
kubectl logs -n syntaxis deployment/syntaxis-api
kubectl port-forward svc/syntaxis-api 3000:3000

Health Checks:

# Via kubectl
kubectl exec -it svc/surrealdb -- surreal config

# Via port-forward
kubectl port-forward svc/syntaxis-api 3000:3000
curl http://localhost:3000/health

Monitoring:

# Prometheus metrics
kubectl port-forward svc/prometheus 9090:9090
# Visit http://localhost:9090

# Grafana dashboards
kubectl port-forward svc/grafana 3001:3000
# Visit http://localhost:3001

Ingress (External Access):

# Example ingress configuration
ingress.syntaxis.your-domain.com → API (3000)
dashboard.your-domain.com         → Dashboard (8080)

Security:

  • TLS encryption (HTTPS)
  • RBAC policies
  • Network policies
  • Secret management
  • Container security scanning

Pros:

  • High availability
  • Auto-scaling
  • Load balancing
  • Enterprise-grade monitoring
  • Self-healing
  • Rolling updates

Cons:

  • Complex setup
  • Kubernetes knowledge required
  • Expensive infrastructure
  • Operational overhead
  • Steeper learning curve

Choosing a Preset

Decision Tree

Are you developing locally?
├─ YES → Do you want to test the API/Dashboard?
│   ├─ NO  → Use: local
│   └─ YES → Use: dev
└─ NO → Is this for a team/CI-CD?
    ├─ YES → Use: staging
    └─ NO → Is this for production?
        ├─ YES → Use: production
        └─ NOT_SURE → Use: dev (can upgrade later)

Quick Comparison Table

Aspect Local Dev Staging Production
Best for Solo dev API testing CI/CD, teams Enterprise
Database SQLite SurrealDB server SurrealDB Docker SurrealDB K8s
Services None 4 5+ 6+
provctl needed (recommended) (recommended) (K8s manages)
Setup time 5 min 15 min 20 min 60 min
Resource usage Low Medium Medium-High High
Scaling Limited
HA/Replicas
Monitoring
TLS/Security Partial

Advanced Usage

Custom Preset

Create your own preset by extending configs/installation.toml:

[preset.custom]
name = "My Custom Setup"
description = "Custom configuration"
database_backend = "surrealdb"
surrealdb_mode = "server"
auto_start_services = true

[preset.custom.services]
syntaxis_api = { enabled = true, auto_start = true, port = 3001 }
surrealdb = { enabled = true, auto_start = true }
nats = { enabled = false }

Then use:

nu scripts/install-syntaxis.nu --preset custom

Declarative Installation

Generate a config file and commit it:

# Generate config for your team
nu scripts/install-syntaxis.nu --preset dev --generate-config > team-install.toml

# Everyone uses the same config
nu scripts/install-syntaxis.nu --config team-install.toml

Migration Between Presets

# Start with local
nu scripts/install-syntaxis.nu --preset local

# Later, upgrade to dev
nu scripts/install-syntaxis.nu --preset dev

# Then move to staging
nu scripts/install-syntaxis.nu --preset staging

Troubleshooting

"provctl not found"

Problem: Installer says provctl is not available

Solution:

# Install provctl from source
git clone https://github.com/Akasha/provctl
cd provctl
cargo install --path .

# Or use without provctl (manual setup)
nu scripts/install-syntaxis.nu --preset dev --provctl disabled

Services won't start

Problem: SurrealDB or NATS won't start after installation

Solution:

# Check if services are already running
provctl status

# Try manual startup
surreal start --bind 127.0.0.1:8000 memory
nats-server

# Check logs
provctl logs surrealdb
provctl logs nats

Database connection error

Problem: API can't connect to database

Check database mode:

# For dev preset, make sure SurrealDB is running
surreal start --bind 127.0.0.1:8000 memory

# Verify connection
curl ws://127.0.0.1:8000

Port already in use

Problem: Port 3000 or 8000 is already in use

Solution:

# Use different port in installation.toml
[preset.custom.services]
syntaxis_api = { port = 3001 }
surrealdb = { port = 8001 }

# Or kill existing process
lsof -i :3000
kill -9 <PID>

Rollback to previous preset

# Installation creates backups
ls ~/.config/syntaxis/archives/

# Restore from backup
cp -r ~/.config/syntaxis/archives/YYYY-MM-DD-HH-MM/* ~/.config/syntaxis/

Next Steps


Last Updated: 2025-11-19 Related Files: configs/installation.toml, scripts/install-syntaxis.nu, scripts/provisioning/detect-provctl.nu