Deployment¶
Scripts, Procedures, and Monitoring
Deployment Process¶
Prerequisites¶
- Docker 24.0+
- Docker Compose 2.20+
- Git
- SSL certificates
Deploy Script¶
Location: /opt/vitara-platform/scripts/deploy.sh
#!/bin/bash
set -e
cd /opt/vitara-platform
# Pull latest code
git pull origin main
# Test NGINX config
docker run --rm -v $(pwd)/nginx:/etc/nginx:ro nginx:alpine nginx -t
# Stop containers
docker compose down
# Build images
docker compose build --no-cache
# Start services
docker compose up -d
# Wait and verify
sleep 15
curl -s http://localhost:9080/health
Running Deployment¶
SSL Setup¶
Let's Encrypt Certificate¶
Location: /opt/vitara-platform/scripts/ssl-setup.sh
#!/bin/bash
# Get wildcard certificate
certbot certonly \
--standalone \
-d vitaravox.ca \
-d "*.vitaravox.ca" \
--email admin@vitaravox.com \
--agree-tos
# Restart NGINX
docker restart vitara-nginx
Certificate Renewal¶
Verify Certificate¶
Environment Configuration¶
Production .env¶
# Database
POSTGRES_PASSWORD=<secure-password>
# Environment
NODE_ENV=production
# OSCAR
OSCAR_API_URL=http://15.222.50.48:3000
OSCAR_API_KEY=<api-key>
# Vapi
VAPI_WEBHOOK_SECRET=<webhook-secret>
# Clinic
TRANSFER_NUMBER=+1-604-555-0100
# Admin
ADMIN_JWT_SECRET=<jwt-secret>
ENCRYPTION_KEY=<encryption-key>
Generate Secrets¶
Monitoring¶
Health Checks¶
| Endpoint | Check | Interval |
|---|---|---|
/health |
API health | 30s |
pg_isready |
Database | 10s |
| NGINX status | Proxy | 30s |
Check All Services¶
Expected output:
View Logs¶
# All services
docker compose logs -f
# Specific service
docker compose logs -f vitara-voice-agent
# Last 100 lines
docker compose logs --tail 100 vitara-voice-agent
Backup Procedures¶
Database Backup¶
# Full backup
docker exec vitara-db pg_dump -U vitara vitara > backup_$(date +%Y%m%d).sql
# Compressed
docker exec vitara-db pg_dump -U vitara vitara | gzip > backup_$(date +%Y%m%d).sql.gz
Restore¶
Automated Backup¶
# Add to crontab
0 2 * * * docker exec vitara-db pg_dump -U vitara vitara | gzip > /backups/vitara_$(date +\%Y\%m\%d).sql.gz
Troubleshooting¶
Container Won't Start¶
# Check logs
docker compose logs vitara-voice-agent
# Common issues:
# - DATABASE_URL incorrect
# - Port already in use
# - Missing .env file
Database Connection Failed¶
# Check database is running
docker exec vitara-db pg_isready -U vitara
# Test connection
docker exec vitara-db psql -U vitara -d vitara -c "SELECT 1"
OSCAR Connection Failed¶
# Test from container
docker exec vitara-voice-agent wget -O - http://15.222.50.48:3000/health
# Check credentials
docker exec vitara-voice-agent printenv | grep OSCAR
SSL Certificate Issues¶
# Check expiry
openssl x509 -in /etc/letsencrypt/live/vitaravox.ca/fullchain.pem -noout -dates
# Force renewal
certbot renew --force-renewal
Resource Usage¶
Check Memory¶
Expected Usage¶
| Container | Memory | CPU |
|---|---|---|
| vitara-db | ~100MB | 0.5% |
| vitara-voice-agent | ~150MB | 1% |
| vitara-nginx | ~10MB | 0.1% |
Rollback Procedure¶
Quick Rollback¶
cd /opt/vitara-platform
# Checkout previous version
git checkout HEAD~1
# Redeploy
docker compose down
docker compose build
docker compose up -d
Rollback to Specific Version¶
# List recent commits
git log --oneline -10
# Checkout specific commit
git checkout abc123
# Redeploy
./scripts/deploy.sh
URLs¶
| Service | URL |
|---|---|
| API (HTTPS) | https://api.vitaravox.ca:9443 |
| API (HTTP) | http://api.vitaravox.ca:9080 |
| Health | https://api.vitaravox.ca:9443/health |
| Docs | https://vitdocs.vitaravox.ca |