Files
microdao-daarion/docs/DEPLOYMENT.md
Ivan Tytar 3cacf67cf5 feat: Initial commit - DAGI Stack v0.2.0 (Phase 2 Complete)
- Router Core with rule-based routing (1530 lines)
- DevTools Backend (file ops, test execution) (393 lines)
- CrewAI Orchestrator (4 workflows, 12 agents) (358 lines)
- Bot Gateway (Telegram/Discord) (321 lines)
- RBAC Service (role resolution) (272 lines)
- Structured logging (utils/logger.py)
- Docker deployment (docker-compose.yml)
- Comprehensive documentation (57KB)
- Test suites (41 tests, 95% coverage)
- Phase 4 roadmap & ecosystem integration plans

Production-ready infrastructure for DAARION microDAOs.
2025-11-15 14:35:24 +01:00

7.0 KiB

DAGI Stack Deployment Guide

This guide covers deploying DAGI Stack in various environments.


🚀 Quick Start (Docker Compose)

Prerequisites

  • Docker 20.10+
  • Docker Compose 2.0+
  • 4GB+ RAM
  • 10GB+ disk space

Steps

  1. Clone repository

    git clone https://github.com/daarion/dagi-stack.git
    cd dagi-stack
    
  2. Configure environment

    cp .env.example .env
    # Edit .env with your tokens and settings
    
  3. Start services

    docker-compose up -d
    
  4. Verify health

    curl http://localhost:9102/health  # Router
    curl http://localhost:8008/health  # DevTools
    curl http://localhost:9010/health  # CrewAI
    curl http://localhost:9200/health  # RBAC
    curl http://localhost:9300/health  # Gateway
    
  5. View logs

    docker-compose logs -f router
    
  6. Stop services

    docker-compose down
    

📋 Service Ports

Service Port Description
DAGI Router 9102 Main routing endpoint
DevTools 8008 File ops, tests, notebooks
CrewAI 9010 Multi-agent workflows
RBAC 9200 Role-based access control
Gateway 9300 Telegram/Discord webhooks
Ollama 11434 Local LLM (optional)

🔧 Production Deployment

Systemd Services (Linux)

  1. Create service file

    sudo nano /etc/systemd/system/dagi-router.service
    
  2. Service configuration

    [Unit]
    Description=DAGI Router Service
    After=network.target
    
    [Service]
    Type=simple
    User=dagi
    WorkingDirectory=/opt/dagi-stack
    Environment="PATH=/opt/dagi-stack/.venv/bin"
    ExecStart=/opt/dagi-stack/.venv/bin/python main_v2.py --port 9102
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    
  3. Enable and start

    sudo systemctl daemon-reload
    sudo systemctl enable dagi-router
    sudo systemctl start dagi-router
    sudo systemctl status dagi-router
    

☸️ Kubernetes Deployment

Basic Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dagi-router
  namespace: dagi-stack
spec:
  replicas: 3
  selector:
    matchLabels:
      app: dagi-router
  template:
    metadata:
      labels:
        app: dagi-router
    spec:
      containers:
      - name: router
        image: daarion/dagi-router:0.2.0
        ports:
        - containerPort: 9102
        env:
        - name: DAGI_ROUTER_CONFIG
          value: /config/router-config.yml
        volumeMounts:
        - name: config
          mountPath: /config
        livenessProbe:
          httpGet:
            path: /health
            port: 9102
          initialDelaySeconds: 10
          periodSeconds: 30
        readinessProbe:
          httpGet:
            path: /health
            port: 9102
          initialDelaySeconds: 5
          periodSeconds: 10
        resources:
          requests:
            memory: "512Mi"
            cpu: "500m"
          limits:
            memory: "1Gi"
            cpu: "1000m"
      volumes:
      - name: config
        configMap:
          name: dagi-router-config
---
apiVersion: v1
kind: Service
metadata:
  name: dagi-router
  namespace: dagi-stack
