morethanadiagnosis-hub/QUICK_DEPLOYMENT_CHECKLIST.md
admin cb4431eade docs: add quick backend deployment checklist
Simple step-by-step guide to deploy backend to nexus-vector:

1. SSH to nexus-vector
2. Create deployment directory
3. Clone repository
4. Set up SSL certificates (Let's Encrypt)
5. Create .env with secure passwords
6. Copy docker-compose.prod.yml
7. Build and start services
8. Run database migrations
9. Verify with curl

Includes:
- Secure password generation commands
- Troubleshooting section
- Common Docker commands
- Deployment checklist
- Success criteria
- Notes about first-time deployment

Use this to quickly get the backend running!

Job ID: MTAD-IMPL-2025-11-18-CL
2025-11-18 03:12:46 +00:00

5.1 KiB

Quick Backend Deployment Checklist

Problem: Getting 404 at mtd.runfoo.run Cause: Backend not deployed yet Solution: Deploy now using these steps


QUICK DEPLOYMENT (30 minutes)

Step 1: SSH to nexus-vector

ssh admin@nexus-vector

Step 2: Create deployment directory

sudo mkdir -p /srv/containers/mtad-api
cd /srv/containers/mtad-api

Step 3: Clone the repository

# Clone the hub
git clone https://github.com/fullsizemalt/morethanadiagnosis-hub.git .

# Go to backend
cd backend

Step 4: Set up SSL certificates (Let's Encrypt)

# Install certbot
sudo apt-get update
sudo apt-get install -y certbot

# Create certificates
sudo certbot certonly --standalone \
  -d mtd.runfoo.run \
  --agree-tos \
  --email admin@morethanadiagnosis.com

# Copy to local directory
sudo mkdir -p /srv/containers/mtad-api/certbot/conf
sudo cp -r /etc/letsencrypt /srv/containers/mtad-api/certbot/conf/
sudo chown -R admin:admin /srv/containers/mtad-api/certbot/

Step 5: Create .env file

cat > .env << 'EOF'
# Database
DB_USER=admin
DB_PASSWORD=your_secure_password_here

# Redis
REDIS_PASSWORD=your_redis_password_here

# Security
SECRET_KEY=your_secret_key_here

# Other settings
ENV=production
DEBUG=false
CORS_ORIGINS=["https://mtd.runfoo.run"]
EOF

Generate secure passwords:

# For DB_PASSWORD
openssl rand -base64 24

# For REDIS_PASSWORD
openssl rand -base64 24

# For SECRET_KEY
openssl rand -hex 32

Step 6: Copy production docker-compose

cp docker-compose.prod.yml docker-compose.yml

Step 7: Build and start

# Build images
docker-compose build

# Start all services
docker-compose up -d

# Wait for startup
sleep 10

# Check status
docker-compose ps

Expected output:

NAME          STATUS
mtad-postgres Up (healthy)
mtad-redis    Up (healthy)
mtad-api      Up (healthy)
mtad-nginx    Up

Step 8: Run database migrations

# Enter API container
docker-compose exec api bash

# Inside container:
cd /app
alembic upgrade head

# Exit container
exit

Step 9: Verify deployment

# Health check
curl https://mtd.runfoo.run/health

# API check
curl https://mtd.runfoo.run/api/v1/health

# Should return 200 OK with JSON response

🔍 TROUBLESHOOTING

Still getting 404?

Check if backend is running:

docker-compose ps

If services not running:

docker-compose logs
# Check for errors

Restart services:

docker-compose restart

Check if Nginx is running:

docker-compose logs nginx
# Should show nginx starting

Check if API is responding:

curl -I http://localhost:8000/health
# Should return 200 OK

Certificate issues?

# Check certificate
sudo openssl x509 -in /etc/letsencrypt/live/mtd.runfoo.run/fullchain.pem -text -noout

# Renew if needed
sudo certbot renew --force-renewal

Port conflicts?

# Check what's using ports
sudo netstat -tlnp | grep :80
sudo netstat -tlnp | grep :443
sudo netstat -tlnp | grep :8000

# Kill if needed
sudo kill -9 <PID>

📋 DEPLOYMENT CHECKLIST

  • SSH to nexus-vector
  • Create /srv/containers/mtad-api directory
  • Clone repository
  • Set up SSL certificates (Let's Encrypt)
  • Create .env file with secure passwords
  • Copy docker-compose.prod.yml to docker-compose.yml
  • Build Docker images: docker-compose build
  • Start services: docker-compose up -d
  • Verify all containers healthy: docker-compose ps
  • Run migrations: docker-compose exec api alembic upgrade head
  • Test health endpoint: curl https://mtd.runfoo.run/health
  • Test API endpoint: curl https://mtd.runfoo.run/api/v1/health
  • Check browser: https://mtd.runfoo.run (should show API)

🚀 SUCCESS = When

curl https://mtd.runfoo.run/health returns {"status":"healthy",...} curl https://mtd.runfoo.run/api/v1/health returns API response Browser shows API information (no 404) All docker containers show "healthy"


📞 COMMON COMMANDS

# View logs
docker-compose logs -f

# Check specific service
docker-compose logs api

# Restart specific service
docker-compose restart api

# Restart everything
docker-compose down && docker-compose up -d

# Check resource usage
docker stats

# SSH into container
docker-compose exec api bash

# Run migrations
docker-compose exec api alembic upgrade head

# Check database
docker-compose exec postgres psql -U admin -d morethanadiagnosis -c "SELECT 1"

💡 QUICK NOTES

  • First time deployment takes ~5-10 minutes for all images to build
  • DNS may need 24-48 hours to fully propagate (but should work now with 216.158.230.94)
  • Certificates auto-renew every 90 days
  • Backups run daily at 2 AM (if cron configured)
  • All data persists in Docker volumes even after restart

Next Step: Follow the 9 steps above to deploy the backend!

Once running, you should see the API responding at:

Let me know if you hit any errors!