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¶
- Nginx — Terminacion SSL, rate limiting, headers de seguridad
- CORS — Lista blanca de origenes (12 dominios)
- Auth JWT — HMAC-SHA256, tokens access + refresh
- Seguridad a nivel de fila —
WHERE user_id = $userIden todas las consultas - Prevencion SSRF — Lista blanca de dominios en endpoints proxy
- Verificacion webhook Stripe — Validacion de firma + dedup de eventos
- Helmet — HSTS, X-Frame-Options, X-Content-Type-Options