IAtechX Logo
IAtechXAI & Software Engineering
Tutoriales Técnicos

Cómo Instalar Llama 3 en un VPS Barato con Ollama y Docker

Guía completa para ejecutar Llama 3 8B en tu propio servidor: requisitos de RAM, Docker Compose, Nginx con TLS y cómo medir el rendimiento real.

NBNelson Barbosa
2026-09-1410 min de lectura
Cómo Instalar Llama 3 en un VPS Barato con Ollama y Docker

1. Por qué alojar el modelo en lugar de usar una API

Hay tres razones concretas para ejecutar Llama 3 en tu propia máquina. La primera es el coste predecible: un VPS cobra una cuota fija mensual sin importar cuántas peticiones hagas, mientras que las APIs comerciales facturan por token y la factura crece con el uso. La segunda es la privacidad — si procesas datos de clientes, contratos o registros internos, mantenerlo todo en un servidor que controlas evita enviar ese contenido a terceros y simplifica el cumplimiento del RGPD. La tercera es la ausencia de límites de tasa: sin cuotas ni cortes a mitad de un procesamiento por lotes. A cambio, asumes el mantenimiento del servidor, los parches de seguridad y una calidad de respuesta inferior a la de los modelos punteros. Compensa para clasificación de texto, extracción de datos, resúmenes y tareas repetitivas; no compensa para razonamiento complejo.

2. Cuánta RAM necesitas, y por qué

Llama 3 8B cuantizado a 4 bits (Q4_K_M) ocupa unos 4,7 GB en disco, y hay que cargarlo entero en memoria. A eso se suma la caché de contexto (KV cache), que crece con el tamaño del prompt, más la memoria del sistema operativo y de los contenedores. En la práctica: **8 GB de RAM es el mínimo funcional** y se queda corto con contextos largos; **16 GB es cómodo** y permite contextos mayores o un segundo modelo cargado. Por debajo de 8 GB el sistema tira de swap y la latencia se vuelve inservible. En cuanto a CPU, el número de núcleos importa menos que la generación. Un procesador reciente con AVX-512 hace inferencia bastante más rápida que un núcleo antiguo con el mismo número de vCPUs. Elige NVMe frente a SATA: la carga inicial del modelo lee varios gigabytes. **Sobre velocidad:** en CPU pura, sin GPU, cuenta con un ritmo de lectura — decenas de tokens por segundo no es realista en la mayoría de VPS económicos. Mide en tu propio servidor antes de dar por buena ninguna cifra; la sección 8 explica cómo.

Oferta de Afiliado Verificado

AlphaVPS

Instancias AMD Ryzen con NVMe. Confirma la RAM y la generación de CPU del plan antes de contratar.

Ver planes VPS en AlphaVPS

Enlace de afiliado: recibimos una comisión si contratas, sin coste adicional para ti.

3. Preparar el servidor antes de instalar nada

Un servidor recién aprovisionado está expuesto. Antes de instalar Ollama, cierra los puertos y crea un usuario sin privilegios. Estos pasos llevan cinco minutos y evitan que la máquina acabe comprometida la primera noche. Desactiva el acceso por contraseña solo después de comprobar que la clave SSH funciona — no antes, o te quedas fuera de tu propio servidor. Fíjate en que el firewall únicamente abre los puertos 22, 80 y 443. El puerto de Ollama, el 11434, queda deliberadamente cerrado al exterior; la sección 6 explica por qué.

Endurecimento inicial num Ubuntu 22.04 ou 24.04 limpo, executado como root.
# Utilizador sem privilégios
adduser deploy
usermod -aG sudo deploy

# Chave SSH (a partir da sua máquina local)
ssh-copy-id deploy@SEU_IP

# Firewall: apenas SSH e HTTP/HTTPS
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable

# Só depois de confirmar que a chave funciona:
sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart ssh

# Actualizações de segurança automáticas
apt update && apt install -y unattended-upgrades fail2ban
systemctl enable --now fail2ban