spec:
  selector:
    app: dagi-router
  ports:
  - protocol: TCP
    port: 9102
    targetPort: 9102
  type: ClusterIP

Deploy

kubectl create namespace dagi-stack
kubectl apply -f k8s/router-deployment.yaml
kubectl apply -f k8s/devtools-deployment.yaml
kubectl apply -f k8s/crewai-deployment.yaml
kubectl apply -f k8s/rbac-deployment.yaml
kubectl apply -f k8s/gateway-deployment.yaml
kubectl apply -f k8s/ingress.yaml

🔒 Security

Environment Variables

Never commit secrets to git. Use:

  • Docker secrets
  • Kubernetes secrets
  • Vault
  • AWS Secrets Manager

Example (Kubernetes):

apiVersion: v1
kind: Secret
metadata:
  name: dagi-secrets
  namespace: dagi-stack
type: Opaque
stringData:
  telegram-token: "your_token_here"
  deepseek-key: "your_key_here"

Network Security

  1. Firewall rules

    • Allow: 9102 (Router), 9300 (Gateway)
    • Deny: 8008, 9010, 9200 (internal only)
  2. TLS/SSL Use reverse proxy (Nginx, Traefik) for HTTPS

  3. Rate limiting Configure in reverse proxy or API gateway


📊 Monitoring

Health Checks

All services expose /health endpoint:

#!/bin/bash
# health-check.sh
services=("9102" "8008" "9010" "9200" "9300")
for port in "${services[@]}"; do
  status=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$port/health)
  if [ "$status" = "200" ]; then
    echo "✅ Port $port: healthy"
  else
    echo "❌ Port $port: unhealthy (HTTP $status)"
  fi
done

Prometheus Metrics (Future)

Add to router:

from prometheus_client import Counter, Histogram
requests_total = Counter('dagi_requests_total', 'Total requests')
request_duration = Histogram('dagi_request_duration_seconds', 'Request duration')

🔄 Updates & Rollback

Docker Compose

# Pull latest images
docker-compose pull

# Restart services
docker-compose up -d

# Rollback
docker-compose down
docker-compose up -d --force-recreate

Kubernetes

# Rolling update
kubectl set image deployment/dagi-router router=daarion/dagi-router:0.3.0

# Rollback
kubectl rollout undo deployment/dagi-router

# Check status
kubectl rollout status deployment/dagi-router

🐛 Troubleshooting

Service not starting

# Check logs
docker-compose logs router

# Or for systemd
sudo journalctl -u dagi-router -f

Connection refused

  • Check firewall rules
  • Verify service is running: systemctl status dagi-router
  • Check port binding: netstat -tulpn | grep 9102

LLM timeout

  • Increase timeout in router-config.yml
  • Check Ollama service: curl http://localhost:11434/api/tags
  • Consider using smaller model or GPU acceleration

RBAC errors

  • Verify RBAC service is running
  • Check database connection
  • Review RBAC logs: docker-compose logs rbac

📈 Scaling

Horizontal Scaling

# Docker Compose
docker-compose up -d --scale router=3

# Kubernetes
kubectl scale deployment/dagi-router --replicas=5

Load Balancing

Use:

  • Nginx
  • Traefik
  • AWS ALB
  • GCP Load Balancer

Example Nginx config:

upstream dagi_router {
    least_conn;
    server router-1:9102;
    server router-2:9102;
    server router-3:9102;
}

server {
    listen 80;
    location / {
        proxy_pass http://dagi_router;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

🔧 Performance Tuning

Router

  • Adjust timeout_ms in config
  • Increase worker processes
  • Enable connection pooling

Database (RBAC)

  • Use PostgreSQL instead of SQLite
  • Add indexes on user_id, dao_id
  • Enable query caching

LLM

  • Use GPU for Ollama
  • Consider model quantization
  • Implement request queuing

📞 Support