8.5 KiB
Reactive Resume v5 with AI Integration - Complete Deployment Guide
🎯 Overview
This document provides complete deployment instructions for Reactive Resume v5 with AI integration on Calypso server. The deployment includes Ollama for local AI features and maintains compatibility with existing v4 configurations.
Deployment Date: 2026-02-16
Status: ✅ PRODUCTION READY
External URL: https://rx.vish.gg
AI Model: llama3.2:3b (2GB)
🏗️ Architecture
Internet (YOUR_WAN_IP)
↓ Port 80/443
Router (Port Forwarding)
↓ 80→8880, 443→8443
Nginx Proxy Manager (Calypso:8880/8443)
↓ Proxy to internal services
Reactive Resume v5 Stack (Calypso:9751)
├── Resume-ACCESS-V5 (Main App)
├── Resume-DB-V5 (PostgreSQL 18)
├── Resume-BROWSERLESS-V5 (PDF Gen)
├── Resume-SEAWEEDFS-V5 (S3 Storage)
└── Resume-OLLAMA-V5 (AI Engine)
🚀 Quick Deployment
Prerequisites
- Router Configuration: Port forwarding 80→8880, 443→8443
- DNS: rx.vish.gg pointing to YOUR_WAN_IP
- SSH Access: To Calypso server (192.168.0.250:62000)
Deploy Everything
# Clone the repo (if not already done)
git clone https://git.vish.gg/Vish/homelab.git
cd homelab/Calypso
# Deploy NPM first (infrastructure)
cd nginx_proxy_manager
./deploy.sh deploy
# Deploy Reactive Resume v5 with AI
cd ../reactive_resume_v5
./deploy.sh deploy
🤖 AI Integration Details
Ollama Configuration
- Model:
llama3.2:3b - Size: ~2GB download
- Purpose: Resume assistance, content generation
- API Endpoint:
http://ollama:11434(internal) - External API:
http://192.168.0.250:11434
AI Features in Reactive Resume v5
- Resume Content Suggestions: AI-powered content recommendations
- Job Description Analysis: Match skills to job requirements
- Skills Optimization: Suggest relevant skills based on experience
- Cover Letter Generation: AI-assisted cover letter writing
Model Performance
- Speed: Fast inference on CPU (3B parameters)
- Quality: Good for resume/professional content
- Memory: ~4GB RAM usage during inference
- Offline: Fully local, no external API calls
📁 Directory Structure
homelab/Calypso/
├── reactive_resume_v5/
│ ├── docker-compose.yml # Main stack definition
│ ├── deploy.sh # GitOps deployment script
│ ├── README.md # Service documentation
│ └── MIGRATION.md # v4 to v5 migration notes
├── nginx_proxy_manager/
│ ├── docker-compose.yml # NPM configuration
│ ├── deploy.sh # NPM deployment script
│ └── README.md # NPM documentation
└── DEPLOYMENT_SUMMARY.md # This deployment overview
🔧 Configuration Details
Environment Variables (Reactive Resume)
# Core Configuration
APP_URL: "https://rx.vish.gg"
NODE_ENV: "production"
PORT: "3000"
# Database
DATABASE_URL: "postgresql://resumeuser:REDACTED_PASSWORD@resume-db:5432/resume"
# AI Integration
AI_PROVIDER: "ollama"
OLLAMA_URL: "http://ollama:11434"
OLLAMA_MODEL: "llama3.2:3b"
# Storage (S3-compatible)
S3_ENDPOINT: "http://seaweedfs:8333"
S3_BUCKET: "reactive-resume"
S3_ACCESS_KEY_ID: "seaweedfs"
S3_SECRET_ACCESS_KEY: "seaweedfs"
# PDF Generation
PRINTER_ENDPOINT: "ws://browserless:3000?token=1234567890"
# SMTP (Gmail)
SMTP_HOST: "smtp.gmail.com"
SMTP_PORT: "465"
SMTP_USER: "your-email@example.com"
SMTP_PASS: "REDACTED_PASSWORD"
SMTP_SECURE: "true"
Port Mapping
Services:
- Resume-ACCESS-V5: 9751:3000 # Main application
- Resume-OLLAMA-V5: 11434:11434 # AI API
- Resume-SEAWEEDFS-V5: 9753:8333 # S3 API (download service)
- Resume-BROWSERLESS-V5: 4000:3000 # PDF generation
- nginx-proxy-manager: 8880:80, 8443:443, 81:81
🛠️ Management Commands
Reactive Resume v5
cd homelab/Calypso/reactive_resume_v5
# Deployment
./deploy.sh deploy # Full deployment
./deploy.sh setup-ollama # Setup AI model only
# Management
./deploy.sh status # Check all services
./deploy.sh logs # View application logs
./deploy.sh restart # Restart services
./deploy.sh stop # Stop all services
./deploy.sh update # Update images and redeploy
Nginx Proxy Manager
cd homelab/Calypso/nginx_proxy_manager
# Deployment
./deploy.sh deploy # Deploy NPM
./deploy.sh cleanup # Clean up broken containers
# Management
./deploy.sh status # Check NPM status
./deploy.sh logs # View NPM logs
./deploy.sh restart # Restart NPM
🌐 Network Configuration
Router Port Forwarding
Configure your router to forward:
- Port 80 → 192.168.0.250:8880 (HTTP)
- Port 443 → 192.168.0.250:8443 (HTTPS)
NPM Proxy Host Configuration
In NPM Admin UI (http://192.168.0.250:81):
-
rx.vish.gg:
- Forward Hostname/IP:
192.168.0.250 - Forward Port:
9751 - Enable SSL with Cloudflare Origin Certificate
- Forward Hostname/IP:
-
rxdl.vish.gg (Download Service):
- Forward Hostname/IP:
192.168.0.250 - Forward Port:
9753 - Enable SSL with Cloudflare Origin Certificate
- Forward Hostname/IP:
🔍 Troubleshooting
AI Features Not Working
# Check Ollama service
./deploy.sh logs | grep ollama
# Verify model is loaded
ssh Vish@192.168.0.250 -p 62000 "sudo /usr/local/bin/docker exec Resume-OLLAMA-V5 ollama list"
# Test AI API directly
curl http://192.168.0.250:11434/api/generate -d '{
"model": "llama3.2:3b",
"prompt": "Write a professional summary for a software engineer",
"stream": false
}'
External Access Issues
# Test DNS resolution
nslookup rx.vish.gg
# Test external connectivity
curl -I https://rx.vish.gg
# Check NPM proxy configuration
./deploy.sh status
Service Health Check
# Check all containers
ssh Vish@192.168.0.250 -p 62000 "sudo /usr/local/bin/docker ps"
# Check specific service logs
ssh Vish@192.168.0.250 -p 62000 "sudo /usr/local/bin/docker logs Resume-ACCESS-V5"
📊 Performance Metrics
Resource Usage (Typical)
- CPU: 2-4 cores during AI inference
- RAM: 6-8GB total (4GB for Ollama + 2-4GB for other services)
- Storage: ~15GB (2GB model + 3GB images + data)
- Network: Minimal (all AI processing local)
Response Times
- App Load: <2s
- AI Suggestions: 3-10s (depending on prompt complexity)
- PDF Generation: 2-5s
- File Upload: <1s (local S3)
🔐 Security Considerations
Access Control
- All services behind NPM reverse proxy
- External access only via HTTPS
- AI processing completely local (no data leaves network)
- Database credentials environment-specific
SSL/TLS
- Cloudflare Origin Certificates in NPM
- End-to-end encryption for external access
- Internal services use HTTP (behind firewall)
🔄 Backup & Recovery
Critical Data Locations
# Database backup
/volume1/docker/rxv5/db/
# File storage backup
/volume1/docker/rxv5/seaweedfs/
# AI model data
/volume1/docker/rxv5/ollama/
# NPM configuration
/volume1/docker/nginx-proxy-manager/data/
Backup Commands
# Create backup
ssh Vish@192.168.0.250 -p 62000 "sudo tar -czf /volume1/backups/rxv5-$(date +%Y%m%d).tar.gz /volume1/docker/rxv5/"
# Restore from backup
ssh Vish@192.168.0.250 -p 62000 "sudo tar -xzf /volume1/backups/rxv5-YYYYMMDD.tar.gz -C /"
📈 Monitoring
Health Endpoints
- Application: http://192.168.0.250:9751/health
- Database: PostgreSQL health checks via Docker
- AI Service: http://192.168.0.250:11434/api/tags
- Storage: SeaweedFS S3 API health
Log Locations
# Application logs
sudo /usr/local/bin/docker logs Resume-ACCESS-V5
# AI service logs
sudo /usr/local/bin/docker logs Resume-OLLAMA-V5
# Database logs
sudo /usr/local/bin/docker logs Resume-DB-V5
🎉 Success Criteria
✅ External Access: https://rx.vish.gg responds with 200
✅ AI Integration: Ollama model loaded and responding
✅ PDF Generation: Browserless service healthy
✅ File Storage: SeaweedFS S3 API functional
✅ Database: PostgreSQL healthy and accessible
✅ Proxy: NPM routing traffic correctly
📞 Support
For issues with this deployment:
- Check service status:
./deploy.sh status - Review logs:
./deploy.sh logs - Verify network connectivity and DNS
- Ensure router port forwarding is correct
- Check NPM proxy host configuration
Last Updated: 2026-02-16
Deployed By: OpenHands GitOps
Version: Reactive Resume v5.0.9 + Ollama llama3.2:3b