Tutoriais de VPS
Hospedar o Perplexica, buscador de IA privado, em uma VPS (2026): guia de implantação com SearXNG, Docker, Ollama/OpenAI e HTTPS
Este tutorial explica como auto-hospedar o Perplexica / Vane em uma VPS para criar um buscador de IA privado semelhante ao Perplexity. O conteúdo aborda o backend de busca SearXNG, a implantação em contêiner único Docker, uma solução avançada com SearXNG independente, a integração de modelos OpenAI/Ollama, HTTPS com Caddy, a privacidade das buscas, backup e atualização, e problemas comuns como erro 502, ausência de resultados de busca e falhas de conexão com o modelo.

Hoje em dia, quando pesquiso informações, cada vez menos dependo apenas das páginas de resultados de busca tradicionais.
Não é que os buscadores tenham ficado inúteis, mas muitas perguntas simplesmente não combinam com abrir página por página: por exemplo, "como implantar determinada ferramenta", "como corrigir este erro" ou "quais são as diferenças entre várias soluções". Uma busca comum te dá 10 links, e você ainda precisa abri-los, compará-los e descartar anúncios e artigos antigos.
Ferramentas de busca com IA como o Perplexity ficaram populares justamente porque combinam "busca + resumo + fontes citadas" em uma coisa só.
Mas o problema também é evidente: o que você busca, o que clica e o que pergunta fica, por padrão, na plataforma de outra pessoa.
Se você quer um ponto de entrada de busca com IA que você mesmo controla, dê uma olhada no Perplexica. Hoje o projeto vem adotando gradualmente o nome Vane no GitHub, mas muita gente ainda pesquisa pelo nome antigo Perplexica. Para facilitar o entendimento, a seguir vou chamá-lo principalmente de Perplexica.
A proposta dele é direta:
- Usar o SearXNG como backend de busca
- Usar um modelo grande para organizar os resultados da busca
- Entregar uma resposta com fontes citadas
- Pode conectar OpenAI, Claude, Groq ou modelos locais do Ollama
Este artigo aborda a auto-hospedagem em VPS: como implantar, qual configuração é necessária, como configurar HTTPS, por que o JSON do SearXNG é fundamental e quais armadilhas evitar.
O Perplexica não é um buscador comum, nem um chatbot puro.
Ele se encaixa em cenários como estes:
| Necessidade | Serve para o Perplexica | Motivo |
|---|---|---|
| Querer construir uma busca com IA semelhante ao Perplexity | Serve | Os resultados da busca são organizados em respostas pelo modelo |
| Querer reduzir o registro do comportamento de busca pelas plataformas | Serve | O ponto de entrada de busca e o SearXNG ficam na sua própria VPS |
| Pesquisa de SEO, concorrência e material técnico | Serve | Consegue resumir rapidamente várias fontes |
| Só querer montar uma caixa de busca comum | Não necessariamente | O SearXNG sozinho é mais leve |
| Querer perguntas e respostas sobre documentos privados | Não é muito adequado | AnythingLLM / Dify são mais apropriados |
| Querer executar busca com IA totalmente local | É possível, mas a máquina precisa ser potente o suficiente | A inferência local com Ollama consome muitos recursos |
Eu entendo assim: o SearXNG é responsável por encontrar o material, e o modelo grande é responsável por lê-lo.
Se você só quer buscar páginas web, o SearXNG já basta. Se você quer obter diretamente respostas com fontes após a busca, então o Perplexica faz sentido.
Aqui também é preciso separar dois casos.
Se você usa APIs como OpenAI, Claude, Groq ou OpenRouter, a carga na VPS não é alta.
A VPS executa principalmente:
- A aplicação web Perplexica / Vane
- SearXNG integrado ou independente
- SQLite / dados de configuração
- Proxy reverso e HTTPS
Configuração recomendada:
| Uso | Configuração da VPS |
|---|---|
| Teste pessoal | 1 núcleo / 2GB / 20GB SSD |
| Uso pessoal de longo prazo | 2 núcleos / 4GB / 40GB SSD |
| Uso por várias pessoas | 4 núcleos / 8GB / 80GB SSD |
Esse tipo de implantação não precisa de GPU. A inferência do modelo acontece no provedor da API, e a VPS só é responsável por buscar e encaminhar as requisições.
Se você quer que o modelo também rode na VPS, os requisitos de configuração aumentam.
| Solução | Configuração recomendada |
|---|---|
| Perplexica + API na nuvem | 2 núcleos 4GB é bem confortável |
| Perplexica + modelo pequeno do Ollama | A partir de 4 núcleos 16GB |
| Querer rodar modelos acima de 14B | VPS com GPU ou máquina local com placa de vídeo |
Uma VPS pequena e barata consegue rodar o Perplexica, mas não espere que 2GB de memória rodem ao mesmo tempo um modelo Ollama 7B. Conseguir iniciar e ser utilizável são duas coisas diferentes.
A forma simples recomendada oficialmente é o Docker. A imagem full do Perplexica inclui o SearXNG dentro, então não é preciso implantar o backend de busca separadamente.
Primeiro faça login na VPS:
ssh root@your_server_ip
Atualize o sistema:
apt update && apt upgrade -y
Instale o Docker:
apt install -y ca-certificates curl gnupg ufw
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Confirme o Docker:
docker --version
docker compose version
Execute o Perplexica:
docker run -d \
--name perplexica \
--restart unless-stopped \
-p 127.0.0.1:3000:3000 \
-v perplexica-data:/home/perplexica/data \
itzcrazykns1337/perplexica:latest
Aqui eu usei de propósito:
127.0.0.1:3000:3000
Isso significa que apenas o acesso local é permitido, sem exposição direta à internet. Depois, use o Caddy como proxy reverso para um domínio HTTPS.
Ver o status do contêiner:
docker ps --filter "name=perplexica"
Ver os logs:
docker logs perplexica --tail=100
Testar localmente:
curl -I http://127.0.0.1:3000
Se retornar 200, 302 ou uma resposta semelhante, o serviço está basicamente no ar.
Se você prefere uma abordagem mais fácil de manter, use o Compose.
Crie o diretório:
mkdir -p /opt/perplexica
cd /opt/perplexica
Escreva o docker-compose.yml:
services:
perplexica:
image: itzcrazykns1337/perplexica:latest
container_name: perplexica
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
volumes:
- perplexica-data:/home/perplexica/data
volumes:
perplexica-data:
Inicie:
docker compose up -d
Verifique:
docker compose ps
docker logs perplexica --tail=100
Essa solução serve para a maioria das pessoas: um contêiner, SearXNG integrado e dados persistidos com um volume.
Suponha que você vá usar:
search.example.com
Adicione um registro A no DNS:
search.example.com -> your_server_ip
Instale o Caddy:
apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' > /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install -y caddy
Edite a configuração:
nano /etc/caddy/Caddyfile
Escreva:
search.example.com {
reverse_proxy 127.0.0.1:3000
}
Verifique e recarregue:
caddy validate --config /etc/caddy/Caddyfile
systemctl reload caddy
Agora acesse:
https://search.example.com
O Caddy solicitará e renovará automaticamente os certificados HTTPS.
Se você usa o proxy reverso do Caddy, só precisa abrir SSH, HTTP e HTTPS:
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status
Não é recomendado expor a porta 3000 diretamente à internet:
ufw deny 3000/tcp
Se o Docker acima já estiver vinculado a 127.0.0.1:3000:3000, a porta 3000 já não será acessível de fora, o que é mais seguro.
Depois de abrir a página web, configure primeiro o AI Provider.
Opções comuns:
| Provider | Para quem é adequado |
|---|---|
| OpenAI | Quem quer praticidade e qualidade de resposta estável |
| Claude | Resumos de textos longos e muitas perguntas explicativas |
| Groq | Quem quer respostas mais rápidas |
| OpenRouter | Quem quer uma única Key para conectar vários modelos |
| Ollama | Quem quer rodar modelos localmente e manter os dados o máximo possível na máquina |
Se for só para uso pessoal, sugiro primeiro colocar o fluxo para funcionar com um API Provider. Quando confirmar que você realmente precisa de um modelo local, então mexa no Ollama.
Depois de concluir a configuração, faça uma pergunta simples para testar:
最近 Docker Compose 部署自托管服务有哪些常见坑?
Preste atenção em três coisas:
- Se consegue retornar uma resposta
- Se há fontes citadas
- Se os resultados da busca têm relação com a pergunta
Se não houver fontes de busca e parecer apenas um chatbot comum, então verifique se o SearXNG está funcionando corretamente.
Se você quer conectar o Ollama, primeiro instale-o na máquina host:
curl -fsSL https://ollama.com/install.sh | sh
Baixe um modelo:
ollama pull qwen2.5:7b
Teste o Ollama:
curl http://127.0.0.1:11434/api/tags
Se o Perplexica estiver em um contêiner Docker, ele não pode usar localhost para acessar o Ollama da máquina host.
No Linux, uma forma mais confiável é adicionar no Compose:
extra_hosts:
- "host.docker.internal:host-gateway"
Exemplo completo:
services:
perplexica:
image: itzcrazykns1337/perplexica:latest
container_name: perplexica
restart: unless-stopped
ports:
- "127.0.0.1:3000:3000"
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- perplexica-data:/home/perplexica/data
volumes:
perplexica-data:
Depois, na página web, preencha o endereço do Ollama como:
http://host.docker.internal:11434
Não preencha http://localhost:11434. Esse é o próprio contêiner, não a máquina host.
A imagem full de contêiner único é adequada para uma implantação rápida, mas se você quer controlar os mecanismos de busca com mais detalhe, ou quer que várias ferramentas compartilhem um mesmo SearXNG, pode implantar o SearXNG separadamente e conectá-lo com a versão slim do Perplexica.
Por exemplo:
- O Perplexica usa o SearXNG
- O Open WebUI também se conecta ao SearXNG para Web Search
- Você quer ajustar separadamente os mecanismos de busca, o idioma e a busca segura
- Você quer controlar a política de acesso do SearXNG
Nesse caso, você pode usar perplexica:slim-latest.
Crie o diretório:
mkdir -p /opt/perplexica/searxng
cd /opt/perplexica
Crie a configuração do SearXNG:
cat > searxng/settings.yml << 'EOF'
use_default_settings: true
server:
secret_key: "replace-with-a-long-random-secret"
search:
formats:
- html
- json
EOF
Observe que o json aqui é fundamental. O Perplexica precisa de resultados JSON ao chamar o SearXNG; se não estiver habilitado, muitas vezes aparece a situação de "o SearXNG abre normalmente, mas o Perplexica não tem resultados de busca".
Escreva o Compose:
services:
searxng:
image: searxng/searxng:latest
container_name: perplexica-searxng
restart: unless-stopped
volumes:
- ./searxng:/etc/searxng
networks:
- perplexica-net
perplexica:
image: itzcrazykns1337/perplexica:slim-latest
container_name: perplexica
restart: unless-stopped
environment:
- SEARXNG_API_URL=http://searxng:8080
ports:
- "127.0.0.1:3000:3000"
volumes:
- perplexica-data:/home/perplexica/data
depends_on:
- searxng
networks:
- perplexica-net
volumes:
perplexica-data:
networks:
perplexica-net:
Inicie:
docker compose up -d
Verifique:
docker compose ps
docker logs perplexica-searxng --tail=80
docker logs perplexica --tail=80
Teste o JSON do SearXNG:
docker exec perplexica-searxng sh -c "wget -qO- 'http://127.0.0.1:8080/search?q=vps&format=json' | head"
Se aqui não houver saída JSON, corrija primeiro o SearXNG e não tenha pressa em alterar o Perplexica.
Auto-hospedar o Perplexica não equivale a anonimato total.
O que você pode controlar é:
- O ponto de entrada de busca está no seu próprio domínio
- O SearXNG não cria perfis de usuário
- Você pode escolher quais backends de busca usar
- Os registros de consulta não são entregues por padrão a uma plataforma de busca com IA
Mas se você conectar modelos na nuvem como OpenAI, Claude ou Groq, as perguntas e os resumos de busca ainda serão enviados ao provedor de API correspondente.
Então, uma forma mais precisa de dizer é:
- Com modelos na nuvem: o ponto de entrada de busca e a agregação de buscas são auto-hospedados, e o processamento do modelo fica em um terceiro
- Com Ollama: a busca e o modelo ficam na sua própria máquina o máximo possível, mas a configuração da VPS precisa ser maior
Não entenda "auto-hospedagem" como "todos os dados nunca saem de casa". Isso depende do modelo e das fontes de busca que você conecta.
Os dados principais do Perplexica ficam no volume do Docker.
Primeiro veja o volume:
docker volume ls | grep perplexica
Se você usa um volume nomeado, pode fazer backup assim:
mkdir -p /opt/backups
docker run --rm \
-v perplexica-data:/data \
-v /opt/backups:/backup \
alpine \
tar -czf /backup/perplexica-data-$(date +%F).tar.gz -C /data .
Se você usa um bind mount, como /opt/perplexica/data, basta empacotar o diretório diretamente:
tar -czf /opt/backups/perplexica-data-$(date +%F).tar.gz /opt/perplexica
Depois sincronize com o armazenamento de objetos:
rclone copy /opt/backups/perplexica-data-$(date +%F).tar.gz r2:backup-bucket/perplexica/
No mínimo, faça backup de:
- O volume de dados do Perplexica
- O arquivo Compose
- O SearXNG settings.yml
- O Caddyfile
- As variáveis de ambiente e as notas de configuração de modelos que você usa
Com o método de contêiner único:
docker pull itzcrazykns1337/perplexica:latest
docker stop perplexica
docker rm perplexica
docker run -d \
--name perplexica \
--restart unless-stopped \
-p 127.0.0.1:3000:3000 \
-v perplexica-data:/home/perplexica/data \
itzcrazykns1337/perplexica:latest
Com o método Compose:
cd /opt/perplexica
docker compose pull
docker compose up -d
Faça backup antes de atualizar. Depois de atualizar, verifique:
docker compose ps
docker logs perplexica --tail=100
curl -I http://127.0.0.1:3000
Depois faça de fato uma busca na página web para confirmar que a busca, as citações e as respostas do modelo funcionam corretamente.
Primeiro verifique se o Perplexica está no ar:
docker ps --filter "name=perplexica"
docker logs perplexica --tail=100
Depois veja a porta local:
curl -I http://127.0.0.1:3000
Se não for acessível nem localmente, o problema está no contêiner. Se localmente funcionar bem mas o domínio der 502, o problema provavelmente está no Caddy:
caddy validate --config /etc/caddy/Caddyfile
journalctl -u caddy -n 100 --no-pager
Se você usa a imagem full, primeiro veja os logs:
docker logs perplexica --tail=100
Se você usa o SearXNG independente, concentre-se em verificar o JSON:
docker exec perplexica-searxng sh -c "wget -qO- 'http://127.0.0.1:8080/search?q=test&format=json' | head"
O settings.yml deve conter:
search:
formats:
- html
- json
Reinicie após a alteração:
docker compose restart searxng perplexica
Primeiro confirme a configuração do Provider.
Se usar OpenAI / OpenRouter:
- Se a API Key está correta
- Se a conta tem saldo
- Se o modelo selecionado está disponível
- Se a VPS consegue acessar o endereço da API
Você pode testar a rede na VPS:
curl -I https://api.openai.com
Se usar Ollama:
curl http://127.0.0.1:11434/api/tags
Para o contêiner acessar o Ollama da máquina host, use host.docker.internal ou o endereço de gateway da máquina host.
A lentidão geralmente tem três causas:
- Resposta lenta das fontes de busca
- API do modelo na nuvem lenta
- Modelo local do Ollama grande demais ou máquina fraca demais
Teste separadamente primeiro.
Testar o SearXNG:
time curl -s 'http://127.0.0.1:3000' > /dev/null
Ver recursos:
htop
free -h
docker stats
Se o modelo local do Ollama estiver lento, trocar por um modelo menor costuma ser mais eficaz do que adicionar um monte de parâmetros.
Se você usa o proxy de nuvem laranja da Cloudflare, primeiro confirme que o HTTPS funciona bem e depois ative o proxy.
Ao encontrar problemas, mude temporariamente para DNS only para descartar a interferência da Cloudflare. Aplicações de busca com IA podem usar conexões longas ou saída em streaming, e interrupções de resposta podem ocorrer quando a configuração da camada de proxy não é adequada.
Essas ferramentas são fáceis de confundir.
| Ferramenta | Mais adequada para |
|---|---|
| SearXNG | Metabusca privada, sem necessidade de resumo com IA |
| Perplexica / Vane | Busca com IA do tipo Perplexity auto-hospedada |
| Open WebUI | Ponto de entrada de chat, frontend para modelos locais |
| AnythingLLM | Perguntas e respostas sobre base de conhecimento de documentos privados |
| Dify | Aplicações de IA e orquestração de fluxos de trabalho |
Minhas sugestões:
- Só quer buscar páginas web: SearXNG
- Quer "busca + resumo com IA + citações": Perplexica
- Quer conversar com modelos: Open WebUI
- Quer perguntar aos seus próprios documentos: AnythingLLM
- Quer criar aplicações de IA para outras pessoas usarem: Dify
Não instale todas as ferramentas. Comece escolhendo uma com base na sua necessidade principal.
Se fosse para meu próprio uso, eu faria assim:
- VPS: a partir de 2 núcleos 4GB
- Implantação: colocar primeiro a imagem full do Perplexica no ar
- Domínio: proxy reverso HTTPS com Caddy
- Portas: abrir apenas 80/443, não abrir a 3000
- Modelo: conectar primeiro OpenRouter ou OpenAI para confirmar a experiência
- Depois: se usar com frequência, considerar o SearXNG independente
- Requisitos altos de privacidade: conectar então o Ollama, mas a máquina precisa ser atualizada
O maior valor do Perplexica não é "instalar mais uma ferramenta de IA", mas transformar os resultados da busca em respostas com fontes rastreáveis. Para quem faz pesquisa técnica, SEO, análise de concorrência e resolução de problemas de operações, isso economiza mais tempo do que a busca comum.
Mas ele também não é onipotente. Qualidade ruim das fontes de busca, modelos resumindo de forma aleatória e citações imprecisas podem acontecer. O verdadeiro pré-requisito para ser útil a longo prazo é você estar disposto a manter o SearXNG, a configuração dos modelos, o proxy reverso e os backups, em vez de instalar e esquecer.