SSD Nodes Learn Hosting plans →
Guias Matt ConnorPor Matt Connor

Searx ou SearXNG: qual instalar hoje?

O Searx não recebe commits desde abril de 2023. Veja como confirmar o abandono, por que instalar SearXNG e o que muda na configuração da instância.

Searx ou SearXNG: qual deve instalar?

Searx e SearXNG são dois projetos diferentes com nomes quase iguais, e apenas um deles ainda recebe correções. Instale o SearXNG. O Searx original não recebe nenhum commit de código desde abril de 2023, e o próprio README resume a situação numa linha: "Searx já não é mantido."

Isto cria um problema prático, não filosófico. Os dois projetos partilham uma captura de ecrã, a maior parte de um ficheiro de configuração e metade do nome, por isso um guia escrito para um parece aplicar-se ao outro. Não se aplica. O ficheiro de definições está noutro local, a proteção contra bots é nova e o nome do pacote desapareceu das versões atuais do Ubuntu. A seguir, apresentamos a diferença entre os projetos, os comandos para verificar o estado por si mesmo e a lista do que mudou para quem está a configurar uma instância.

O que é o Searx e de onde veio o SearXNG

O Searx é um metamoto de pesquisa. Não mantém um índice próprio. Recebe a sua consulta, encaminha-a para outros serviços de pesquisa, como Bing, DuckDuckGo ou Wikipedia, e depois combina as respostas numa única página de resultados. A vantagem é que esses serviços veem o endereço do servidor em vez do seu. O custo é a manutenção. Cada motor é um pequeno componente de código que analisa o HTML ou a API de outra entidade. Por isso, um motor deixa de funcionar sempre que esse serviço upstream muda. Um metamoto de pesquisa só é tão saudável quanto as pessoas que corrigem os seus módulos de motores.

O repositório searx foi criado em outubro de 2013. Em abril de 2021, um antigo maintainer iniciou o SearXNG como um fork desse projeto. O "NG" significa next generation. O README do próprio Searx descreve os dois projetos lado a lado, e essa descrição continua a ser o resumo mais claro da separação:

O SearxNG é um fork do searx, criado por um antigo maintainer do searx.
O SearxNG tem rolling releases, dependências atualizadas com maior frequência e motores corrigidos mais rapidamente.

A divergência que esteve na origem do fork estava relacionada com os diagnósticos. O Searx considerava que uma instância não devia armazenar dados de utilização, e as suas predefinições deixam isso explícito: enable_stats: False # activate /stats page - note: it may leak usage data. O SearXNG tomou a decisão oposta e inclui enable_metrics: true nas suas predefinições. Essas métricas preenchem as barras de tempo de resposta e as páginas de erro, que facilitam encontrar e corrigir um motor avariado. As duas posições são defensáveis. Apenas uma delas continuou a lançar código.

O Searx morreu? Como verificar por si próprio

“Mort​o” não é um estado que o GitHub comunique, por isso leia os dois sinais disponíveis e tire a sua conclusão. O primeiro é saber se o repositório está arquivado e quando recebeu o último push.

curl -s https://api.github.com/repos/searx/searx | jq -r '.archived, .pushed_at'
curl -s https://api.github.com/repos/searxng/searxng | jq -r '.archived, .pushed_at'

Em 10 October 2026, o primeiro comando imprime false e 2026-05-14T10:02:22Z. O segundo imprime false e um timestamp recente, normalmente do último dia ou dos dois últimos dias. Repare no primeiro valor. O repositório searx não está arquivado e ninguém fechou a porta, razão pela qual esta pergunta continua a surgir.

pushed_at é um sinal fraco por si só, porque muda quando há um push para qualquer branch, incluindo uma alteração de uma linha na documentação. Leia antes a lista de commits.

curl -s 'https://api.github.com/repos/searx/searx/commits?per_page=5' \
  | jq -r '.[] | .commit.committer.date[:10] + "  " + (.commit.message | split("\n")[0])'

Em 10 October 2026, o resultado é:

