# 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! 🚀**