# Deployment Guide for agents.jeffemmett.com

This guide will help you deploy the Infinite Agents dashboard to your DigitalOcean droplet with automatic GitHub Actions deployments.

## 🎯 Overview

- **Production URL**: https://agents.jeffemmett.com
- **Droplet IP**: 143.198.39.165
- **Web Server**: Nginx with SSL (Let's Encrypt)
- **Auto-Deploy**: GitHub Actions on push to `main`

## 📋 Prerequisites

1. DigitalOcean droplet at 143.198.39.165
2. Domain `agents.jeffemmett.com` DNS configured in Cloudflare
3. SSH access to the droplet
4. GitHub repository access

## 🚀 Initial Setup

### Step 1: Configure DNS in Cloudflare

In Cloudflare DNS settings for `jeffemmett.com`:

```
Type: A
Name: agents
Content: 143.198.39.165
Proxy status: DNS only (gray cloud)
TTL: Auto
```

**Important**: Set to "DNS only" (not proxied) for initial SSL setup.

### Step 2: Run Setup Script on Droplet

SSH into your droplet and run the setup script:

```bash
# SSH into droplet
ssh root@143.198.39.165

# Clone the repository temporarily to get setup script
git clone https://github.com/Jeff-Emmett/infinite-agents.git /tmp/setup
cd /tmp/setup

# Make script executable and run it
chmod +x deployment/setup-droplet.sh
./deployment/setup-droplet.sh
```

The script will:
- Install nginx, Node.js, Python
- Clone the repository to `/var/www/agents.jeffemmett.com`
- Configure nginx with SSL
- Set up automatic SSL renewal
- Deploy the site

### Step 3: Configure GitHub Secrets

Add the following secrets to your GitHub repository:

**Go to**: Repository → Settings → Secrets and variables → Actions → New repository secret

Add these three secrets:

1. **DROPLET_HOST**
   ```
   143.198.39.165
   ```

2. **DROPLET_USER**
   ```
   root
   ```

3. **DROPLET_SSH_KEY**
   - Your private SSH key for the droplet
   - To get it: `cat ~/.ssh/id_rsa` (on your local machine)
   - Copy the entire key including `-----BEGIN` and `-----END` lines

### Step 4: Test Deployment

Push a change to the `main` branch or trigger the workflow manually:

```bash
# Trigger manually via GitHub UI
Go to: Actions → Deploy to DigitalOcean Droplet → Run workflow

# Or push a change
git push origin main
```

## 🔧 Manual Deployment (if needed)

If you need to deploy manually:

```bash
ssh root@143.198.39.165
cd /var/www/agents.jeffemmett.com
git pull origin main
npm ci
python3 generate_index.py
chown -R www-data:www-data .
systemctl reload nginx
```

## 📊 Monitoring & Logs

### Check nginx status
```bash
systemctl status nginx
```

### View nginx logs
```bash
# Access log
tail -f /var/log/nginx/agents.jeffemmett.com-access.log

# Error log
tail -f /var/log/nginx/agents.jeffemmett.com-error.log
```

### Test nginx configuration
```bash
nginx -t
```

## 🔐 SSL Certificate

SSL certificates are managed by Let's Encrypt and auto-renew.

### Check certificate status
```bash
certbot certificates
```

### Manual renewal (if needed)
```bash
certbot renew
systemctl reload nginx
```

## 🔄 Updating the Site

Updates are automatic! Just push to `main`:

1. Make changes locally
2. Commit and push to `main`
3. GitHub Actions automatically deploys
4. Site updates in ~2 minutes

## 🐛 Troubleshooting

### Site not loading?
- Check DNS propagation: `dig agents.jeffemmett.com`
- Verify nginx is running: `systemctl status nginx`
- Check nginx logs for errors

### Deployment failing?
- Verify GitHub secrets are set correctly
- Check GitHub Actions logs
- Ensure SSH key has proper permissions

### SSL errors?
- Ensure DNS is pointing to droplet IP
- Run: `certbot renew --dry-run`
- Check certificate: `certbot certificates`

## 📁 Directory Structure

```
/var/www/agents.jeffemmett.com/
├── .github/workflows/
│   ├── deploy.yml              # GitHub Pages deployment
│   └── deploy-droplet.yml      # Droplet deployment
├── deployment/
│   ├── nginx-config.conf       # Nginx configuration
│   ├── setup-droplet.sh        # Initial setup script
│   └── DEPLOYMENT_GUIDE.md     # This file
├── index.html                  # Generated dashboard
├── src/                        # UI components
├── threejs_viz/               # Three.js demos
├── sdg_viz/                   # SDG visualizations
└── [other demo directories]
```

## 🎯 Both Cloudflare Pages AND Droplet?

You can deploy to both!

- **Cloudflare Pages**: Automatic, global CDN, great for most users
- **Droplet**: Full control, custom server config, your own infrastructure

Both will deploy automatically on push to `main`.

## 🔗 Useful Commands

```bash
# SSH into droplet
ssh root@143.198.39.165

# Check deployment
cd /var/www/agents.jeffemmett.com && git status

# View recent commits
cd /var/www/agents.jeffemmett.com && git log -5 --oneline

# Restart nginx
systemctl restart nginx

# Test site locally
curl -I https://agents.jeffemmett.com
```

## ✅ Verification Checklist

After setup, verify:
- [ ] Site loads at https://agents.jeffemmett.com
- [ ] SSL certificate is valid (green lock icon)
- [ ] All demo categories display correctly
- [ ] GitHub Actions workflow runs successfully
- [ ] Push to main triggers auto-deployment
- [ ] Site updates after deployment completes

## 🆘 Support

If you encounter issues:
1. Check the troubleshooting section above
2. Review GitHub Actions logs
3. Check nginx error logs on droplet
4. Verify DNS settings in Cloudflare

---

**Happy deploying! 🚀**