4. Instalar Docker

Usa el repositorio oficial de Docker, no el paquete `docker.io` de las distribuciones, que suele ir varias versiones por detrás y no incluye el plugin `compose` moderno. Tras añadir el usuario al grupo `docker`, cierra la sesión y vuelve a entrar para que el cambio surta efecto.

O script oficial detecta a distribuição e instala também o plugin compose.
curl -fsSL https://get.docker.com | sh
usermod -aG docker deploy

# Confirmar
docker --version
docker compose version

5. Ollama y Open WebUI con Docker Compose

Fíjate en el detalle más importante de este fichero: Ollama publica el puerto en `127.0.0.1:11434`, no en `0.0.0.0`. Esto significa que solo es accesible desde el propio servidor y desde los demás contenedores — nunca directamente desde internet. Open WebUI se conecta a Ollama por la red interna de Docker y es la única pieza que acabará expuesta, a través de Nginx y siempre detrás de autenticación. Los volúmenes garantizan que los modelos descargados y las cuentas de usuario sobrevivan a reinicios y actualizaciones de los contenedores.

docker-compose.yml — ambos os serviços ficam em loopback; o Nginx trata da exposição.
services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    # Apenas loopback: nunca exposto à internet
    ports:
      - "127.0.0.1:11434:11434"
    volumes:
      - ollama_models:/root/.ollama

  webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    depends_on:
      - ollama
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_AUTH=true
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - webui_data:/app/backend/data

volumes:
  ollama_models:
  webui_data:

6. Descargar el modelo y elegir la cuantización

La cuantización determina el equilibrio entre memoria y calidad. `Q4_K_M` es el punto medio habitual y por donde recomiendo empezar. `Q5_K_M` mejora ligeramente la coherencia a cambio de aproximadamente 1 GB extra. `Q8_0` es casi sin pérdidas pero ocupa cerca de 8,5 GB, lo que solo cabe con holgura en 16 GB de RAM. Si el servidor tiene 8 GB, quédate en `Q4_K_M`. La diferencia de calidad es pequeña; la diferencia entre caber y no caber en memoria no lo es.

O modelo fica no volume ollama_models e sobrevive a recriações do contentor.
docker compose up -d

# Descarregar o modelo (alguns GB, demora)
docker exec -it ollama ollama pull llama3:8b

# Variantes de quantização
docker exec -it ollama ollama pull llama3:8b-instruct-q5_K_M

# Listar o que está instalado e o espaço ocupado
docker exec -it ollama ollama list

7. Nginx como proxy inverso y certificado TLS

Este es el paso que convierte un servicio local en un servicio accesible con seguridad. Nginx recibe el tráfico en el 443, termina el TLS y lo reenvía a Open WebUI en loopback. El tiempo de espera ampliado no es decorativo: generar respuestas largas en CPU puede superar el límite por defecto de 60 segundos de Nginx y devolver un error 504 a mitad de la respuesta. Apunta primero el registro `A` de tu dominio a la IP del servidor y solo después ejecuta `certbot`, o la validación fallará.

