Guía: levantar el ecosistema COLFLUX¶
Cómo arrancar cada repositorio en tu máquina, en el orden correcto, y cómo se conectan entre sí. Pensada para dos lectores: una persona que va a modificar código y necesita ver el cambio corriendo antes de abrir un PR, y un agente de IA que necesita el contexto completo sin tener que descubrirlo leyendo cinco README.md distintos.
Antes de tocar código, revisar Git: conceptos y acuerdos de flujo de trabajo: todo cambio va en una rama feature/*/fix/* y entra a main vía Pull Request aprobado.
Requisitos previos¶
- Docker y Docker Compose — todos los servicios corren en contenedores, en local y en producción. No hace falta instalar Python, Node ni Postgres a mano.
- Git con acceso a la organización
colfluxen GitHub. - Puertos libres en
localhost:8000(backend),8001(ia-functions),3000(frontend dev),5432/5433(bases de datos).
Mapa del ecosistema¶
%%{init: {
"securityLevel": "loose",
"theme": "base",
"themeVariables": {
"fontSize": "15px",
"primaryColor": "#eaf4f1",
"primaryBorderColor": "#198A77",
"primaryTextColor": "#1a1a1a",
"lineColor": "#57270F",
"tertiaryColor": "#f5f5f5"
}
}}%%
flowchart LR
subgraph local["Tu máquina (docker compose)"]
direction TB
fe["frontend\nVite dev :3000"]
be["backend\nDjango + Gunicorn :8000\n+ Postgres/PostGIS :5432"]
ia["ia-functions\nFastAPI :8001\n+ Postgres/pgvector :5433"]
end
fe -->|VITE_API_BASE_URL| be
fe -->|VITE_API_URL| ia
be -->|invoca RAG| ia
classDef svc fill:#8fc4b8,stroke:#198A77,color:#1a1a1a
class fe,be,ia svc
Los tres servicios son independientes entre sí (cada uno con su propio docker-compose.yml), pero el frontend necesita que backend e ia-functions estén arriba para funcionar completo. Si solo vas a tocar uno, no hace falta levantar los otros dos — solo ten en cuenta qué llamadas van a fallar (ver tabla de variables más abajo).
1. backend (Django + PostGIS)¶
git clone https://github.com/colflux/backend.git
cd backend
docker compose up --build
Esto levanta:
db— Postgres/PostGIS enlocalhost:5432(usuario/clave/DB por defecto:ghg/ghg/ghg, verdocker-compose.yml).web— Django corriendo migraciones,generate_catalogoycollectstaticautomáticamente, luego Gunicorn enlocalhost:8000.
No hace falta .env para desarrollo local — todas las variables tienen default de desarrollo en docker-compose.yml (DATABASE_URL, DJANGO_SECRET_KEY, DJANGO_DEBUG=1, etc.). Solo se necesita un .env real (copiado de .env.example) para producción.
Verificar que quedó arriba:
- API:
http://localhost:8000/api/geo/sitios/ - Admin:
http://localhost:8000/admin/(crear superusuario condocker compose exec web python manage.py createsuperuser, o definirDJANGO_SUPERUSER_*en el entorno antes de levantar)
2. ia-functions (FastAPI + RAG)¶
git clone https://github.com/colflux/ia-functions.git
cd ia-functions
cp .env.example .env
# Completar al menos GROQ_API_KEY (https://console.groq.com), o cambiar
# LLM_PROVIDER a "gemini" / "ollama" / "anthropic" con su respectiva key.
docker compose up -d db api
Esto levanta:
db— Postgres conpgvectorenlocalhost:5433(puerto distinto al del backend para no chocar).api— FastAPI enlocalhost:8001, conPOST /ingestyPOST /chat.
Si se quiere correr el modelo localmente sin depender de una API externa:
docker compose --profile ollama up -d db api ollama
docker compose exec ollama ollama pull llama3.1
# y en .env: LLM_PROVIDER=ollama
Verificar: GET http://localhost:8001/health.
3. frontend (React + Vite)¶
git clone https://github.com/colflux/frontend.git
cd frontend
cp .env.example .env # define VITE_API_URL (default apunta a ia-functions en :8001)
docker compose --profile dev up
Esto levanta un contenedor Node con hot reload en localhost:3000, apuntando por defecto a:
VITE_API_BASE_URL=http://localhost:8000/api(backend)VITE_GEO_API_URL=http://localhost:8000/api/geo/sitios/(backend)VITE_API_URL=http://localhost:8001(ia-functions, para el chat)
Si backend y/o ia-functions no están corriendo, el frontend sigue funcionando pero esas secciones (mapa, chat) van a fallar sus llamadas — normal si solo estás trabajando en UI que no depende de datos reales.
Alternativa sin Docker (más rápida para iterar en UI pura): npm install && npm run dev.
Variables de entorno que conectan los servicios¶
| Variable | Dónde vive | Apunta a | Nota |
|---|---|---|---|
VITE_API_BASE_URL |
frontend |
backend (/api) |
Se incrusta en el bundle en build-time (Vite) — cambiarla requiere rebuild, no solo reiniciar. |
VITE_GEO_API_URL / VITE_GEO_API_BASE_URL |
frontend |
backend (/api/geo/...) |
Ídem, build-time. |
VITE_API_URL |
frontend |
ia-functions (/chat, /ingest) |
Ídem, build-time. Hoy en producción sigue con el placeholder http://localhost:8001 porque ia-functions aún no está desplegado ahí. |
LLM_PROVIDER + su API key |
ia-functions |
Proveedor de LLM externo (Groq, Gemini, Ollama, Anthropic) | Cambiable sin tocar código. |
DATABASE_URL |
backend |
Su propia base Postgres/PostGIS | No confundir con la base de ia-functions (son bases distintas, puertos distintos). En local puede apuntar al db del propio docker-compose.yml o a colflux-DB (Lightsail managed database, *.rds.amazonaws.com) — en ese segundo caso, Django necesita OPTIONS: {"sslmode": "require"} en DATABASES (colflux/settings.py), porque Lightsail rechaza conexiones sin cifrar. Sin eso, el error que aparece (password authentication failed) es engañoso — el problema real es la falta de SSL, no la contraseña. Lightsail en "Public mode" no filtra por IP (no hay whitelist tipo RDS clásico), así que si la conexión falla no es por eso. |
Cómo correr el ecosistema completo a la vez¶
Cada repo vive en su propia carpeta con su propio docker-compose.yml — no hay un compose único que levante los tres. Para probar el flujo end-to-end en local:
# terminal 1
cd backend && docker compose up --build
# terminal 2
cd ia-functions && docker compose up -d db api
# terminal 3
cd frontend && docker compose --profile dev up
Abrir http://localhost:3000.
Cómo corre esto en producción (para contexto, no para reproducir a mano)¶
Todo vive en el mismo servidor Lightsail (44.213.47.34), cada repo en su propia carpeta bajo /home/ubuntu/colflux/<repo>/, cada uno con su docker compose propio. nginx en el puerto 80 enruta el tráfico real:
| Ruta | Servicio | Puerto interno |
|---|---|---|
/ |
frontend (prod, build estático servido por Nginx del contenedor) |
127.0.0.1:3000 |
/api/, /admin/, /static/, /media/, /docs/ |
backend |
127.0.0.1:8001 |
| (pendiente) | ia-functions |
127.0.0.1:8001 del contenedor propio — puerto duplicado con backend, revisar al desplegar |
El despliegue a este servidor es automático: cada PR mergeado a main dispara un workflow de GitHub Actions que hace git reset --hard origin/main + docker compose build + docker compose up -d --wait en el servidor, vía SSH. No se edita código a mano en el servidor — solo el .env de cada repo, que nunca se pisa con git pull. Detalle completo en personal/tasks/inprogress/automatizar-deploy-ecosistema-colflux.md.
⚠️ Nota para quien despliegue ia-functions: su docker-compose.yml local publica la API en 8001 por defecto (WEB_PORT:-8001), el mismo puerto que ya usa backend en el servidor — hay que fijar un WEB_PORT distinto en el .env de producción de ia-functions antes de desplegar, o van a chocar.
Para un agente de IA trabajando en este ecosistema¶
- No asumas que los tres servicios están corriendo — revisa con
docker compose psen cada carpeta antes de asumir que una llamada a la API va a funcionar. - Las variables
VITE_*del frontend son de build-time: cambiarlas en.envy solo reiniciar el contenedor no tiene efecto, hay que reconstruir (docker compose buildde nuevo). - Nunca hagas push directo a
mainen ningún repo — todos están (o van a estar) protegidos, ver Git: conceptos y acuerdos de flujo de trabajo. Trabaja siempre en una ramafeature/*/fix/*y abre PR. - Antes de crear una rama, verifica que partes de la punta real de
origin/main(git fetch && git checkout -b feature/x origin/main) — un PR contaminado con commits de otra rama ya pasó una vez enfrontend(ver Historial de la tarea de despliegue). - Si necesitas reproducir el entorno de producción para depurar algo, la IP es
44.213.47.34y las rutas de cada repo en el servidor están enpersonal/tasks/inprogress/automatizar-deploy-ecosistema-colflux.md— no inventes rutas ni puertos, están documentados ahí.
Referencias¶
- Git: conceptos y acuerdos de flujo de trabajo — cómo se rama, revisa y mergea el código antes de llegar a este punto.
- Repositorios — inventario e integración de los repos.
- DevOps y CI/CD — conceptos de pipeline/workflow usados en el despliegue automático.
personal/tasks/inprogress/automatizar-deploy-ecosistema-colflux.md— estado real y detallado del despliegue a producción.