Saltar a contenido

Arquitectura

Vision General de la Infraestructura

MDU corre en un servidor dedicado Hetzner (PRD: 46.225.189.32) con contenedores Docker para todos los servicios.

                    Internet
                       |
                   [ Nginx ]
                   /   |   \
                  /    |    \
    [3dplim:3000] [mdu-api:3001] [sitios estaticos]
         |              |            |
    Next.js SSR    Express API    app / admin / early-adopt
         |              |
    +---------+    +---------+
    |         |    |         |
[Postgres] [Redis] [MinIO]  [STL Pipeline:8090]
  pgvector           S3       FastAPI + trimesh
                              |
                         [Langflow:7860]
                         [Ollama:11434]
                         [Base Builder]
                         [Blender Worker]

Contenedores Docker

Todos los contenedores gestionados via Docker Compose en /opt/3dplim/docker-compose.yml:

Contenedor Puerto Proposito
app 3000 Next.js 16 SSR (3dplim)
postgres 5432 PostgreSQL 16 + pgvector
redis 6379 Rate limiting, cache
minio 9000/9001 Almacenamiento objetos S3
blender-worker - Trabajos Blender en segundo plano
meilisearch 7700 Busqueda de texto completo

Contenedores Docker independientes adicionales:

Contenedor Puerto Proposito
mdu-stl-pipeline 8090 Microservicio exportacion STL
mdu-langflow 7860 Gestor de flujos IA Langflow
mdu-base-builder - Generacion de bases build123d
mdu-trimesh-mcp - Herramientas MCP de malla

Servicios Systemd

Servicio Que ejecuta
mdu-api.service Backend Express (puerto 3001)
ollama.service Inferencia LLM local (puerto 11434)

Enrutamiento Nginx

Todo el trafico entra via nginx en el puerto 443 (SSL). Reglas principales:

minidreamuniverse.com
  /                    → landing page estatica (/var/www/mdu-landing/)
  /api/auth/send-otp   → mdu-api (puerto 3001)
  /api/auth/verify-otp  → mdu-api
  /api/auth/google*     → mdu-api
  /api/generate-model   → mdu-api
  /api/stl-*            → mdu-api
  /api/auth/            → 3dplim (NextAuth)
  /api/webhooks/stripe  → 3dplim
  /api/webhooks/mdu-stripe → mdu-api
  /api/ (catch-all)     → 3dplim

app.minidreamuniverse.com    → /opt/miniature-forge/ (estatico)
admin.minidreamuniverse.com  → /opt/agenthub-mdu/dist/ (estatico)
early-adopt.minidreamuniverse.com → /opt/earl-adopt-dream/dist/ (estatico)
docs.minidreamuniverse.com   → /opt/mdu-docs/site/ (estatico)

Base de Datos

PostgreSQL 16 con extension pgvector, corriendo en Docker. Dos bases de datos:

3dplim (app Next.js)

Gestionada por Prisma ORM.

mdu_api (backend mdu-api)

Tablas principales:

Tabla Proposito
profiles Cuentas de usuario (email, nombre, plan)
model_generations Registros de generacion de modelos 3D
rpg_maps Registros de generacion de mapas RPG
galleries Galerias de usuario
invitations Invitaciones de referidos
otp_codes Codigos OTP de email
subscriptions Estado de suscripcion Stripe
rag_documents Embeddings pgvector RAG
pipeline_jobs Seguimiento de pipeline admin
agent_registry Agentes IA registrados
waitlist Lista de espera beta

Conexion

  • Red bridge Docker: 172.18.0.2:5432
  • Pool: maximo 20 conexiones, 30s timeout inactivo
  • Solo consultas parametrizadas (sin inyeccion SQL)

Almacenamiento MinIO

Almacenamiento compatible con S3 en el puerto 9000:

Bucket Proposito
mdu-assets Modelos generados, bases, miniaturas
reference-images Imagenes de referencia del usuario
rpg-map-images Mapas RPG generados

Todos los buckets tienen acceso publico de lectura. Servidos via proxy nginx en /api/assets/.

Capas de Seguridad

  1. Nginx — Terminacion SSL, rate limiting, headers de seguridad
  2. CORS — Lista blanca de origenes (12 dominios)
  3. Auth JWT — HMAC-SHA256, tokens access + refresh
  4. Seguridad a nivel de filaWHERE user_id = $userId en todas las consultas
  5. Prevencion SSRF — Lista blanca de dominios en endpoints proxy
  6. Verificacion webhook Stripe — Validacion de firma + dedup de eventos
  7. Helmet — HSTS, X-Frame-Options, X-Content-Type-Options