Depois: apt install -y nginx certbot python3-certbot-nginx && certbot --nginx -d ia.seudominio.pt
server {
    server_name ia.seudominio.pt;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Streaming de tokens
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Inferência em CPU excede os 60s por omissão
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

8. Medir el rendimiento real en tu servidor

No te fíes de las cifras de rendimiento que publican terceros, incluidas las de este artículo. El ritmo de generación depende del modelo de CPU, de la generación, de la cuantización, del tamaño del contexto y de la carga del vecino en la misma máquina física — algo que en un VPS compartido no controlas. El `--verbose` de Ollama devuelve las métricas reales de tu instancia. La cifra que importa es `eval rate`, en tokens por segundo. Si el valor resulta demasiado bajo para tu caso de uso, las opciones por orden de eficacia son: reducir el contexto, bajar la cuantización, cambiar a un modelo más pequeño como Llama 3.2 3B, o pasar a una instancia con GPU.

Corra o teste com o servidor em repouso e outra vez sob carga, para ver a variação.
# Métricas reais desta máquina
docker exec -it ollama ollama run llama3:8b --verbose "Resume em três frases o que é a quantização de modelos."

# Interessa a linha:
#   eval rate:  X tokens/s

# Memória e CPU em tempo real durante a geração
docker stats ollama

9. Consumir la API desde tu código

Ollama expone una API compatible con el formato de OpenAI, lo que significa que la mayoría de las librerías existentes funcionan con solo cambiar el `base_url`. No hace falta reescribir integraciones. Como el puerto 11434 está cerrado al exterior, tu código debe ejecutarse en el mismo servidor, o llegar por túnel SSH o red privada. **Nunca abras el 11434 al público:** la API de Ollama no tiene autenticación alguna. Quien descubra tu IP usará tu servidor a placer, y hay escáneres automáticos buscando exactamente eso.

A mesma biblioteca da OpenAI, apontada ao servidor próprio.
from openai import OpenAI

# Aponta para o Ollama local em vez da OpenAI
client = OpenAI(
    base_url="http://127.0.0.1:11434/v1",
    api_key="ollama",  # ignorado, mas exigido pela biblioteca
)

resposta = client.chat.completions.create(
    model="llama3:8b",
    messages=[
        {"role": "system", "content": "És um assistente técnico conciso."},
        {"role": "user", "content": "Classifica este email como urgente ou normal."},
    ],
    temperature=0.2,
)

print(resposta.choices[0].message.content)

10. Cuándo esto no compensa

Sé honesto con el volumen. Si haces unos cientos de llamadas al mes, una API comercial sale más barata que cualquier VPS y te ahorra el mantenimiento. El alojamiento propio empieza a compensar con uso constante y alto, o cuando la privacidad de los datos es un requisito y no una preferencia. Tampoco compensa si necesitas calidad puntera. Un 8B cuantizado es competente en tareas acotadas y claramente inferior en razonamiento, código complejo o textos largos. Compararlo con los modelos comerciales grandes y esperar paridad lleva a la decepción. Y cuenta el tiempo. Parches de seguridad, renovación de certificados, monitorización y recuperación de fallos son horas tuyas. Si tu tiempo tiene valor de mercado, inclúyelo en el cálculo antes de decidir.

Preguntas Frecuentes (FAQ)

¿Puedo ejecutar Llama 3 70B en un VPS sin GPU?

Técnicamente arranca con cuantización agresiva y RAM suficiente, pero la velocidad en CPU lo hace impracticable para uso interactivo. Para un VPS económico, el 8B es el límite razonable. Si necesitas el 70B, necesitas GPU.

¿Es legal usar Llama 3 comercialmente?

La licencia de Meta permite el uso comercial, con condiciones — entre ellas un umbral de usuarios mensuales por encima del cual hace falta licencia específica, y requisitos de atribución. Lee la licencia de la versión que descargues antes de integrarla en un producto de pago.

¿Qué pasa si reinicio el servidor?

Con `restart: unless-stopped` en el compose, los contenedores arrancan solos y los modelos siguen en los volúmenes. La primera respuesta tras el arranque es más lenta porque el modelo debe releerse del disco a memoria.

¿Cómo hago copias de seguridad?

Los modelos no necesitan copia: se vuelven a descargar con un `ollama pull`. Lo que interesa guardar es el volumen `webui_data`, que contiene cuentas, conversaciones y configuración. Un `docker run --rm -v webui_data:/data -v $(pwd):/backup alpine tar czf /backup/webui.tar.gz /data` lo resuelve.

¿Necesito Nginx de verdad, o puedo exponer el puerto 8080 directamente?

Puedes, pero te quedas sin TLS — las credenciales y las conversaciones viajan en claro. Nginx con certbot te da HTTPS gratuito y renovación automática por unos minutos de configuración. No merece la pena ahorrarse ese paso.

Artículos relacionados