Desarrollo Local¶
Guia para levantar el ecosistema GDI Latam en tu maquina local.
Requisitos¶
| Software | Version | Notas |
|---|---|---|
| Python | 3.12+ | Backend principal y microservicios |
| Node.js | 20+ | Frontends (Next.js 15) |
| PostgreSQL | 17+ | Con extensiones pgvector, unaccent, pg_trgm |
| Docker | Latest | Para servicios containerizados |
| Git | Latest | Cada subcarpeta es un repo independiente |
Versiones exactas
El Backend usa Python 3.12. Los microservicios (PDFComposer, Notary) funcionan con Python 3.11+. Los frontends usan Next.js 15 con React 18.
Clonar Repositorios¶
Cada servicio es un repositorio Git independiente. La carpeta raiz no es un repo.
# Crear directorio raiz
mkdir mi-proyecto && cd mi-proyecto
# Backends
git clone <url>/GDI-Backend.git # API principal (:8000)
git clone <url>/GDI-BackOffice-Back.git # API admin (:8010)
# Frontends
git clone <url>/GDI-FRONTEND.git # App usuarios (:3003)
git clone <url>/GDI-BackOffice-Front.git # Panel admin (:3013)
# Microservicios
git clone <url>/GDI-PDFComposer.git # Generador PDFs (:8002)
git clone <url>/GDI-Notary.git # Firma digital (:8001)
git clone <url>/GDI-AgenteLANG.git # Agente IA (:8004)
# Base de datos
git clone <url>/GDI-BD.git # Scripts SQL
Git desde raiz
Nunca ejecutar comandos git desde la carpeta raiz. Siempre operar dentro de cada repo individual o usar git -C <repo>.
Variables de Entorno¶
Cada servicio necesita su propio archivo .env. A continuacion las variables minimas para desarrollo local.
GDI-Backend (.env)¶
# Base de datos
DATABASE_URL=postgresql://postgres:password@localhost:5432/railway
# Auth0 (desactivar para desarrollo)
TESTING_MODE=true
# Microservicios (URLs locales)
PDFCOMPOSER_URL=http://localhost:8002
PDFCOMPOSER_API_KEY=dev-key-pdf
NOTARY_URL=http://localhost:8001
NOTARY_API_KEY=dev-key-notary
# Cloudflare R2
CF_R2_ENDPOINT=https://ACCOUNT_ID.r2.cloudflarestorage.com
CF_R2_ACCESS_KEY_ID=your-access-key
CF_R2_SECRET_ACCESS_KEY=your-secret-key
CF_R2_SIGN_EXPIRATION=600
# CORS
FRONTEND_URL=http://localhost:3003
GDI-BackOffice-Back (.env)¶
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=password
DB_NAME=railway
TESTING_MODE=true
FRONTEND_URL=http://localhost:3013
GDI-FRONTEND (.env.local)¶
AUTH0_SECRET=your-long-secret-string
AUTH0_BASE_URL=http://localhost:3003
AUTH0_ISSUER_BASE_URL=https://tu-tenant.us.auth0.com
AUTH0_CLIENT_ID=your-client-id
AUTH0_CLIENT_SECRET=your-client-secret
NEXT_PUBLIC_API_URL=http://localhost:8000
GDI-BackOffice-Front (.env.local)¶
AUTH0_SECRET=your-long-secret-string
AUTH0_BASE_URL=http://localhost:3013
AUTH0_ISSUER_BASE_URL=https://tu-tenant.us.auth0.com
AUTH0_CLIENT_ID=your-bo-client-id
AUTH0_CLIENT_SECRET=your-bo-client-secret
NEXT_PUBLIC_API_URL=http://localhost:8010
GDI-PDFComposer (.env)¶
GDI-Notary (.env)¶
GDI-AgenteLANG (.env)¶
DATABASE_URL=postgresql://postgres:password@localhost:5432/railway
OPENROUTER_API_KEY=sk-or-your-key
OPENROUTER_MODEL=google/gemini-2.0-flash-001
OPENROUTER_FAST_MODEL=meta-llama/llama-3.3-70b-instruct:free
EMBEDDINGS_MODEL=openai/text-embedding-3-small
GDI_BACKEND_URL=http://localhost:8000
INTERNAL_API_KEY=gdi-internal-dev
AUTH0_DOMAIN=tu-tenant.us.auth0.com
AUTH0_AUDIENCE=https://api.tu-dominio.com
ENABLED_SCHEMAS=["200_muni"]
Ver referencia completa en Variables de Entorno.
Base de Datos Local¶
Opcion A: PostgreSQL local¶
# Instalar extensiones (una vez)
psql -U postgres -c "CREATE DATABASE railway;"
# Ejecutar scripts de GDI-BD en orden
cd GDI-BD
# Paso 1: Estructura base (extensiones + tablas public)
psql -U postgres -d railway -f sql/01-install.sql
# Paso 2: Datos globales (roles, document types, case templates)
psql -U postgres -d railway -f sql/02-seed-global.sql
# Paso 3: Schema de prueba 200_muni con datos demo
psql -U postgres -d railway -f sql/04-seed-demo.sql
Ver mas detalles en Base de Datos y Scripts de Deploy.
Puertos del Ecosistema¶
| Servicio | Puerto | URL Local |
|---|---|---|
| GDI-Backend | 8000 | http://localhost:8000 |
| GDI-BackOffice-Back | 8010 | http://localhost:8010 |
| GDI-FRONTEND | 3003 | http://localhost:3003 |
| GDI-BackOffice-Front | 3013 | http://localhost:3013 |
| GDI-PDFComposer | 8002 | http://localhost:8002 |
| GDI-Notary | 8001 | http://localhost:8001 |
| GDI-AgenteLANG | 8004 | http://localhost:8004 |
| PostgreSQL | 5432 | localhost:5432 |
Orden de Inicio Recomendado¶
Seguir este orden para evitar errores de dependencia:
1. Infraestructura¶
2. Microservicios¶
# PDFComposer
cd GDI-PDFComposer
pip install -r requirements.txt
uvicorn main:app --reload --port 8002
# Notary
cd GDI-Notary
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8001
3. Backends¶
# Backend principal
cd GDI-Backend
pip install -r requirements.txt
uvicorn main:app --reload --port 8000
# BackOffice Backend
cd GDI-BackOffice-Back
pip install -r requirements.txt
uvicorn main:app --reload --port 8010
4. Frontends¶
# Frontend principal
cd GDI-FRONTEND
npm install
npm run dev # Puerto 3003
# BackOffice Frontend
cd GDI-BackOffice-Front
npm install
npm run dev # Puerto 3013
Inicio minimo
Para desarrollo basico de documentos, solo necesitas: PostgreSQL + PDFComposer + Backend + Frontend. Los demas servicios son opcionales segun el feature que trabajes.
Verificar Instalacion¶
# Health checks
curl http://localhost:8000/health # Backend
curl http://localhost:8010/health # BackOffice Backend
curl http://localhost:8002/health # PDFComposer
curl http://localhost:8001/health # Notary
Respuesta esperada del Backend:
Tips de Debug¶
TESTING_MODE¶
Con TESTING_MODE=true, el Backend acepta un header X-User-ID con el UUID del usuario en lugar de requerir un JWT de Auth0. Esto simplifica el desarrollo local.
# Request autenticado en modo testing
curl -H "X-User-ID: a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
http://localhost:8000/users
Swagger UI¶
FastAPI genera documentacion interactiva automaticamente:
- Backend:
http://localhost:8000/docs - BackOffice:
http://localhost:8010/docs - PDFComposer:
http://localhost:8002/docs - Notary:
http://localhost:8001/docs
Logs de Backend¶
El Backend usa un sistema de logging con correlation_id para rastrear requests:
# Los logs incluyen el schema del tenant
[2026-02-16 10:00:00] [req-abc-123] [200_muni] INFO: GET /documents 200
Virtualenvs Python¶
Se recomienda usar un virtualenv por servicio para evitar conflictos de dependencias:
cd GDI-Backend
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
pip install -r requirements.txt
Hot Reload¶
- Python (FastAPI):
uvicorn main:app --reloadrecarga automaticamente al editar codigo - Next.js:
npm run devtiene hot reload incluido
Ver tambien Troubleshooting para problemas comunes.