Como instalar o Open WebUI em uma VPS Ubuntu

O Open WebUI é uma interface web auto-hospedada para interagir com modelos de linguagem via Ollama ou qualquer API compatível com OpenAI. Este guia instala o Open WebUI com Docker, configura Nginx como reverse proxy e emite SSL gratuito com Certbot.

cerca de 30 minjunho/2026 · Ubuntu 24.04 LTS

Antes de começar

VPS mínima
2 vCPU · 4 GB RAM · 20 GB SSD (Runstack Basic ou superior)
Sistema
Ubuntu 24.04 LTS
Também
  • Docker instalado (veja /tutorial/como-instalar-docker)
  • Ollama instalado e rodando (opcional; veja /tutorial/como-instalar-ollama)
  • Subdomínio DNS apontado para o IP da VPS
  • Portas 80 e 443 abertas no firewall

Instalação passo a passo

  1. 1

    Atualizar o sistema e instalar Docker

    Garanta que o sistema está atualizado e o Docker instalado.

    bash
    apt update && apt upgrade -y
    curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
    docker --version
  2. 2

    Escolher o modo de instalação

    O Open WebUI oferece dois modos: (A) conectado ao Ollama local (recomendado para VPS com GPU ou Ollama instalado) e (B) modo standalone com chave de API OpenAI-compatível.

  3. 3

    Modo A: instalar com Ollama como backend local

    Este comando conecta o Open WebUI ao Ollama rodando no host da VPS via `host.docker.internal`.

    bash
    docker run -d \
      -p 127.0.0.1:3000:8080 \
      --add-host=host.docker.internal:host-gateway \
      -v open-webui:/app/backend/data \
      --name open-webui \
      --restart always \
      ghcr.io/open-webui/open-webui:main
  4. 4

    Modo B: instalar com chave de API externa (OpenAI, Groq etc.)

    Use este modo se não tiver Ollama instalado. Passe a variável OPENAI_API_KEY para acessar modelos externos.

    bash
    docker run -d \
      -p 127.0.0.1:3000:8080 \
      -e OPENAI_API_KEY=sk-sua-chave-aqui \
      -v open-webui:/app/backend/data \
      --name open-webui \
      --restart always \
      ghcr.io/open-webui/open-webui:main
  5. 5

    Verificar se o container subiu

    Confirme que o Open WebUI está respondendo localmente antes de configurar o Nginx.

    bash
    docker ps | grep open-webui
    docker logs open-webui --tail=30
    
    # Testar resposta local
    curl -s http://127.0.0.1:3000/ | head -c 100
  6. 6

    Configurar Nginx como reverse proxy

    Crie um virtual host que encaminha o tráfego HTTPS para o Open WebUI na porta 3000.

    bash
    apt install -y nginx
    
    cat > /etc/nginx/sites-available/open-webui << 'NGINXEOF'
    server {
        listen 80;
        server_name chat.seudominio.com.br;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name chat.seudominio.com.br;
    
        ssl_certificate /etc/letsencrypt/live/chat.seudominio.com.br/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/chat.seudominio.com.br/privkey.pem;
    
        client_max_body_size 50M;
    
        location / {
            proxy_pass http://127.0.0.1:3000;
            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;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_read_timeout 3600s;
        }
    }
    NGINXEOF
    
    ln -s /etc/nginx/sites-available/open-webui /etc/nginx/sites-enabled/open-webui
    nginx -t && systemctl reload nginx
  7. 7

    Obter certificado SSL com Certbot

    Emita um certificado gratuito e configure renovação automática.

    bash
    apt install -y certbot python3-certbot-nginx
    
    certbot --nginx \
      -d chat.seudominio.com.br \
      --non-interactive \
      --agree-tos \
      --email seu@email.com
    
    systemctl reload nginx
  8. 8

    Configurar firewall UFW

    Restrinja o acesso às portas necessárias.

    bash
    ufw allow 22/tcp comment 'SSH'
    ufw allow 80/tcp comment 'HTTP'
    ufw allow 443/tcp comment 'HTTPS'
    ufw --force enable
    ufw status verbose
  9. 9

    Criar conta de administrador

    Acesse https://chat.seudominio.com.br no navegador. O primeiro usuário a se registrar automaticamente recebe privilégios de administrador.

Não quer configurar manualmente?

Implante o Open WebUI em menos de 5 minutos com a Runstack. Infraestrutura da OPEN Datacenter, com servidores em São Paulo.

Se der problema

Certifique-se de que o Ollama está rodando no host (`systemctl status ollama`) e que o container foi iniciado com `--add-host=host.docker.internal:host-gateway`.

bash
# Verificar Ollama no host
curl http://localhost:11434/api/tags

O container do Open WebUI pode estar ainda iniciando. Aguarde 30 segundos e teste localmente.

bash
docker logs open-webui --tail=20
curl http://127.0.0.1:3000/

Aumente o `client_max_body_size` no Nginx. O padrão é 1M, que é insuficiente para PDFs grandes.

bash
# No bloco server do Nginx, adicione:
# client_max_body_size 100M;
nginx -t && systemctl reload nginx

Confirme que o flag `--restart always` foi usado no docker run. Para adicionar retroativamente:

bash
docker update --restart always open-webui

Verifique se há modelos instalados no Ollama e se a URL está correta nas configurações do Open WebUI (Admin Panel → Connections → Ollama).

bash
# No host, listar modelos disponíveis:
ollama list

Perguntas frequentes

Sim. Ele suporta qualquer API compatível com o padrão OpenAI, incluindo serviços como Groq, Mistral, Together AI e OpenAI diretamente. Passe a chave via OPENAI_API_KEY ou configure nas opções de conexão.

Em Admin Panel → Models → Pull a model from Ollama.com, digite o nome do modelo (ex.: llama3.2, mistral, gemma3) e confirme. O download começa em background.

Sim. Se o servidor tiver GPU NVIDIA, instale o Ollama com suporte CUDA e use a imagem `ghcr.io/open-webui/open-webui:ollama` que já inclui o Ollama com suporte a GPU (`--gpus=all`).

Os dados ficam no volume Docker `open-webui`. Para backup: `docker run --rm -v open-webui:/data -v $(pwd):/backup alpine tar czf /backup/open-webui-backup.tar.gz /data`.

Execute: `docker pull ghcr.io/open-webui/open-webui:main && docker stop open-webui && docker rm open-webui` e rode o comando docker run original novamente. Os dados persistem no volume.