Cómo configurar una Mac mini M4 como servidor de agentes IA 24/7

AgentesNexo
··5 min lectura

Cómo configurar una Mac mini M4 como servidor de agentes IA 24/7

La Mac mini M4 es una bestia silenciosa: 16 GB de RAM unificada, chip Apple Silicon, consumo de apenas 10–20 W en reposo. Para correr agentes IA de forma local y continua, es la combinación perfecta de precio, rendimiento y eficiencia energética.

En este tutorial configuramos una Mac mini M4 desde cero como servidor dedicado para agentes de IA — disponible las 24 horas, sin interrupciones ni facturas de nube.


Lo que vas a necesitar

  • Mac mini M4 (16 GB RAM mínimo, recomendado 32 GB para modelos grandes)
  • macOS Sequoia 15.x actualizado
  • Conexión a internet estable
  • 30–60 minutos de tiempo

Paso 1: Deshabilitar el sleep del sistema

El enemigo número uno de un servidor 24/7 es el modo de reposo. Esto lo eliminamos desde la terminal:

bash
# Deshabilitar sleep del sistema y disco
sudo pmset -a sleep 0
sudo pmset -a disksleep 0
sudo pmset -a displaysleep 10   # la pantalla SÍ puede apagarse

# Reinicio automático tras corte de luz
sudo pmset -a autorestart 1
sudo pmset -a powernap 1

# Verificar configuración aplicada
pmset -g

Paso 2: Instalar Homebrew y dependencias base

bash
/bin/bash -c #43a047">"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Agregar al PATH (Apple Silicon)
echo 'eval #43a047">"$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval #43a047">"$(/opt/homebrew/bin/brew shellenv)"

# Herramientas esenciales
brew install node python@3.12 git curl wget
brew install --cask docker

Paso 3: Configurar Docker para producción

Docker Desktop en Mac funciona correctamente para un servidor 24/7. Ajusta los recursos en Settings → Resources:

  • CPUs: 4 cores mínimo
  • Memory: 8–12 GB (según tu RAM total)
  • Swap: 2 GB
  • Activar "Start Docker Desktop when you log in"

Crea un LaunchAgent para que Docker arranque aunque nadie haya iniciado sesión manualmente:

bash
cat > ~/Library/LaunchAgents/com.docker.autostart.plist << 'EOF'
<?xml version=#43a047">"1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC #43a047">"-//Apple//DTD PLIST 1.0//EN"
  #43a047">"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version=#43a047">"1.0">
<dict>
  <key>Label</key>
  <string>com.docker.autostart</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/bin/open</string>
    <string>-a</string>
    <string>Docker</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>
EOF

launchctl load ~/Library/LaunchAgents/com.docker.autostart.plist

Paso 4: Acceso remoto con Tailscale

Tailscale te da una IP fija accesible desde cualquier red sin abrir puertos en el router:

bash
brew install --cask tailscale

# Autenticar (abre navegador)
tailscale up

# Ver tu IP de Tailscale
tailscale ip -4
# Ejemplo: 100.x.x.x

Activa también SSH para administración directa:

bash
# System Settings → General → Sharing → Remote Login
# O desde terminal:
sudo systemsetup -setremotelogin on
ssh-keygen -t ed25519 -C #43a047">"macmini-agentes"

Paso 5: Ollama — modelos LLM locales acelerados por M4

El chip M4 corre LLMs directamente en su Neural Engine. Ollama es la forma más fácil de gestionarlos:

bash
brew install ollama

# Registrar como servicio (arranca con la Mac)
brew services start ollama

# Descargar modelos según tu RAM disponible
ollama pull llama3.2:3b      # ~2 GB  — rápido, ideal para tareas simples
ollama pull mistral:7b        # ~4 GB  — equilibrado para la mayoría de agentes
ollama pull qwen2.5:14b       # ~8 GB  — potente (requiere 32 GB RAM)

# Verificar que está corriendo
curl http://localhost:11434/api/tags

Paso 6: Desplegar agentes con n8n + Docker Compose

yaml
# ~/agents/docker-compose.yml
version: #43a047">"3.8"
services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - #43a047">"5678:5678"
    environment:
      - N8N_HOST=0.0.0.0
      - WEBHOOK_URL=http://100.x.x.x:5678/
      - GENERIC_TIMEZONE=America/La_Paz
    volumes:
      - ~/.n8n:/home/node/.n8n

  postgres:
    image: postgres:16-alpine
    restart: always
    environment:
      POSTGRES_USER: agentes
      POSTGRES_PASSWORD: cambia_esto
      POSTGRES_DB: agentes_db
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:
bash
cd ~/agents
docker compose up -d
docker compose logs -f n8n   # verificar inicio limpio

Paso 7: Healthcheck automático con launchd

A diferencia de cron, launchd puede reiniciar procesos caídos automáticamente:

bash
# ~/agents/healthcheck.sh
#!/bin/bash
LOG=#43a047">"/tmp/agents-health.log"
DATE=$(date #43a047">"+%Y-%m-%d %H:%M:%S")

# Verificar Ollama
if ! curl -sf http://localhost:11434/api/tags > /dev/null; then
  echo #43a047">"[$DATE] Ollama caído — reiniciando..." >> $LOG
  brew services restart ollama
fi

# Verificar n8n
if ! curl -sf http://localhost:5678/healthz > /dev/null; then
  echo #43a047">"[$DATE] n8n caído — reiniciando..." >> $LOG
  cd ~/agents && docker compose restart n8n
fi

echo #43a047">"[$DATE] OK" >> $LOG
bash
chmod +x ~/agents/healthcheck.sh

cat > ~/Library/LaunchAgents/com.agentes.healthcheck.plist << 'EOF'
<?xml version=#43a047">"1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC #43a047">"-//Apple//DTD PLIST 1.0//EN"
  #43a047">"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version=#43a047">"1.0">
<dict>
  <key>Label</key>
  <string>com.agentes.healthcheck</string>
  <key>ProgramArguments</key>
  <array>
    <string>/bin/bash</string>
    <string>/Users/TU_USUARIO/agents/healthcheck.sh</string>
  </array>
  <key>StartInterval</key>
  <integer>300</integer>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>
EOF

launchctl load ~/Library/LaunchAgents/com.agentes.healthcheck.plist

Lo que aprendimos

Después de meses corriendo esta configuración en producción:

  1. El M4 es increíblemente eficiente: Ollama con Mistral 7B añade apenas 3–5 W al consumo base. La factura eléctrica mensual es menor a $2.
  2. Tailscale reemplaza cualquier VPN casera: Sin configurar NAT ni puertos, funciona desde cualquier red y es gratuito para uso personal.
  3. launchd supera a cron para servicios: Reinicia procesos caídos, guarda logs, y se integra nativamente con macOS.
  4. 16 GB RAM es el límite real: Docker + Ollama 7B + n8n consume ~12 GB en pico. Para modelos de 14B parámetros ve directo a 32 GB.
  5. displaysleep 10 + sleep 0 es la combinación perfecta: ahorras energía en el display sin comprometer la disponibilidad del servidor.

Con esta configuración, tu Mac mini M4 puede recibir webhooks, ejecutar agentes IA, responder llamadas de API y correr workflows complejos — completamente autónomo, sin depender de infraestructura en la nube.

Crea tu agente IA gratis

Articulos relacionados

Cómo configurar una Mac mini M4 como servidor de agentes IA 24/7 - AgentesNexo Blog