2026-05-14  [doc] add hister reference
2023-09-07  Searx is no longer maintained
2023-04-05  Fix quoting issue in search_operator plugin (#3479)
2023-04-04  Bump pallets-sphinx-themes from 2.0.2 to 2.0.3 (#3450)
2023-04-04  Update searx.data - update_wikidata_units.py (#3454)

Leia de baixo para cima. O trabalho normal para em April 2023. O commit de September 2023 corresponde à inclusão do aviso no README pelos maintainers. O único commit posterior é documentação, porque o autor original passou a trabalhar no Hister, uma ferramenta de pesquisa que indexa as páginas e os ficheiros escolhidos por si, em vez de consultar outros motores. É uma ideia diferente e útil se o que pretende é um motor de pesquisa pessoal para o seu próprio conteúdo.

O segundo sinal é o empacotamento, que é aquilo de que a maioria dos tutoriais antigos depende sem o dizer.

  • O PyPI contém vinte searx releases, de 0.1.2 em January 2014 a 0.17.0 em July 2020, e todos continuam disponíveis para download. pip install searx é executado com sucesso e fornece o mais recente deles, 0.17.0, que corresponde a código de nove meses antes da existência do fork.
  • O Debian lançou searx 1.1.0 no Debian 12 (bookworm) e continua a disponibilizá-lo em unstable. O pacote foi removido de testing em October 2023, por isso o Debian 13 (trixie) não inclui qualquer pacote searx.
  • O Ubuntu incluiu-o pela última vez na versão 22.04, com a versão 1.0.0. No Ubuntu 24.04, sudo apt install searx termina com E: Unable to locate package searx.
  • O searx.space, o diretório público de instâncias para o qual o projeto sempre encaminhou os utilizadores, lista agora instâncias SearXNG.

Este é, portanto, o estado real. O código é público, continua a funcionar e pode fazer clone e iniciá-lo hoje. O que não terá são correções para os motores nem atualizações de segurança, e num motor de metapesquisa esse é o trabalho principal. Os motores degradam-se conforme o calendário de terceiros. Uma instância sem manutenção devolve menos resultados todos os meses, sem que ninguém tenha de alterar o servidor.

O que o fork alterou numa nova instância

O ficheiro de definições mudou e agora funciona como uma sobreposição

No Searx, editava searx/settings.yml dentro da árvore do código-fonte. No SearXNG, o ficheiro está em /etc/searxng/settings.yml, e o processo encontra-o através da variável de ambiente SEARXNG_SETTINGS_PATH. O modelo que o instalador copia para esse local é curto:

use_default_settings: true

general:
  debug: false
  instance_name: "SearXNG"

search:
  safe_search: 2
  autocomplete: 'duckduckgo'
  formats:
    - html

server:
  # Is overwritten by ${SEARXNG_SECRET}
  secret_key: "ultrasecretkey"
  limiter: true
  image_proxy: true

valkey:
  # URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}.
  url: valkey://localhost:6379/0

use_default_settings: true é a linha que altera a forma de trabalhar. Com ela, o ficheiro contém apenas substituições, e cada chave omitida usa os valores predefinidos incluídos no pacote. Sem ela, o ficheiro tem de descrever toda a configuração, motor a motor. É assim que se acaba com uma instância que inicia sem erros, mas não encontra nada. Um ficheiro de definições antigo do Searx colado neste caminho é uma configuração completa com nomes de chaves diferentes. Por isso, segue o segundo percurso e falha dessa forma.

A chave secreta impede o processo de iniciar

sudo -H sed -i -e "s/ultrasecretkey/$(openssl rand -hex 16)/g" \
              "/etc/searxng/settings.yml"

Execute isto uma vez, depois de copiar o modelo. Se não o fizer, o SearXNG regista uma linha e termina com o estado 1, porque webapp.py compara a chave com o valor do modelo antes de servir qualquer conteúdo:

server.secret_key is not changed. Please use something else instead of ultrasecretkey.

A verificação é ignorada quando general.debug é verdadeiro. Por isso, uma instância pode funcionar numa sessão de depuração e depois recusar iniciar através do systemd ou num contentor. Um contentor que reinicia continuamente com essa linha em docker compose logs está a acionar esta verificação. A imagem não está danificada.

O limitador é novo e precisa de Valkey

O Searx não tinha limitação de taxa dentro da aplicação. As instâncias públicas do Searx colocavam serviços separados à frente da aplicação: filtron para filtrar pedidos e morty para encaminhar por proxy o conteúdo dos resultados. Nenhum dos dois repositórios recebeu um commit desde January 2023: o último commit do filtron é desse mês, e o do morty é de April 2021.

O SearXNG faz esse trabalho internamente. A limitação de taxa e a deteção de bots são implementadas pelo limitador, ativado com server.limiter. Nos valores predefinidos fornecidos é false, e no modelo do instalador é true. Precisa de uma base de dados Valkey para guardar os contadores. Valkey é um fork do Redis, e o Ubuntu 24.04 disponibiliza-o em pacotes:

sudo apt install -y valkey-server
server:
  limiter: true

valkey:
  url: valkey://localhost:6379/0

Os guias escritos antes dessa alteração de nome configuram um bloco redis:. Por isso, copie o nome da chave da documentação atual do limitador. O ajuste detalhado fica num segundo ficheiro, /etc/searxng/limiter.toml, e server.public_instance: true ativa a deteção de bots mais rigorosa necessária numa instância pública, incluindo o método do token de ligação. O resultado visível é que alguns pedidos recebem HTTP 429 em vez de resultados. Isto também pode acontecer com os seus próprios pedidos se usar scripts contra a instância. Esse comportamento tem uma página própria aqui: por que uma instância SearXNG responde 429 Too Many Requests.

Os motores suspendem-se e os tempos limite são longos

Quando um serviço upstream responde com um CAPTCHA ou uma página de limitação de taxa, o SearXNG lança uma exceção tipificada e deixa de pedir dados a esse motor durante um período definido, em vez de continuar a repetir pedidos até ser bloqueado. Os valores predefinidos estão em searx/settings.yml, sob search.suspended_times. Estes são os 6 valores publicados em October 2026:

GráficoSearXNG default engine suspension times, in seconds
Os dados por trás deste gráfico
[
  {
    "label": "SearxEngineAccessDenied",
    "suspend_seconds": "180"
  },
  {
    "label": "SearxEngineCaptcha",
    "suspend_seconds": "3,600"
  },
  {
    "label": "SearxEngineTooManyRequests",
    "suspend_seconds": "180"
  },
  {
    "label": "cf_SearxEngineCaptcha",
    "suspend_seconds": "1,296,000"
  },
  {
    "label": "cf_SearxEngineAccessDenied",
    "suspend_seconds": "86,400"
  },
  {
    "label": "recaptcha_SearxEngineCaptcha",
    "suspend_seconds": "604,800"
  }
]

Uma resposta simples de acesso negado suspende esse motor durante 180 segundos. Um CAPTCHA suspende-o durante 3,600 segundos. Um CAPTCHA do Cloudflare suspende-o durante 1,296,000 segundos, ou seja, quinze dias, e um Google reCAPTCHA durante 604,800 segundos, ou seja, uma semana. Os valores longos são intencionais. Continuar a pedir dados depois de um serviço já ter assinalado o endereço é uma forma de bloquear permanentemente o IP da instância.

Enquanto um motor está suspenso, a página de resultados ignora-o e apresenta-o no bloco lateral intitulado "Mensagens dos motores de pesquisa". /stats/errors lista o que falhou. Uma instância nova que devolve poucos resultados está normalmente a mostrar esta situação, não uma instalação danificada.

A API JSON está desativada por predefinição

O valor predefinido fornecido é formats: [html] e não há mais nada configurado. Por isso, a API que todos os scripts pretendem usar fica fechada até a ativar.

curl -s -o /dev/null -w '%{http_code}\n' \
  'http://127.0.0.1:8888/search?q=test&format=json'

Isto apresenta 403, porque a rota de pesquisa chama flask.abort(403) quando o formato pedido não está listado em search.formats. Adicione o formato e reinicie o serviço:

search:
  formats:
    - html
    - json

O ficheiro de definições do Searx não tinha qualquer chave formats. Por isso, a saída JSON estava simplesmente disponível sem configuração adicional. Todos os scripts e exemplos desse período assumem o mesmo comportamento, e o modo de falha é um 403 sem explicação. Se estiver a ligar uma instância a ferramentas, dar a um agente um endpoint SearXNG para pesquisar começa por esta definição.

Por que os tutoriais de Searx copiados e colados falham

Cada uma destas linhas aparece em guias que continuam bem classificados, mas falha ou induz em erro numa instalação atual.

  • sudo apt install searx no Ubuntu 24.04 para em E: Unable to locate package searx, porque o pacote foi disponibilizado pela última vez no 22.04.
  • pip install searx é executado com sucesso e instala a versão 0.17.0, de julho de 2020. Nada avisa que essa versão é anterior ao fork.
  • git clone https://github.com/asciimoo/searx continua a funcionar, porque o GitHub redireciona o nome antigo do proprietário. O comando obtém o branch predefinido atual, onde um commit de documentação de maio de 2026 está sobre código da aplicação que deixou de mudar em abril de 2023.
  • Os passos que editam searx/settings.yml na árvore de código-fonte não alteram nada no SearXNG, que lê /etc/searxng/settings.yml.
  • Os passos que instalam filtron ou morty estão a reconstruir componentes que o SearXNG já inclui.
  • Um URL redis: para o limitador está uma renomeação atrás da chave valkey: atual.

Os guias do SearXNG também ficam desatualizados, e o URL do clone é a forma mais rápida de identificar a sua idade. Os ficheiros compose costumavam estar num repositório searxng-docker separado. Esse repositório está agora arquivado, o último push ocorreu em março de 2026 e os ficheiros foram movidos para container/ no repositório principal. O quickstart atual para contentores, retirado da documentação, é:

mkdir -p ./searxng/core-config/
cd ./searxng/
curl -fsSL \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example
cp -i .env.example .env
nano .env
docker compose up -d

Edite .env antes do último comando. A imagem mapeia as variáveis de ambiente para as chaves de configuração, pelo que SEARXNG_SECRET se torna server.secret_key e SEARXNG_BASE_URL se torna server.base_url. A instalação automatizada no host segue um caminho diferente, mas produz o mesmo resultado:

git clone https://github.com/searxng/searxng.git searxng
cd searxng
sudo -H ./utils/searxng.sh install all

Isto cria o utilizador searxng, o ambiente virtual em /usr/local/searxng e o serviço uWSGI, que é a configuração de referência na documentação do SearXNG. O guia mais longo desse processo está em instalar o SearXNG no seu próprio VPS.

Instância pública ou a sua própria instância

Uma instância pública é um servidor de outra pessoa que termina a sua ligação TLS (transport layer security), pelo que o software nesse servidor lê a sua consulta em texto simples. A documentação do próprio SearXNG apresenta claramente a questão da confiança: tem de confiar no administrador e não pode saber se os pedidos são registados, agregados ou enviados a terceiros. A lista visível é curta e completa. A infraestrutura do operador pode ver o texto da consulta, a hora, o endereço IP de onde o pedido chega, o user agent do navegador e o cookie de preferências que contém as suas definições. O operador também controla o código, pelo que qualquer patch aplicado é executado em todas as pesquisas que fizer nessa instância.

Uma predefinição facilita o registo acidental. O Searx enviava as pesquisas como POST. O SearXNG disponibiliza method: "GET", com o comentário de que POST mantém as consultas fora do histórico do navegador, mas causa problemas de usabilidade. Com GET, a consulta fica na linha do pedido, pelo que é gravada por predefinição no log de acesso do reverse proxy e no histórico do navegador. Este é o comportamento normal de um servidor Web. É importante saber isto antes de escolher em que servidor a consulta será processada.

Executar a sua própria instância transfere a confiança, em vez de a eliminar. Você controla o código e os logs. Se preferir não publicar de todo um hostname ou um certificado TLS para uma instância destinada a um único utilizador, aceder-lhe através de um serviço onion v3 mantém a instância fora do DNS público, sem deixar de permitir o acesso a partir de qualquer lugar. Em contrapartida, os motores upstream veem um único endereço para todas as suas pesquisas. Numa instância para um único utilizador, todas as consultas ficam associadas a si, em vez de se misturarem com as consultas de uma multidão. Uma instância pública com muita utilização oferece essa mistura e retira-lhe a gestão dos logs. Escolha a propriedade que considera mais importante. Se quiser primeiro consultar a lista completa de riscos, saber se o SearXNG é seguro de utilizar aborda esse tema. O histórico de localização merece a mesma análise, mas com riscos maiores. Um telemóvel que comunica a sua posição durante todo o dia revela mais do que qualquer log de pesquisas. comparar sistemas de localização autoalojados é o ponto de partida se quiser manter esses dados num servidor sob o seu controlo.

Uma nota prática para um VPS. Os intervalos de endereços de centros de dados são sinalizados mais rapidamente do que as ligações domésticas, por isso uma instância nova encontra CAPTCHAs em alguns motores logo nas primeiras pesquisas. Esse é o comportamento de suspensão descrito acima, não uma configuração incorreta. Se os mesmos motores continuarem bloqueados depois de terminar a suspensão, ler o erro efetivo antes de alterar qualquer coisa evita tentativas baseadas em suposições.

Se já executa uma instância do Searx

Nada deixa de funcionar no dia em que lê isto. O servidor continua a funcionar até uma alteração a montante voltar a quebrar outro motor. Depois, permanece avariado. Planeie a migração e não reutilize o ficheiro de configuração. Comece pelo modelo do SearXNG. Em seguida, adicione apenas o que alterou deliberadamente: o nome da instância, safe_search, os motores que ativou ou desativou pelo nome e as predefinições da interface. Os nomes e as opções dos motores foram alterados no fork. Verifique cada um na documentação atual, em vez de presumir que a chave ainda existe. As regras do Filtron e um URL do morty não têm equivalente, porque essas funções foram integradas na aplicação.

Execute a nova instância noutra porta enquanto a antiga ainda está ativa. Ela está a funcionar quando a página inicial devolve 200, uma pesquisa devolve resultados de mais de um motor e /stats/errors está vazio ou lista falhas que compreende. Em seguida, altere o reverse proxy para a nova instância e pare o serviço antigo.

FAQ

O Searx morreu em 2026?

O repositório não está arquivado, por isso nada impede que o clone, mas o projeto não é mantido. O último commit de código foi feito em abril de 2023, e o README contém a frase "Searx is no longer maintained." Confirme por si próprio com curl -s https://api.github.com/repos/searx/searx | jq -r '.pushed_at' e leia depois as mensagens dos commits recentes, porque uma data de push isolada pode resultar apenas de uma alteração na documentação. Num motor de metapesquisa, não ser mantido significa que os resultados pioram por si só, porque cada módulo de motor depende de um site upstream que continua a mudar.

Ainda posso instalar o Searx com apt ou pip?

Não nos sistemas atuais, nem de forma útil onde ainda seja possível. O Ubuntu empacotou o searx pela última vez no 22.04, na versão 1.0.0, por isso sudo apt install searx no 24.04 devolve E: Unable to locate package searx. O Debian distribuiu a versão 1.1.0 no Debian 12 e removeu-a do testing em outubro de 2023, por isso o Debian 13 não tem esse pacote. O PyPI continua a disponibilizar todas as versões do searx, e a mais recente é a 0.17.0, de julho de 2020, anterior ao próprio fork. Instale antes o SearXNG.

As minhas definições antigas de searx settings.yml funcionam no SearXNG?

Não. Copie os valores, não o ficheiro. O SearXNG lê /etc/searxng/settings.yml e espera use_default_settings: true no início, por isso o seu ficheiro funciona como uma sobreposição dos valores predefinidos distribuídos. Um ficheiro antigo do searx é uma configuração completa, com nomes de chaves diferentes, e não contém limiter, nem um bloco valkey, nem uma lista formats. Comece pelo modelo em utils/templates/etc/searxng/settings.yml e volte a adicionar as suas alterações uma de cada vez.

Por que motivo a minha própria instância do SearXNG devolve menos resultados do que uma instância pública?

Alguns motores estão suspensos. Quando um motor responde com um CAPTCHA ou uma página de limite de pedidos, o SearXNG deixa de o consultar durante um período fixo, desde 180 segundos para uma recusa simples até 1,296,000 segundos para um CAPTCHA do Cloudflare. A página de resultados apresenta esta informação em "Mensagens dos motores de pesquisa", e /stats/errors lista as falhas com os respetivos motivos. Os endereços de centros de dados são sinalizados mais cedo do que as ligações domésticas, por isso uma nova instância VPS deteta o problema rapidamente.

Devo usar uma instância pública do SearXNG ou executar a minha própria?

Execute a sua própria instância se quiser controlar o código e os logs, aceitando que os motores upstream passam a ver um único endereço para todas as suas pesquisas. Use uma instância pública se for mais importante misturar as suas consultas com as de outras pessoas do que saber o que é registado. Numa instância pública, o operador pode ver o texto da consulta, a hora, o seu endereço IP e o seu user agent, além de poder alterar o código quando quiser. Uma política de registo declarada não pode ser verificada a partir do exterior.