Files
boc/vims-backend/docs/DEPLOYMENT.md
T

273 lines
5.0 KiB
Markdown
Raw Normal View History

# VIMS Deployment Guide
## System Requirements
### Minimum
- CPU: 4 cores
- RAM: 8 GB
- Storage: 100 GB SSD
- Network: 100 Mbps
### Recommended
- CPU: 8+ cores
- RAM: 16 GB
- Storage: 500 GB SSD
- Network: 1 Gbps
- GPU: NVIDIA T4 or better (for AI inference)
## Deployment Options
### 1. Docker Compose (Recommended for single server)
```bash
# Clone repository
git clone https://github.com/landvex/vims-backend.git
cd vims-backend
# Create environment file
cp .env.example .env
nano .env
# Start services
docker-compose up -d
# Check status
docker-compose ps
docker-compose logs -f vims-api
```
### 2. Kubernetes (Production)
```bash
# Apply configurations
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/secret.yaml
kubectl apply -f k8s/postgres.yaml
kubectl apply -f k8s/redis.yaml
kubectl apply -f k8s/vims-api.yaml
kubectl apply -f k8s/vims-worker.yaml
kubectl apply -f k8s/ingress.yaml
# Check status
kubectl get pods -n vims
kubectl logs -f deployment/vims-api -n vims
```
### 3. AWS Deployment
#### Using ECS
```bash
# Create cluster
aws ecs create-cluster --cluster-name vims
# Register task definitions
aws ecs register-task-definition --cli-input-json file://ecs/api-task.json
aws ecs register-task-definition --cli-input-json file://ecs/worker-task.json
# Create service
aws ecs create-service \
--cluster vims \
--service-name vims-api \
--task-definition vims-api \
--desired-count 2
```
#### Using EKS
```bash
# Create EKS cluster
eksctl create cluster --name vims --region eu-north-1
# Deploy
kubectl apply -f k8s/
```
## Configuration
### Environment Variables
| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `NODE_ENV` | Yes | development | Environment mode |
| `PORT` | No | 3450 | API port |
| `DB_HOST` | Yes | - | PostgreSQL host |
| `DB_PASSWORD` | Yes | - | Database password |
| `REDIS_HOST` | Yes | - | Redis host |
| `JWT_SECRET` | Yes | - | Secret for JWT tokens |
| `S3_BUCKET` | Yes | - | S3 bucket for images |
| `AWS_ACCESS_KEY_ID` | Yes | - | AWS access key |
| `AWS_SECRET_ACCESS_KEY` | Yes | - | AWS secret key |
### SSL/TLS
#### Using Let's Encrypt
```bash
# Install certbot
docker run -it --rm \
-v vims_certs:/etc/letsencrypt \
certbot/certbot certonly \
--standalone \
-d vims.landvex.com
```
#### Using AWS ACM
```bash
# Request certificate
aws acm request-certificate \
--domain-name vims.landvex.com \
--validation-method DNS
```
## Monitoring
### Prometheus Metrics
Endpoint: `/metrics`
Key metrics:
- `vims_observations_total` - Total observations processed
- `vims_alerts_total` - Total alerts generated
- `vims_detection_duration_seconds` - AI detection duration
- `vims_queue_size` - Current queue size
### Health Checks
- Liveness: `GET /health/live`
- Readiness: `GET /health/ready`
### Logging
Structured JSON logs to stdout. Configure aggregation with:
- ELK Stack
- Datadog
- CloudWatch
## Backup
### Database
```bash
# Automated backup script
#!/bin/bash
BACKUP_DIR="/backups/vims"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
docker exec vims_postgres_1 pg_dump -U vims vims > \
$BACKUP_DIR/vims_$TIMESTAMP.sql
# Upload to S3
aws s3 cp $BACKUP_DIR/vims_$TIMESTAMP.sql \
s3://vims-backups/database/
# Keep last 30 days
find $BACKUP_DIR -name "vims_*.sql" -mtime +30 -delete
```
### Images
```bash
# Sync to S3
aws s3 sync /data/reference-images s3://vims-images/reference/
aws s3 sync /data/observations s3://vims-images/observations/
```
## Scaling
### Horizontal Scaling
```yaml
# docker-compose.yml
services:
vims-worker:
deploy:
replicas: 5
```
### Vertical Scaling
```yaml
# docker-compose.yml
services:
vims-api:
deploy:
resources:
limits:
cpus: '4'
memory: 8G
```
## Security
### Network Security
- Use private subnets for database
- Security groups for API access
- WAF for DDoS protection
### Data Security
- Encrypt data at rest (S3, RDS)
- Encrypt data in transit (TLS 1.3)
- Regular security audits
### Access Control
- Role-based access control (RBAC)
- API key rotation every 90 days
- Audit logging
## Troubleshooting
### Common Issues
#### Database Connection Failed
```bash
# Check PostgreSQL
docker-compose logs postgres
# Verify credentials
docker exec -it vims_postgres_1 psql -U vims -c "\l"
```
#### Queue Not Processing
```bash
# Check Redis
docker-compose exec redis redis-cli ping
# Check workers
docker-compose logs -f vims-worker
```
#### AI Model Not Loading
```bash
# Verify model files
ls -la data/models/
# Check logs
docker-compose logs vims-worker | grep -i "model"
```
## Maintenance
### Updates
```bash
# Pull latest
git pull origin main
# Rebuild
docker-compose build
# Rolling update
docker-compose up -d
```
### Cleanup
```bash
# Remove old images
docker image prune -a
# Clean logs
docker-compose exec vims-api find /app/logs -name "*.log" -mtime +7 -delete
```
## Support
- Documentation: https://docs.landvex.com/vims
- Issues: https://github.com/landvex/vims/issues
- Email: support@landvex.com