IAtechX Logo
IAtechXAI & Software Engineering
Tutoriais Técnicos

Como Instalar o Llama 3 num VPS Barato com Ollama e Docker

Guia completo para correr o Llama 3 8B no seu próprio servidor: requisitos de RAM, Docker Compose, Nginx com TLS e como medir o desempenho real.

Nelson BarbosaNelson Barbosa
2026-09-1410 min de leitura
Como Instalar o Llama 3 num VPS Barato com Ollama e Docker

1. Porque alojar o modelo em vez de usar uma API

Há três razões concretas para correr o Llama 3 em máquina própria. A primeira é o custo previsível: um VPS cobra um valor fixo mensal independentemente do número de pedidos, enquanto as APIs comerciais cobram por token e o valor cresce com a utilização. A segunda é a privacidade — se processa dados de clientes, contratos ou registos internos, manter tudo dentro de um servidor que controla evita enviar esse conteúdo a terceiros e simplifica a conformidade com o RGPD. A terceira é a ausência de limites de taxa: não há quotas nem cortes de serviço a meio de um processamento em lote. Em troca, assume a manutenção do servidor, as actualizações de segurança e uma qualidade de resposta inferior à dos modelos de fronteira. Vale a pena para classificação de texto, extracção de dados, resumos e tarefas repetitivas; não vale para raciocínio complexo.

2. Quanta RAM precisa, e porquê

O Llama 3 8B quantizado em 4 bits (Q4_K_M) ocupa cerca de 4,7 GB em disco, e é preciso carregá-lo inteiro em memória. A isso acresce a cache de contexto (KV cache), que cresce com o tamanho do prompt, mais a memória do sistema operativo e dos contentores. Na prática: **8 GB de RAM é o mínimo funcional** e fica apertado com contextos longos; **16 GB é confortável** e permite contextos maiores ou um segundo modelo carregado. Abaixo de 8 GB o sistema recorre a swap e a latência torna-se inutilizável. Quanto a CPU, o número de núcleos importa menos do que a geração. Um processador recente com AVX-512 faz inferência substancialmente mais rápida que um núcleo antigo, ao mesmo número de vCPUs. Prefira NVMe a SATA: o carregamento inicial do modelo lê vários gigabytes. **Sobre velocidade:** em CPU pura, sem GPU, conte com um ritmo de leitura — dezenas de tokens por segundo não é realista na maioria dos VPS económicos. Meça no seu servidor antes de assumir qualquer número; a secção 8 mostra como.

Oferta de Parceiro Verificado

AlphaVPS

Instâncias AMD Ryzen com NVMe. Confirme a RAM e a geração do CPU no plano antes de contratar.

Ver planos VPS na AlphaVPS

Ligação de afiliado: recebemos uma comissão se contratares, sem custo adicional para ti.

3. Preparar o servidor antes de instalar seja o que for

Um servidor acabado de provisionar está exposto. Antes de instalar o Ollama, feche as portas e crie um utilizador sem privilégios. Estes passos demoram cinco minutos e evitam que a máquina seja comprometida na primeira noite. Desactive o acesso por palavra-passe assim que confirmar que a chave SSH funciona — não antes, ou fica fora do seu próprio servidor. E note que a firewall só abre as portas 22, 80 e 443. A porta do Ollama, a 11434, fica deliberadamente fechada ao exterior; a secção 6 explica porquê.

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 o Docker

Use o repositório oficial do Docker, não o pacote `docker.io` das distribuições, que costuma estar várias versões atrasado e não inclui o plugin `compose` moderno. Depois de adicionar o utilizador ao grupo `docker`, termine a sessão e volte a entrar para que a alteração tenha efeito.

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 e Open WebUI com Docker Compose

Repare no detalhe mais importante deste ficheiro: o Ollama publica a porta em `127.0.0.1:11434`, não em `0.0.0.0`. Isto significa que só é acessível a partir do próprio servidor e dos outros contentores — nunca directamente da internet. O Open WebUI liga-se ao Ollama pela rede interna do Docker e é a única peça que virá a ser exposta, através do Nginx e sempre atrás de autenticação. Os volumes garantem que os modelos descarregados e as contas de utilizador sobrevivem a reinícios e actualizações dos contentores.

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. Descarregar o modelo e escolher a quantização

