@aaswe/codebase-ai
Version:
AI-Assisted Software Engineering (AASWE) - Rich codebase context for IDE LLMs
684 lines (540 loc) • 14.4 kB
Markdown
# AASWE Deployment Guide
## Overview
This guide covers deploying the AI-Assisted Software Engineering (AASWE) system for production use and distribution via NPM.
## Table of Contents
1. [NPM Package Distribution](#npm-package-distribution)
2. [Docker Compose Deployment](#docker-compose-deployment)
3. [Local Development Setup](#local-development-setup)
4. [Production Deployment](#production-deployment)
5. [Configuration Management](#configuration-management)
6. [Monitoring and Maintenance](#monitoring-and-maintenance)
## NPM Package Distribution
### Package Structure
The AASWE system is distributed as a global NPM package with the following structure:
```
@aaswe/codebase-ai/
├── package.json
├── README.md
├── bin/
│ └── aaswe # Global CLI executable
├── dist/ # Compiled TypeScript
├── docker-compose.yml # Complete system deployment
├── .env.example # Environment template
└── docs/ # Documentation
```
### Publishing to NPM
#### Prerequisites
1. **NPM Account**: Ensure you have an NPM account with publishing permissions
2. **Organization Setup**: Create `@aaswe` organization on NPM
3. **Build System**: Ensure TypeScript compilation works correctly
#### Publishing Steps
1. **Prepare Package**:
```bash
# Build the project
npm run build
# Update version
npm version patch|minor|major
# Test package locally
npm pack
npm install -g ./aaswe-codebase-ai-*.tgz
```
2. **Publish Package**:
```bash
# Login to NPM
npm login
# Publish to NPM registry
npm publish --access public
# Verify publication
npm view @aaswe/codebase-ai
```
3. **Post-Publication**:
```bash
# Test global installation
npm install -g @aaswe/codebase-ai
# Verify CLI works
aaswe --version
aaswe --help
```
### Package Configuration
#### package.json Configuration
```json
{
"name": "@aaswe/codebase-ai",
"version": "1.0.0",
"description": "AI-Assisted Software Engineering with automatic codebase analysis",
"main": "dist/index.js",
"bin": {
"aaswe": "bin/aaswe"
},
"files": [
"dist/",
"bin/",
"docker-compose.yml",
".env.example",
"docs/",
"README.md"
],
"keywords": [
"ai",
"software-engineering",
"code-analysis",
"llm",
"neo4j",
"ttl",
"mcp"
],
"engines": {
"node": ">=18.0.0"
},
"os": ["darwin", "linux", "win32"],
"preferGlobal": true
}
```
#### CLI Executable (bin/aaswe)
```bash
#!/usr/bin/env node
const path = require('path');
const { spawn } = require('child_process');
// Get the installation directory
const installDir = path.dirname(__dirname);
const cliPath = path.join(installDir, 'dist', 'cli', 'index.js');
// Execute the CLI with all arguments
const child = spawn('node', [cliPath, ...process.argv.slice(2)], {
stdio: 'inherit',
cwd: process.cwd()
});
child.on('exit', (code) => {
process.exit(code);
});
```
## Docker Compose Deployment
### Complete System Deployment
The system includes a comprehensive Docker Compose setup for easy deployment:
```yaml
# docker-compose.yml
version: '3.8'
services:
# Neo4j Database
neo4j:
image: neo4j:5.15-community
container_name: aaswe-neo4j
ports:
- "7474:7474" # HTTP
- "7687:7687" # Bolt
environment:
NEO4J_AUTH: neo4j/aaswe-password
NEO4J_PLUGINS: '["apoc"]'
NEO4J_dbms_security_procedures_unrestricted: apoc.*
volumes:
- neo4j_data:/data
- neo4j_logs:/logs
healthcheck:
test: ["CMD-SHELL", "cypher-shell -u neo4j -p aaswe-password 'RETURN 1'"]
interval: 30s
timeout: 10s
retries: 3
# Redis Cache
redis:
image: redis:7-alpine
container_name: aaswe-redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 3
# AASWE Server
aaswe-server:
build:
context: .
dockerfile: Dockerfile
container_name: aaswe-server
ports:
- "3001:3001" # MCP Server
- "8080:8080" # Health/Admin
environment:
- NODE_ENV=production
- NEO4J_URI=bolt://neo4j:7687
- NEO4J_USERNAME=neo4j
- NEO4J_PASSWORD=aaswe-password
- REDIS_URL=redis://redis:6379
- MCP_SERVER_PORT=3001
- ADMIN_PORT=8080
volumes:
- ./projects:/app/projects # Mount project directories
- aaswe_logs:/app/logs
depends_on:
neo4j:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"]
interval: 30s
timeout: 10s
retries: 3
volumes:
neo4j_data:
neo4j_logs:
redis_data:
aaswe_logs:
networks:
default:
name: aaswe-network
```
### Deployment Commands
```bash
# Deploy complete system
docker-compose up -d
# Check service health
docker-compose ps
docker-compose logs -f aaswe-server
# Scale services (if needed)
docker-compose up -d --scale aaswe-server=2
# Update services
docker-compose pull
docker-compose up -d --force-recreate
# Backup data
docker-compose exec neo4j neo4j-admin dump --database=neo4j --to=/data/backup.dump
docker cp aaswe-neo4j:/data/backup.dump ./backups/
# Restore data
docker cp ./backups/backup.dump aaswe-neo4j:/data/
docker-compose exec neo4j neo4j-admin load --from=/data/backup.dump --database=neo4j --force
```
## Local Development Setup
### Quick Start
```bash
# Install globally
npm install -g @aaswe/codebase-ai
# Initialize in project directory
cd /path/to/your/project
aaswe init
# Start services
aaswe start
# Analyze codebase
aaswe analyze
# View results
aaswe status
```
### Manual Setup
```bash
# Clone repository
git clone https://github.com/your-org/aaswe-eng.git
cd aaswe-eng
# Install dependencies
npm install
# Setup environment
cp .env.example .env.aaswe
# Edit .env.aaswe with your configuration
# Build project
npm run build
# Start development services
docker-compose -f docker-compose.dev.yml up -d
# Run CLI
npm run cli -- analyze --project ./test-project
```
### Development Environment Variables
```bash
# .env.aaswe (Development)
NODE_ENV=development
LOG_LEVEL=debug
# Neo4j Configuration
NEO4J_URI=bolt://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=aaswe-password
NEO4J_DATABASE=neo4j
# Redis Configuration
REDIS_URL=redis://localhost:6379
# MCP Server Configuration
MCP_SERVER_PORT=3001
MCP_SERVER_HOST=localhost
# Analysis Configuration
ANALYSIS_CONCURRENCY=4
ANALYSIS_TIMEOUT=300000
TTL_OUTPUT_DIR=./knowledge
# Git Integration
GIT_HOOKS_ENABLED=true
AUTO_ANALYSIS_ON_COMMIT=true
```
## Production Deployment
### System Requirements
#### Minimum Requirements
- **CPU**: 2 cores
- **RAM**: 4GB
- **Disk**: 20GB SSD
- **Network**: 100Mbps
- **OS**: Linux (Ubuntu 20.04+), macOS, Windows 10+
#### Recommended Requirements
- **CPU**: 4+ cores
- **RAM**: 8GB+
- **Disk**: 50GB+ SSD
- **Network**: 1Gbps
- **OS**: Linux (Ubuntu 22.04 LTS)
### Production Configuration
```bash
# .env.aaswe (Production)
NODE_ENV=production
LOG_LEVEL=info
# Security
JWT_SECRET=your-secure-jwt-secret
API_KEY=your-secure-api-key
CORS_ORIGINS=https://your-domain.com
# Database Configuration
NEO4J_URI=bolt://neo4j-cluster:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=your-secure-password
NEO4J_DATABASE=production
# Redis Configuration
REDIS_URL=redis://redis-cluster:6379
REDIS_PASSWORD=your-redis-password
# Performance Tuning
ANALYSIS_CONCURRENCY=8
MAX_FILE_SIZE=10485760 # 10MB
CACHE_TTL=3600
CONNECTION_POOL_SIZE=20
# Monitoring
METRICS_ENABLED=true
HEALTH_CHECK_INTERVAL=30000
LOG_RETENTION_DAYS=30
```
### Production Deployment Steps
1. **Server Preparation**:
```bash
# Update system
sudo apt update && sudo apt upgrade -y
# Install Docker and Docker Compose
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# Install Node.js (for CLI)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Install AASWE globally
sudo npm install -g @aaswe/codebase-ai
```
2. **Service Deployment**:
```bash
# Create deployment directory
sudo mkdir -p /opt/aaswe
cd /opt/aaswe
# Copy configuration
sudo cp /path/to/.env.aaswe .
sudo cp /path/to/docker-compose.yml .
# Set permissions
sudo chown -R $USER:$USER /opt/aaswe
# Deploy services
docker-compose up -d
# Verify deployment
docker-compose ps
curl http://localhost:8080/health
```
3. **SSL/TLS Setup** (with Let's Encrypt):
```bash
# Install Certbot
sudo apt install certbot
# Get SSL certificate
sudo certbot certonly --standalone -d your-domain.com
# Update Docker Compose with SSL
# Add nginx reverse proxy with SSL termination
```
### Load Balancing and High Availability
```yaml
# docker-compose.prod.yml
version: '3.8'
services:
# Load Balancer
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/etc/ssl/certs
depends_on:
- aaswe-server-1
- aaswe-server-2
# AASWE Server Instances
aaswe-server-1:
extends:
file: docker-compose.yml
service: aaswe-server
container_name: aaswe-server-1
aaswe-server-2:
extends:
file: docker-compose.yml
service: aaswe-server
container_name: aaswe-server-2
# Neo4j Cluster
neo4j-core-1:
image: neo4j:5.15-enterprise
environment:
NEO4J_AUTH: neo4j/aaswe-password
NEO4J_dbms_mode: CORE
NEO4J_causal__clustering_initial__discovery__members: neo4j-core-1:5000,neo4j-core-2:5000,neo4j-core-3:5000
# Redis Cluster
redis-master:
image: redis:7-alpine
command: redis-server --appendonly yes --replica-announce-ip redis-master
redis-replica:
image: redis:7-alpine
command: redis-server --slaveof redis-master 6379
```
## Configuration Management
### Environment Configuration
The system supports multiple configuration methods:
1. **Environment Files**: `.env.aaswe`, `.env`
2. **Environment Variables**: Direct system environment
3. **CLI Arguments**: Command-line overrides
4. **Configuration Files**: JSON/YAML configuration
### Configuration Hierarchy
```
CLI Arguments (highest priority)
↓
Environment Variables
↓
.env.aaswe file
↓
.env file
↓
Default values (lowest priority)
```
### Configuration Validation
```typescript
// Configuration validation schema
const configSchema = {
neo4j: {
uri: { required: true, type: 'string' },
username: { required: true, type: 'string' },
password: { required: true, type: 'string' }
},
mcp: {
port: { required: true, type: 'number', min: 1024, max: 65535 },
host: { required: false, type: 'string', default: 'localhost' }
},
analysis: {
concurrency: { required: false, type: 'number', min: 1, max: 16, default: 4 },
timeout: { required: false, type: 'number', min: 30000, default: 300000 }
}
};
```
## Monitoring and Maintenance
### Health Monitoring
```bash
# Check system health
aaswe health
# Check individual services
curl http://localhost:8080/health
curl http://localhost:7474/db/system/tx/commit # Neo4j
redis-cli ping # Redis
```
### Metrics Collection
The system provides comprehensive metrics:
```typescript
// Available metrics endpoints
GET /metrics/system // System performance
GET /metrics/analysis // Analysis statistics
GET /metrics/neo4j // Database metrics
GET /metrics/mcp // MCP server metrics
```
### Log Management
```bash
# View logs
docker-compose logs -f aaswe-server
aaswe logs --tail 100
# Log rotation configuration
# /etc/logrotate.d/aaswe
/opt/aaswe/logs/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 aaswe aaswe
}
```
### Backup and Recovery
```bash
# Automated backup script
#!/bin/bash
BACKUP_DIR="/opt/aaswe/backups"
DATE=$(date +%Y%m%d_%H%M%S)
# Neo4j backup
docker-compose exec neo4j neo4j-admin dump --database=neo4j --to=/data/backup_${DATE}.dump
docker cp aaswe-neo4j:/data/backup_${DATE}.dump ${BACKUP_DIR}/
# Configuration backup
tar -czf ${BACKUP_DIR}/config_${DATE}.tar.gz .env.aaswe docker-compose.yml
# Cleanup old backups (keep 30 days)
find ${BACKUP_DIR} -name "*.dump" -mtime +30 -delete
find ${BACKUP_DIR} -name "*.tar.gz" -mtime +30 -delete
```
### Performance Tuning
#### Neo4j Optimization
```bash
# Neo4j configuration tuning
NEO4J_dbms_memory_heap_initial__size=2G
NEO4J_dbms_memory_heap_max__size=4G
NEO4J_dbms_memory_pagecache_size=2G
NEO4J_dbms_tx__log_rotation_retention__policy=100M size
```
#### Application Optimization
```bash
# Node.js optimization
NODE_OPTIONS="--max-old-space-size=4096"
UV_THREADPOOL_SIZE=16
# Analysis optimization
ANALYSIS_BATCH_SIZE=50
ANALYSIS_PARALLEL_FILES=10
TTL_CACHE_SIZE=1000
```
### Troubleshooting
#### Common Issues
1. **Neo4j Connection Issues**:
```bash
# Check Neo4j status
docker-compose exec neo4j cypher-shell -u neo4j -p aaswe-password "RETURN 1"
# Reset Neo4j password
docker-compose exec neo4j cypher-shell -u neo4j -p neo4j "ALTER CURRENT USER SET PASSWORD 'aaswe-password'"
```
2. **Memory Issues**:
```bash
# Check memory usage
docker stats
free -h
# Increase container memory limits
# In docker-compose.yml:
deploy:
resources:
limits:
memory: 4G
```
3. **Analysis Performance**:
```bash
# Check analysis logs
aaswe logs --level debug --component analysis
# Reduce concurrency
export ANALYSIS_CONCURRENCY=2
# Increase timeout
export ANALYSIS_TIMEOUT=600000
```
### Support and Updates
#### Getting Support
1. **Documentation**: Check docs/ directory
2. **GitHub Issues**: Report bugs and feature requests
3. **Community**: Join discussions and forums
4. **Enterprise Support**: Contact for commercial support
#### Updates and Upgrades
```bash
# Update NPM package
npm update -g @aaswe/codebase-ai
# Update Docker images
docker-compose pull
docker-compose up -d --force-recreate
# Database migrations (if needed)
aaswe migrate --from-version 1.0.0 --to-version 1.1.0
```
This deployment guide provides comprehensive instructions for deploying AASWE in various environments, from local development to production clusters. The system is designed to be scalable, maintainable, and production-ready.