AndesOps-AI / DEPLOYMENT.md
Álvaro Valenzuela Valdes
🚀 Production ready for HF Spaces (Security Cleaned)
9e4bb05

AndesAI - Deployment Guide for Hackathon

🎯 Plataformas Soportadas

  • Local: http://localhost:8000
  • Hugging Face Spaces: Auto-detecta desde URL
  • GitHub Pages + Backend externo: Configurable
  • Vercel + API Backend: Configurable

📦 Opción 1: Hugging Face Spaces (RECOMENDADO)

Paso 1: Crear dos Spaces

  1. Frontend Space

  2. Backend Space

Paso 2: Estructura de Carpetas en GitHub

andesai/
├── backend/          → Será dockerfile para HF backend space
│   ├── Dockerfile
│   ├── requirements.txt
│   └── app/
├── frontend/         → Será dockerfile para HF frontend space
│   ├── Dockerfile
│   ├── package.json
│   ├── .env.local (dev only)
│   ├── .env.production (vacío para auto-detect)
│   └── app/
└── .github/workflows/  → Auto-deploy a HF (optional)

Paso 3: Frontend Dockerfile

# frontend/Dockerfile (para Hugging Face)
FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install

COPY . .

# Build para producción
RUN npm run build

# Variables de entorno (sin NEXT_PUBLIC_API_BASE = usa auto-detect)
ENV NODE_ENV=production

EXPOSE 3000

CMD ["npm", "start"]

Paso 4: Backend Dockerfile (actualizado)

# backend/Dockerfile (para Hugging Face)
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY app/ app/
COPY *.py ./

ENV PYTHONUNBUFFERED=1

# Puerto debe ser 7860 para Hugging Face
EXPOSE 7860

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]

Paso 5: Variables de Entorno en HF

En el Backend Space de Hugging Face:

  1. Ve a "Settings" → "Repository secrets"
  2. Agrega: MERCADO_PUBLICO_TICKET=YOUR_TICKET_HERE GEMINI_API_KEY=YOUR_GEMINI_KEY_HERE DATABASE_URL=sqlite:///./andesops.db GROQ_API_KEY=YOUR_GROQ_KEY_HERE

Cómo funciona el Auto-Detect

Una vez deployed en Hugging Face:

// El código detecta automáticamente:
// Frontend URL: https://username-andesai-frontend.hf.space
// Y genera Backend URL: https://username-andesai-backend.hf.space

// En frontend/lib/api.ts:
if (window.location.hostname.includes('huggingface.co')) {
  const spaceName = window.location.pathname.split('/')[2]; // 'username/andesai-frontend'
  return `https://${spaceName}-backend.hf.space`; // Auto-construye URL del backend
}

🚀 Opción 2: GitHub + Deploy Backend a Fly.io (o similar)

Paso 1: Deploy Backend a Fly.io

# Instalar Fly CLI
# https://fly.io/docs/getting-started/installing-flyctl/

cd backend
fly launch
# Llena las preguntas, selecciona app name: "andesai-backend"

# Deploy
fly deploy
# URL resultará en: https://andesai-backend.fly.dev

Paso 2: GitHub Pages para Frontend

# Editar frontend/.env.production
NEXT_PUBLIC_API_BASE=https://andesai-backend.fly.dev

Paso 3: GitHub Actions para Auto-Deploy

Crear archivo: .github/workflows/deploy.yml

name: Deploy Frontend

on:
  push:
    branches: [main]
    paths:
      - 'frontend/**'

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '18'
      
      - name: Install & Build
        working-directory: ./frontend
        run: |
          npm install
          npm run build
      
      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./frontend/.next/out

🔐 Secretos en GitHub

Para que funcione en CI/CD:

  1. Ve a: SettingsSecrets and variablesActions
  2. Agrega variables (no necesitas secretos para .env públicos):
    NEXT_PUBLIC_API_BASE=https://andesai-backend.fly.dev
    

✅ Configuración para Hackathon (RECOMENDADO)

Opción más fácil: Hugging Face Spaces

Ventajas:

  • ✅ Todo en un solo lugar
  • ✅ Auto-detecta URLs
  • ✅ Muy fácil de compartir
  • ✅ Free tier generoso
  • ✅ Sin necesidad de CI/CD complejo

Pasos:

  1. Crea 2 Spaces en HF (frontend + backend)
  2. Sube Dockerfiles (usa los que creé arriba)
  3. Agrega variables de entorno en backend space
  4. ¡Listo! Frontend auto-detecta backend

URL Final

Frontend: https://tuusername-andesai-frontend.hf.space
Backend: https://tuusername-andesai-backend.hf.space

El código detecta automáticamente que está en HF y conecta frontend → backend ✨


🧪 Test Local Antes de Deployar

# 1. Verificar que .env.local está correcto
cat frontend/.env.local
# Debe mostrar: NEXT_PUBLIC_API_BASE=http://localhost:8000

# 2. Iniciar backend
cd backend
python -m uvicorn app.main:app --reload --port 8000

# 3. En otra terminal, iniciar frontend
cd frontend
npm run dev

# 4. Abre http://localhost:3000 y verifica que funciona

📋 Checklist Final para Hackathon

  • Frontend funciona localmente
  • Backend responde a /api/health
  • OC y Tenders traen datos
  • Dockerfiles están listos
  • HF Spaces creados (o Fly.io configurado)
  • Variables de entorno agregadas
  • GitHub repo actualizado
  • URLs compartidas con jurado

🆘 Si algo falla

Error: "Connection Error" en Spaces

# Verifica que el backend space está running:
# 1. Ve a tu backend space
# 2. Mira el "App status" (debe ser green)
# 3. Haz click en el link para verificar que responde

# El frontend automáticamente reintentar después de 5 segundos

Error: "Invalid API URL"

// Verifica en DevTools Console (F12):
console.log(window.location.hostname);
// Debe mostrar: username-andesai-frontend.hf.space
// o: localhost (en desarrollo)

// Verifica que API_BASE se detectó correctamente:
// Debe ver mensaje: [API] Using API base: https://...

OC no trae datos

# Verifica que el ticket de Mercado Público es válido
curl "https://api.mercadopublico.cl/servicios/v1/publico/ordenesdecompra.json?ticket=YOUR_TICKET&fecha=$(date +%d%m%Y)"

# Si devuelve 500 = Sin datos disponibles (normal)
# Si devuelve 401 = Ticket inválido (error)

📞 Deployment Checklist

Para la hackathon, necesitas:

**GitHub Repo**
   - Frontend Code ✓
   - Backend Code ✓
   - Dockerfiles ✓
   - README con instrucciones ✓

✅ **Hugging Face Spaces** (Recomendado)
   - andesai-frontend space ✓
   - andesai-backend space ✓
   - Variables de entorno configuradas ✓
   - Ambos spaces running ✓

✅ **Compartir con Jurado**
   - Link a Frontend Space
   - Link a GitHub Repo
   - Link a Backend Space (opcional, mostrar en About)
   - README con "How to Use"

¡Listo! El auto-detect hace que funcione automáticamente en cualquier plataforma.