Files
Guido.Tech/RENDER_DEPLOYMENT.md
2025-10-19 06:58:39 -05:00

212 lines
5.3 KiB
Markdown

# Render.com Deployment Guide
## Quick Start
### 1. Render.com Configuration
**Service Type:** Web Service
**Build Command:**
```bash
pip install -r requirements.txt
```
**Start Command (choose one):**
#### Option A: Shell Script (Recommended)
```bash
./start.sh
```
#### Option B: Python Supervisor
```bash
python start.py
```
#### Option C: Direct Command
```bash
python scripts/serve.py & python ai_intelligence_layer/main.py
```
### 2. Environment Variables
Set these in Render.com dashboard:
**Required:**
```bash
GEMINI_API_KEY=your_gemini_api_key_here
ENVIRONMENT=production
PRODUCTION_URL=https://your-app-name.onrender.com # Your Render app URL
```
**Optional:**
```bash
ELEVENLABS_API_KEY=your_elevenlabs_api_key_here # For voice features
GEMINI_MODEL=gemini-2.5-flash
STRATEGY_COUNT=3
FAST_MODE=true
```
**Auto-configured (no need to set):**
```bash
# These are handled automatically by the config system
AI_SERVICE_PORT=9000
AI_SERVICE_HOST=0.0.0.0
ENRICHMENT_SERVICE_URL=http://localhost:8000 # Internal communication
```
### Important: Production URL
After deploying to Render, you'll get a URL like:
```
https://your-app-name.onrender.com
```
**You MUST set this URL in the environment variables:**
1. Go to Render dashboard → your service → Environment
2. Add: `PRODUCTION_URL=https://your-app-name.onrender.com`
3. The app will automatically use this for WebSocket connections and API URLs
### 3. Health Check
**Health Check Path:** `/health` (on port 9000)
**Health Check Command:**
```bash
curl http://localhost:9000/health
```
### 4. Port Configuration
- **Enrichment Service:** 8000 (internal)
- **AI Intelligence Layer:** 9000 (external, Render will expose this)
Render will automatically bind to `PORT` environment variable.
### 5. Files Required
-`start.sh` - Shell startup script
-`start.py` - Python startup supervisor
-`Procfile` - Render configuration
-`requirements.txt` - Python dependencies
### 6. Testing Locally
Test the startup script before deploying:
```bash
# Make executable
chmod +x start.sh
# Run locally
./start.sh
```
Or with Python supervisor:
```bash
python start.py
```
### 7. Deployment Steps
1. **Push to GitHub:**
```bash
git add .
git commit -m "Add Render deployment configuration"
git push
```
2. **Create Render Service:**
- Go to [render.com](https://render.com)
- New → Web Service
- Connect your GitHub repository
- Select branch (main)
3. **Configure Service:**
- Name: `hpc-simulation-ai`
- Environment: `Python 3`
- Build Command: `pip install -r requirements.txt`
- Start Command: `./start.sh`
4. **Add Environment Variables:**
- `GEMINI_API_KEY`
- `ELEVENLABS_API_KEY` (optional)
5. **Deploy!** 🚀
### 8. Monitoring
Check logs in Render dashboard for:
- `📊 Starting Enrichment Service on port 8000...`
- `🤖 Starting AI Intelligence Layer on port 9000...`
- `✨ All services running!`
### 9. Connecting Clients
**WebSocket URL:**
```
wss://your-app-name.onrender.com/ws/pi
```
**Enrichment API:**
```
https://your-app-name.onrender.com/ingest/telemetry
```
### 10. Troubleshooting
**Services won't start:**
- Check environment variables are set
- Verify `start.sh` is executable: `chmod +x start.sh`
- Check build logs for dependency issues
**Port conflicts:**
- Render will set `PORT` automatically (9000 by default)
- Services bind to `0.0.0.0` for external access
**Memory issues:**
- Consider Render's paid plans for more resources
- Free tier may struggle with AI model loading
## Architecture on Render
```
┌─────────────────────────────────────┐
│ Render.com Container │
├─────────────────────────────────────┤
│ │
│ ┌───────────────────────────────┐ │
│ │ start.sh / start.py │ │
│ └──────────┬────────────────────┘ │
│ │ │
│ ┌────────┴─────────┐ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────┐ ┌──────────────┐ │
│ │Enrichment│ │AI Intelligence│ │
│ │Service │ │Layer │ │
│ │:8000 │◄──│:9000 │ │
│ └──────────┘ └──────┬────────┘ │
│ │ │
└────────────────────────┼────────────┘
Internet
┌────▼─────┐
│ Client │
│(Pi/Web) │
└──────────┘
```
## Next Steps
1. Test locally with `./start.sh`
2. Commit and push to GitHub
3. Create Render service
4. Configure environment variables
5. Deploy and monitor logs
6. Update client connection URLs
Good luck! 🎉