2025-10-07 10:59:52 +01:00

686 lines
17 KiB
Markdown

# Provisioning Platform Installer - Nushell Deployment Scripts
Comprehensive Nushell deployment scripts for the Provisioning Platform Installer, providing three deployment modes: interactive, headless, and unattended automation.
## Table of Contents
- [Overview](#overview)
- [Features](#features)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Deployment Modes](#deployment-modes)
- [Interactive Mode](#interactive-mode)
- [Headless Mode](#headless-mode)
- [Unattended Mode](#unattended-mode)
- [Platform Support](#platform-support)
- [Configuration](#configuration)
- [Usage Examples](#usage-examples)
- [Integration](#integration)
- [Troubleshooting](#troubleshooting)
## Overview
The Nushell deployment scripts provide a flexible, automation-friendly way to deploy the Provisioning Platform across multiple container platforms and orchestrators. These scripts complement the Rust TUI installer and enable CI/CD integration.
### Architecture
```
┌─────────────────────────────────────────────────────┐
│ Deployment Entry │
│ ┌──────────┐ ┌──────────┐ ┌─────────────────┐ │
│ │Interactive│ │ Headless │ │ Unattended │ │
│ │ Mode │ │ Mode │ │ Mode │ │
│ └─────┬────┘ └─────┬────┘ └────────┬────────┘ │
└────────┼─────────────┼────────────────┼─────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────┐
│ Core Helper Functions │
│ • Prerequisites Check • Config Validation │
│ • Health Checks • Rollback Management │
│ • Secret Generation • Manifest Creation │
└─────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────┐
│ Platform-Specific Deployers │
│ ┌────────┐ ┌────────┐ ┌───────────┐ ┌────────┐ │
│ │ Docker │ │ Podman │ │Kubernetes │ │OrbStack│ │
│ └────────┘ └────────┘ └───────────┘ └────────┘ │
└─────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────┐
│ Integration Layer │
│ • MCP Server • REST API • Webhooks │
│ • Rust Installer • Notifications • Monitoring │
└─────────────────────────────────────────────────────┘
```
## Features
### Core Features
- **Three Deployment Modes**
- Interactive TUI via Rust installer
- Headless CLI for scripted deployments
- Unattended automation for CI/CD
- **Multi-Platform Support**
- Docker (docker-compose)
- Podman (podman-compose)
- Kubernetes (kubectl)
- OrbStack (native macOS integration)
- **Robust Error Handling**
- Prerequisites validation
- Configuration validation
- Health checks
- Automatic rollback on failure
- **External Integrations**
- MCP (Model Context Protocol) servers
- REST APIs
- Webhook notifications (Slack, Discord, Teams)
- Deployment tracking
### Deployment Modes
#### Solo Mode
- **Target**: Single developer, local development
- **Services**: 3-7 services
- **Resources**: 2 CPU, 4GB RAM
- **Features**: Minimal setup, fast deployment
#### Multi-User Mode
- **Target**: Team collaboration
- **Services**: 7-9 services
- **Resources**: 4 CPU, 8GB RAM
- **Features**: Git server, shared database
#### CI/CD Mode
- **Target**: Automation pipelines
- **Services**: 8-10 services
- **Resources**: 8 CPU, 16GB RAM
- **Features**: API server, registry, automation
#### Enterprise Mode
- **Target**: Production deployments
- **Services**: 15+ services
- **Resources**: 16 CPU, 32GB RAM
- **Features**: Full observability, security, HA
## Prerequisites
### Required Tools
- **Nushell** >= 0.107.0 - Shell and scripting runtime
- **Docker** >= 20.10.0 - Container runtime (for Docker/OrbStack)
- **Podman** >= 3.0.0 - Container runtime (for Podman)
- **kubectl** >= 1.25.0 - Kubernetes CLI (for Kubernetes)
- **Git** >= 2.30.0 - Version control
### Optional Tools
- **podman-compose** - For Podman deployments
- **orb** - OrbStack CLI tools
- **glow** - Markdown rendering for help
### System Resources
Minimum resources depend on deployment mode:
| Mode | CPU Cores | Memory | Disk Space |
|------|-----------|--------|------------|
| Solo | 2 | 4GB | 10GB |
| Multi-User | 4 | 8GB | 20GB |
| CI/CD | 8 | 16GB | 50GB |
| Enterprise | 16 | 32GB | 100GB |
## Installation
### 1. Build Rust Installer
```bash
cd provisioning/platform/installer
cargo build --release
```
### 2. Verify Nushell Scripts
```bash
cd scripts
nu mod.nu
```
### 3. Run Prerequisites Check
```bash
nu -c "use mod.nu *; check-prerequisites"
```
## Deployment Modes
### Interactive Mode
**Best for**: First-time users, exploratory deployments
Launch the Rust TUI installer for guided configuration:
```bash
# Using Nushell
nu -c "use mod.nu *; deploy-interactive"
# Or directly
../target/release/provisioning-installer
```
**Features**:
- Step-by-step wizard
- Visual platform detection
- Service selection UI
- Real-time validation
### Headless Mode
**Best for**: Scripted deployments, known configurations
Deploy via command-line arguments without interactive prompts:
```bash
# Basic deployment
nu -c "use mod.nu *; deploy-headless docker solo"
# With custom domain
nu -c "use mod.nu *; deploy-headless kubernetes enterprise --domain prod.example.com"
# Specific services
nu -c "use mod.nu *; deploy-headless docker solo --services orchestrator,control-center,postgres"
# Auto-confirm
nu -c "use mod.nu *; deploy-headless podman cicd --auto-confirm"
# Config generation only
nu -c "use mod.nu *; deploy-headless docker solo --config-only"
```
**Parameters**:
- `platform`: docker | podman | kubernetes | orbstack
- `mode`: solo | multi-user | cicd | enterprise
- `--domain`: Custom domain (default: localhost)
- `--services`: Comma-separated service list
- `--auto-confirm`: Skip confirmation prompts
- `--config-only`: Generate config without deploying
### Unattended Mode
**Best for**: CI/CD pipelines, automated deployments
Fully automated deployment from configuration files:
```bash
# From TOML file
nu -c "use mod.nu *; deploy-unattended file ./configs/solo-example.toml"
# From MCP server
nu -c "use mod.nu *; deploy-unattended mcp http://mcp-server:8084/config"
# From REST API
nu -c "use mod.nu *; deploy-unattended api http://api.example.com/deployment/config"
# With webhook notifications
nu -c "use mod.nu *; deploy-unattended file ./configs/enterprise-example.toml --webhook-url http://hooks.slack.com/services/..."
# Strict validation
nu -c "use mod.nu *; deploy-unattended file ./config.toml --strict"
```
**Config Sources**:
- `file` - TOML configuration file
- `mcp` - MCP server endpoint
- `api` - REST API endpoint
**Options**:
- `--webhook-url`: Send progress notifications
- `--strict`: Enable strict validation (default: true)
## Platform Support
### Docker
Uses `docker-compose` with overlay files for different modes:
```bash
nu -c "use mod.nu *; deploy-headless docker solo"
```
**Requirements**:
- Docker Engine >= 20.10.0
- docker-compose (standalone or plugin)
**Compose Files**:
- Base: `docker-compose.yaml`
- Overlay: `docker-compose.{mode}.yaml`
### Podman
Uses `podman-compose` for rootless container deployment:
```bash
nu -c "use mod.nu *; deploy-headless podman multi-user"
```
**Requirements**:
- Podman >= 3.0.0
- podman-compose (pip install podman-compose)
**Features**:
- Rootless deployment
- Compatible with Docker Compose files
### Kubernetes
Generates and applies Kubernetes manifests:
```bash
nu -c "use mod.nu *; deploy-headless kubernetes enterprise --domain k8s.example.com"
```
**Requirements**:
- kubectl configured with cluster access
- Kubernetes >= 1.25.0
**Resources Created**:
- Namespace: `provisioning-platform`
- Deployments (one per service)
- Services (ClusterIP)
- ConfigMaps (for configuration)
### OrbStack
Uses OrbStack's optimized Docker on macOS:
```bash
nu -c "use mod.nu *; deploy-headless orbstack solo"
```
**Requirements**:
- OrbStack installed
- orb CLI tools enabled
**Benefits**:
- Fast container startup
- Native macOS integration
- Efficient resource usage
## Configuration
### TOML Configuration Format
```toml
# Platform and mode
platform = "docker" # docker | podman | kubernetes | orbstack
mode = "solo" # solo | multi-user | cicd | enterprise
domain = "localhost"
auto_generate_secrets = true
# Service configuration
[[services]]
name = "orchestrator"
description = "Task coordination"
port = 8080
enabled = true
required = true
[[services]]
name = "control-center"
description = "Web UI"
port = 8081
enabled = true
required = true
```
### Example Configurations
See `configs/` directory for examples:
- `solo-example.toml` - Solo developer setup
- `enterprise-example.toml` - Enterprise production setup
### Environment Variables
Generated `.env` file for Docker/Podman:
```bash
PROVISIONING_MODE=solo
PROVISIONING_DOMAIN=localhost
PROVISIONING_PLATFORM=docker
ORCHESTRATOR_PORT=8080
ORCHESTRATOR_ENABLED=true
CONTROL_CENTER_PORT=8081
CONTROL_CENTER_ENABLED=true
```
## Usage Examples
### Quick Start
```bash
# Interactive mode (recommended for first time)
nu -c "use mod.nu *; deploy-interactive"
# Solo development
nu -c "use mod.nu *; deploy-headless docker solo --auto-confirm"
# Team collaboration
nu -c "use mod.nu *; deploy-headless docker multi-user --domain team.local"
```
### CI/CD Integration
```yaml
# GitLab CI
deploy-provisioning:
stage: deploy
script:
- cd provisioning/platform/installer/scripts
- nu -c "use mod.nu *; deploy-unattended file ../config/cicd-deploy.toml --webhook-url $SLACK_WEBHOOK"
```
```yaml
# GitHub Actions
- name: Deploy Provisioning Platform
run: |
cd provisioning/platform/installer/scripts
nu -c "use mod.nu *; deploy-unattended file ../config/prod-deploy.toml"
```
### Custom Service Selection
```bash
# Only orchestrator and control center
nu -c "use mod.nu *; deploy-headless docker solo --services orchestrator,control-center --auto-confirm"
# Full stack with all optional services
nu -c "use mod.nu *; deploy-headless docker solo --services orchestrator,control-center,coredns,oci-registry,extension-registry,mcp-server,api-gateway"
```
### Production Deployment
```bash
# Generate production config
nu -c "use mod.nu *; deploy-headless kubernetes enterprise --domain prod.acme.com --config-only"
# Review and customize config
vim configs/deployment_*.toml
# Deploy with strict validation
nu -c "use mod.nu *; deploy-unattended file configs/deployment_*.toml --strict --webhook-url https://hooks.slack.com/..."
```
## Integration
### MCP Server Integration
Load configuration from MCP server:
```bash
nu -c "use mod.nu *; deploy-unattended mcp http://mcp-server:8084/config"
```
MCP Request Format:
```json
{
"jsonrpc": "2.0",
"id": 1,
"method": "config/get",
"params": {
"type": "deployment",
"include_defaults": true
}
}
```
### REST API Integration
Fetch deployment config from API:
```bash
nu -c "use mod.nu *; deploy-unattended api https://api.example.com/deployments/config"
```
Expected API Response:
```json
{
"config": {
"platform": "kubernetes",
"mode": "enterprise",
"domain": "k8s.example.com",
"services": [...]
}
}
```
### Webhook Notifications
Send deployment notifications to webhooks:
```bash
# Slack
nu -c "use mod.nu *; notify-slack 'https://hooks.slack.com/...' 'Deployment started' --color good"
# Discord
nu -c "use mod.nu *; notify-discord 'https://discord.com/api/webhooks/...' 'Deployment complete' --success"
# Microsoft Teams
nu -c "use mod.nu *; notify-teams 'https://outlook.office.com/webhook/...' 'Deployment' 'Success' --success"
```
### Calling Rust Installer
Deploy using Rust installer binary:
```bash
# Convert config to CLI args
nu -c "
use mod.nu *;
let config = load-config-from-file ./configs/solo-example.toml;
deploy-with-installer $config --auto-confirm
"
```
## Troubleshooting
### Prerequisites Check Failed
```bash
# Run diagnostics
nu -c "use mod.nu *; check-prerequisites"
# Install missing tools
# macOS
brew install nushell docker git
# Ubuntu/Debian
apt install nushell docker.io git
```
### Platform Not Available
```bash
# Check platform availability
nu -c "use mod.nu *; check-platform-availability docker"
# Verify platform is running
docker ps # Docker
podman ps # Podman
kubectl version # Kubernetes
orb status # OrbStack
```
### Health Checks Failed
```bash
# View service logs
docker-compose logs orchestrator # Docker
podman-compose logs orchestrator # Podman
kubectl logs -n provisioning-platform deployment/orchestrator # Kubernetes
# Manual health check
curl http://localhost:8080/health
```
### Deployment Rollback
Automatic rollback on failure, or manual:
```bash
# Manual rollback
nu -c "
use mod.nu *;
let config = load-config-from-file ./configs/deployment_*.toml;
rollback-deployment $config
"
# Platform-specific
docker-compose down --volumes
podman-compose down --volumes
kubectl delete namespace provisioning-platform
```
### Configuration Validation
```bash
# Validate config file
nu -c "
use mod.nu *;
let config = load-config-from-file ./configs/my-config.toml;
validate-deployment-config $config --strict
"
# Check for errors
# - Missing required fields
# - Invalid platform/mode
# - Required services not enabled
```
## Module Reference
### Main Functions
| Function | Purpose |
|----------|---------|
| `deploy-interactive` | Launch TUI installer |
| `deploy-headless` | CLI deployment |
| `deploy-unattended` | Automated deployment |
| `deploy help` | Show usage help |
### Platform Functions
| Function | Purpose |
|----------|---------|
| `deploy-docker` | Docker deployment |
| `deploy-podman` | Podman deployment |
| `deploy-kubernetes` | Kubernetes deployment |
| `deploy-orbstack` | OrbStack deployment |
### Helper Functions
| Function | Purpose |
|----------|---------|
| `check-prerequisites` | Validate prerequisites |
| `validate-deployment-config` | Validate config |
| `check-deployment-health` | Run health checks |
| `rollback-deployment` | Rollback deployment |
| `generate-secrets` | Generate secrets |
### Integration Functions
| Function | Purpose |
|----------|---------|
| `load-config-from-mcp` | Load from MCP |
| `load-config-from-api` | Load from API |
| `notify-webhook` | Send webhook |
| `deploy-with-installer` | Use Rust installer |
## Best Practices
### 1. Use Configuration Files
Store deployment configs in version control:
```bash
# Bad
nu -c "use mod.nu *; deploy-headless docker solo --services svc1,svc2,svc3"
# Good
nu -c "use mod.nu *; deploy-unattended file ./configs/dev-deploy.toml"
```
### 2. Enable Strict Validation
Use `--strict` for production deployments:
```bash
nu -c "use mod.nu *; deploy-unattended file ./prod.toml --strict"
```
### 3. Use Webhooks for Monitoring
Get notified of deployment status:
```bash
nu -c "use mod.nu *; deploy-unattended file ./config.toml --webhook-url $WEBHOOK"
```
### 4. Test Before Production
Use `--config-only` to preview:
```bash
# Generate and review
nu -c "use mod.nu *; deploy-headless kubernetes enterprise --config-only"
vim configs/deployment_*.toml
# Deploy after review
nu -c "use mod.nu *; deploy-unattended file configs/deployment_*.toml"
```
### 5. Automated Health Checks
Always verify deployment health:
```bash
nu -c "
use mod.nu *;
let config = load-config-from-file ./config.toml;
check-deployment-health $config
"
```
## Contributing
Follow Nushell best practices from `.claude/best_nushell_code.md`:
- Single purpose functions
- Explicit type signatures
- Early validation and fail fast
- Pure functions (mark mutations with `!`)
- Comprehensive error handling
## License
Part of the Provisioning Platform project. See main LICENSE file.
## Support
- **Documentation**: See `docs/` directory
- **Issues**: Open GitHub issues
- **Community**: Join discussions
---
**Version**: 1.0.0
**Nushell**: >= 0.107.0
**Last Updated**: 2025-10-06