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)
588 lines
13 KiB
Markdown
588 lines
13 KiB
Markdown
# 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](#quick-reference)
|
|
- [Installation Presets](#installation-presets)
|
|
- [Local (default)](#local-development)
|
|
- [Dev](#development-with-services)
|
|
- [Staging](#staging--cicd)
|
|
- [Production](#production)
|
|
- [Choosing a Preset](#choosing-a-preset)
|
|
- [Advanced Usage](#advanced-usage)
|
|
- [Troubleshooting](#troubleshooting)
|
|
|
|
---
|
|
|
|
## Quick Reference
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
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:**
|
|
```toml
|
|
[database]
|
|
backend = "sqlite"
|
|
path = "~/.local/share/core/workspace.db"
|
|
```
|
|
|
|
**Next Steps:**
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
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:**
|
|
```toml
|
|
[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:**
|
|
```bash
|
|
# 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):**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
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:**
|
|
```yaml
|
|
services:
|
|
surrealdb: # SurrealDB in Docker
|
|
nats: # NATS message broker
|
|
syntaxis-api: # API server
|
|
dashboard: # Web UI
|
|
prometheus: # Metrics collection
|
|
```
|
|
|
|
**Database Configuration:**
|
|
```toml
|
|
[database.surrealdb.docker]
|
|
mode = "docker"
|
|
url = "ws://surrealdb:8000"
|
|
docker_image = "surrealdb/surrealdb:latest"
|
|
```
|
|
|
|
**Startup with Docker Compose:**
|
|
```bash
|
|
# Start all services
|
|
docker-compose -f docker/docker-compose.yml up
|
|
|
|
# Or with provctl
|
|
provctl deploy --config configs/provisioning/services/surrealdb.toml
|
|
```
|
|
|
|
**Health Checks:**
|
|
```bash
|
|
# 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:**
|
|
```yaml
|
|
# 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
|
|
|
|
```bash
|
|
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:**
|
|
```yaml
|
|
# 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:**
|
|
```toml
|
|
[database.surrealdb.kubernetes]
|
|
mode = "kubernetes"
|
|
url = "ws://surrealdb.syntaxis.svc.cluster.local:8000"
|
|
replicas = 3
|
|
```
|
|
|
|
**Deployment:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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):**
|
|
```yaml
|
|
# 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`:
|
|
|
|
```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:
|
|
```bash
|
|
nu scripts/install-syntaxis.nu --preset custom
|
|
```
|
|
|
|
### Declarative Installation
|
|
|
|
Generate a config file and commit it:
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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:**
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# Installation creates backups
|
|
ls ~/.config/syntaxis/archives/
|
|
|
|
# Restore from backup
|
|
cp -r ~/.config/syntaxis/archives/YYYY-MM-DD-HH-MM/* ~/.config/syntaxis/
|
|
```
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
- Read [docs/provisioning.md](docs/provisioning.md) for detailed provisioning information
|
|
- Read [SURREALDB_SETUP_GUIDE.md](SURREALDB_SETUP_GUIDE.md) for database administration
|
|
- Check [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for system architecture
|
|
- See [docker/README.md](docker/README.md) for Docker-specific guidance
|
|
- See [kubernetes/README.md](kubernetes/README.md) for Kubernetes deployment
|
|
|
|
---
|
|
|
|
**Last Updated:** 2025-11-19
|
|
**Related Files:** `configs/installation.toml`, `scripts/install-syntaxis.nu`, `scripts/provisioning/detect-provctl.nu`
|