A quantização determina o compromisso entre memória e qualidade. `Q4_K_M` é o ponto de equilíbrio habitual e o que recomendo começar. `Q5_K_M` melhora ligeiramente a coerência a troco de cerca de 1 GB extra. `Q8_0` é quase sem perdas mas ocupa perto de 8,5 GB, o que só cabe confortavelmente em 16 GB de RAM. Se o servidor tem 8 GB, fique-se por `Q4_K_M`. A diferença de qualidade é pequena; a diferença entre caber e não caber em memória não é.

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 e certificado TLS

Este é o passo que transforma um serviço local num serviço acessível com segurança. O Nginx recebe o tráfego em 443, termina o TLS e encaminha para o Open WebUI em loopback. O tempo limite alargado não é decorativo: a geração de respostas longas em CPU pode exceder o limite padrão de 60 segundos do Nginx e devolver um erro 504 a meio da resposta. Aponte primeiro o registo `A` do seu domínio para o IP do servidor e só depois corra o `certbot`, ou a validação falha.

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 o desempenho real no seu servidor

Não acredite em números de desempenho publicados por terceiros, incluindo os deste artigo. O ritmo de geração depende do modelo de CPU, da geração, da quantização, do tamanho do contexto e da carga do vizinho na mesma máquina física — algo que num VPS partilhado não controla. O `--verbose` do Ollama devolve as métricas reais da sua instância. O número que interessa é `eval rate`, em tokens por segundo. Se o valor for baixo demais para o seu caso de uso, as opções por ordem de eficácia são: reduzir o contexto, descer a quantização, mudar para um modelo mais pequeno como o Llama 3.2 3B, ou passar para uma instância com 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 a API a partir do seu código

O Ollama expõe uma API compatível com o formato da OpenAI, o que significa que a maioria das bibliotecas existentes funciona apenas mudando o `base_url`. Não é preciso reescrever integrações. Como a porta 11434 está fechada ao exterior, o código tem de correr no mesmo servidor, ou chegar lá por túnel SSH ou rede privada. **Nunca abra a 11434 ao público:** a API do Ollama não tem autenticação nenhuma. Quem lhe descobrir o IP usa o seu servidor à vontade, e há varredores automáticos à procura exactamente disso.

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. Quando isto não compensa

Seja honesto quanto ao volume. Se faz algumas centenas de chamadas por mês, uma API comercial sai mais barata do que qualquer VPS e poupa-lhe a manutenção. O alojamento próprio começa a compensar com utilização constante e elevada, ou quando a privacidade dos dados é requisito e não preferência. Também não compensa se precisa de qualidade de fronteira. Um 8B quantizado é competente em tarefas delimitadas e claramente inferior em raciocínio, código complexo ou textos longos. Comparar com os modelos maiores comerciais e esperar paridade leva a desilusão. E conte o tempo. Actualizações de segurança, renovação de certificados, monitorização e recuperação de falhas são horas suas. Se o seu tempo tem valor de mercado, inclua-o no cálculo antes de decidir.

Perguntas Frequentes (FAQ)

Posso correr o Llama 3 70B num VPS sem GPU?

Tecnicamente arranca com quantização agressiva e RAM suficiente, mas a velocidade em CPU torna-o impraticável para uso interactivo. Para um VPS económico, o 8B é o limite razoável. Se precisa do 70B, precisa de GPU.

É legal usar o Llama 3 comercialmente?

A licença da Meta permite uso comercial, com condições — entre elas um limiar de utilizadores mensais acima do qual é necessária licença específica, e requisitos de atribuição. Leia a licença aplicável à versão que descarregar antes de a integrar num produto pago.

O que acontece se reiniciar o servidor?

Com `restart: unless-stopped` no compose, os contentores sobem sozinhos e os modelos continuam nos volumes. A primeira resposta depois do arranque é mais lenta porque o modelo tem de ser relido do disco para memória.

Como faço cópias de segurança?

Os modelos não precisam de cópia: voltam a descarregar-se com um `ollama pull`. O que interessa guardar é o volume `webui_data`, que contém contas, conversas e configurações. Um `docker run --rm -v webui_data:/data -v $(pwd):/backup alpine tar czf /backup/webui.tar.gz /data` resolve.

Preciso mesmo do Nginx, ou posso expor a porta 8080 directamente?

Pode, mas fica sem TLS — as credenciais e as conversas viajam em claro. O Nginx com certbot dá-lhe HTTPS gratuito e renovação automática por uns minutos de configuração. Não vale a pena poupar esse passo.

Artigos relacionados