−25%

en Windows con pago anual, hasta el 31/10. Ver planes

EQVPS
Empezar

Docker Compose para agentes de IA: un stack autohospedado completo en un solo VPS

6 sept 2026 · 3 min de lectura · EQVPS Team

Un agente de IA rara vez es un solo proceso. Está el bucle del agente en sí, un almacén vectorial para la memoria, una caché, normalmente una base de datos para el estado, y quizás un pequeño panel. Correr cada uno a mano — arrancarlos, reiniciarlos tras un reboot, recordar qué puerto es cuál — cansa rápido. Docker Compose describe todo eso en un archivo y lo corre con un comando. Este es el stack copia-pega para poner un agente en un VPS de forma ordenada.

Si solo quieres la versión desplegada-sin-Docker, la guía de correr un agente de IA 24/7 cubre systemd en su lugar. Esta página es la versión nativa de contenedores.

El stack

Un agente autohospedado típico quiere cuatro cosas a su lado: el proceso del agente, Qdrant (memoria vectorial), Redis (caché / colas) y Postgres (estado). Aquí va un docker-compose.yml que corre todo eso, con los servicios internos mantenidos fuera de la internet pública:

# /opt/agent/docker-compose.yml
services:
  agent:
    build: .                      # your agent image (or image: your/agent:latest)
    restart: unless-stopped
    env_file: [.env]              # OPENAI/ANTHROPIC keys etc. — never in this file
    environment:
      QDRANT_URL: http://qdrant:6333
      REDIS_URL: redis://redis:6379
      DATABASE_URL: postgres://agent:${DB_PASSWORD}@postgres:5432/agent
    depends_on: [qdrant, redis, postgres]
    # no ports: — this agent only makes outbound calls. Publish one only if it serves webhooks.

  qdrant:
    image: qdrant/qdrant:latest
    restart: unless-stopped
    volumes: ["qdrant:/qdrant/storage"]   # internal only — not published

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--save", "60", "1"]
    volumes: ["redis:/data"]

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_USER: agent
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: agent
    volumes: ["pg:/var/lib/postgresql/data"]

volumes: { qdrant: {}, redis: {}, pg: {} }

Los secretos viven en .env, no en el archivo compose:

# /opt/agent/.env  (chmod 600, never committed)
ANTHROPIC_API_KEY=sk-ant-...
DB_PASSWORD=a-long-random-string

Levántalo:

apt update && apt install -y docker.io docker-compose-v2
systemctl enable --now docker
cd /opt/agent && docker compose up -d
docker compose logs -f agent

Cada servicio interno (Qdrant, Redis, Postgres) es accesible solo en la red compose por nombre de servicio — ninguno está publicado a internet. El agente habla con ellos por esa red privada, y nada en esos puertos da a la calle.

Los detalles que importan

  • restart: unless-stopped en cada servicio — eso es lo que sobrevive a un reboot o una caída. Habilita Docker al arranque y todo el stack vuelve por sí solo.
  • Claves en .env, no en YAML. Refiérete a ellas como variables env; mantén .env en chmod 600 y fuera de git. Un archivo compose filtrado con una clave activa es el error clásico.
  • No publiques nada que no debas. Un agente que solo llama a APIs de modelos y a sus propios servicios no necesita ningún puerto entrante — así que un plan NAT sirve. Añade una IP dedicada solo si sirve webhooks o un panel.
  • Dimensiona por memoria, no por núcleos. Los agentes respaldados por API son ligeros. Si el índice de Qdrant crece o añades un modelo local, ahí es cuando subes — consulta VPS de alta memoria para agentes.

La parte que sí es nuestra: el agente puede construir su propia máquina

Como EQVPS expone un servidor MCP, un agente que corre este stack puede aprovisionar otro VPS limpio por su cuenta — pedirlo, obtener root, destruirlo — pagando desde un saldo cripto prepagado. Un stack compose que necesita un sandbox nuevo puede levantar uno sin humano en el bucle.

Por qué EQVPS para un agente dockerizado

  • Imágenes limpias, root en ~60 segundos. Ubuntu/Debian; docker compose up y el stack está vivo.
  • Sin KYC, pago en cripto. Correo para registrarte, USDC/USDT para pagar — nada que ate la máquina a tu identidad.
  • NVMe + 1 Gbit/s sin medir, UE (Alemania/Finlandia). Tirar imágenes y enviar logs no producirá una factura sorpresa.

VPS para agentes de IA (la visión general) → · VPS para Docker → · Alojar una base vectorial para la memoria del agente →

Preguntas frecuentes

¿Por qué correr un agente de IA con Docker Compose en vez de procesos sueltos?

Un agente rara vez es un solo proceso — es el bucle del agente más un almacén vectorial, una caché y normalmente una base de datos. Compose describe todo el stack en un archivo, lo levanta con un comando, reinicia cada pieza ante caída o reboot, y mantiene los servicios internos (Postgres, Redis, Qdrant) en una red privada para que solo se exponga lo que elijas. Es la forma más ordenada de autohospedar un agente con piezas móviles.

¿Qué plan necesita un stack de agente?

Para un agente respaldado por API (el modelo corre en tu proveedor) el stack es ligero — el bucle del agente, Qdrant, Redis y Postgres caben cómodos en nuestro Small (8 $/mes) o el plan AI-Agent (10 $/mes, 4 GB). Solo necesitas más RAM si mantienes un índice vectorial grande en memoria o corres un modelo local, que es una configuración distinta y más pesada.

¿Dónde pongo las claves API — en el archivo compose?

No. Guarda los secretos en un archivo .env (ignorado por git) y refiérete a ellos como variables de entorno en compose, o usa Docker secrets. Nunca subas claves a docker-compose.yml. Vincula los servicios internos solo a la red compose; publica solo el puerto del agente (o nada, si solo hace llamadas salientes).

¿Vuelven los contenedores tras un reboot?

Solo si se lo dices. Pon restart: unless-stopped (o always) en cada servicio y habilita Docker al arranque; entonces docker compose up -d sobrevive a reboots y caídas. Sin política de reinicio, un contenedor queda caído tras reiniciar el servidor.

¿Piden KYC o tarjeta?

No. Un correo para registrarte, pago en USDC o USDT — sin documentos, sin tarjeta. Root en un minuto aproximadamente.

Comentarios

Aún no hay comentarios. Sé el primero.

Deja un comentario

Los comentarios se moderan antes de aparecer.