Módulo 16: Deploy en producción EU
Por qué la soberanía de datos importa
Cada vez que envías datos de un cliente a una API externa (OpenAI, Anthropic, Google), esos datos salen de tu control. Para muchas empresas europeas esto no es un problema técnico: es un problema legal.
Punto clave
RGPD, ENS, NIS2: la normativa europea exige saber dónde están tus datos en todo momento. Self-hosted en servidores EU es la solución para datos sensibles.
Normativa que te afecta
- RGPD: toda empresa con datos de personas en la UE. Consentimiento, minimización, derecho al olvido.
- ENS Alto: administración pública española. Datos en territorio nacional, cifrado obligatorio, auditoría.
- NIS2: infraestructura crítica. Notificación de incidentes en 24h, medidas técnicas específicas.
- AI Act: sistemas de IA en la UE. Clasificación por riesgo, transparencia, documentación.
vLLM en Hetzner: tu propio LLM
Hetzner es un proveedor alemán con datacenters en Alemania y Finlandia. Desde 40 EUR/mes por un servidor dedicado. vLLM expone una API compatible con OpenAI: cualquier código existente funciona cambiando solo la URL.
# docker-compose.yml
services:
vllm:
image: vllm/vllm-openai:latest
ports:
- "8000:8000"
volumes:
- ./models:/root/.cache/huggingface
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
command: >
--model Qwen/Qwen2.5-32B-Instruct
--max-model-len 8192
restart: unless-stopped
# Probar con curl
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-32B-Instruct",
"messages": [{"role": "user", "content": "Hola"}]
}'
Red privada con Tailscale
Tu servidor vLLM no debe estar expuesto a internet. Tailscale crea una red privada (mesh VPN) entre tus servidores. Solo las máquinas autorizadas se comunican.
# En cada servidor
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up
# Acceso interno (no público)
curl http://100.x.y.z:8000/v1/models
RGPD en la práctica
Para IA, RGPD requiere 6 cosas concretas:
- Base legal: una razón válida para procesar datos con IA
- Minimización: solo enviar al modelo los datos estrictamente necesarios
- Transparencia: informar al usuario de que usas IA
- Derecho al olvido: poder borrar todos los datos de un usuario
- DPIA: evaluación de impacto obligatoria para decisiones automatizadas
- Registro de actividades: documentar qué datos procesas, con qué modelo, dónde
# Endpoint de borrado RGPD
@app.delete("/api/v1/gdpr/erasure/{user_id}")
async def gdpr_erasure(user_id: str):
await db.execute("DELETE FROM users WHERE id = $1", user_id)
await db.execute("DELETE FROM ai_logs WHERE user_id = $1", user_id)
qdrant.delete(collection_name="user_docs",
points_selector={"filter": {"must": [
{"key": "user_id", "match": {"value": user_id}}
]}})
await audit_log("gdpr_erasure", user_id=user_id)
return {"status": "erased", "sla": "72h max"}
La soberanía de datos no es un lujo. Es un requisito legal y una ventaja competitiva. Tus clientes europeos lo valoran.
Checklist antes de producción
- Servidor en datacenter EU (Hetzner, OVH, Scaleway)
- LLM self-hosted: NO APIs externas con datos sensibles
- Red privada (Tailscale, WireGuard)
- TLS 1.3 en todas las conexiones
- Cifrado en reposo (LUKS discos, AES-256 base de datos)
- Endpoint de borrado RGPD operativo
- Política de retención documentada y automatizada
- DPIA completada si hay perfilado automatizado
- Notificación de brechas en menos de 72h (proceso documentado)
Pon a prueba tus conocimientos
Completa el quiz sobre deploy soberano y compliance europeo.
Hacer quiz