SearXNG
Este tutorial é uma contribuição da comunidade e não é suportado pela equipe Open WebUI. Serve apenas como demonstração de como personalizar o Open WebUI para seu caso específico. Gostaria de contribuir? Veja o tutorial de contribuição.
Este guia fornece instruções sobre como configurar capacidades de busca na web no Open WebUI usando SearXNG em Docker.
SearXNG (Docker)
"SearXNG é um mecanismo de metabusca na internet gratuito que agrega resultados de vários serviços e bancos de dados de busca. Os usuários não são rastreados nem perfilados."
1. Configuração do SearXNG
Para configurar o SearXNG de forma ideal para uso com o Open WebUI, siga estas etapas:
Etapa 1: git clone
do Docker do SearXNG e navegue até a pasta:
- Crie um Novo Diretório
searxng-docker
Clone o repositório searxng-docker. Esta pasta conterá seus arquivos de configuração do SearXNG. Consulte a documentação do SearXNG para instruções de configuração.
git clone https://github.com/searxng/searxng-docker.git
Navegue até o repositório searxng-docker
:
cd searxng-docker
Etapa 2: Localize e modifique o arquivo .env
:
- Descomente
SEARXNG_HOSTNAME
do arquivo.env
e configure-o conforme necessário:
# Por padrão, ouça em https://localhost
# Para alterar isso:
# * descomente SEARXNG_HOSTNAME, e substitua <host> pelo nome do host do SearXNG
# * descomente LETSENCRYPT_EMAIL, e substitua <email> pelo seu email (necessário para criar um certificado Let's Encrypt)
SEARXNG_HOSTNAME=localhost:8080/
# LETSENCRYPT_EMAIL=<email>
# Opcional:
# Se você executa uma instância muito pequena ou muito grande, talvez queira ajustar o número de trabalhadores uwsgi e threads por trabalhador
# Mais trabalhadores (= processos) significa que mais solicitações de busca podem ser manipuladas ao mesmo tempo, mas isso também causa maior uso de recursos
# SEARXNG_UWSGI_WORKERS=4
# SEARXNG_UWSGI_THREADS=4
Etapa 3: Modifique o arquivo docker-compose.yaml
- Remova a restrição
localhost
modificando o arquivodocker-compose.yaml
:
sed -i "s/127.0.0.1:8080/0.0.0.0:8080/"
Etapa 4: Conceda as Permissões Necessárias
- Permita que o container crie novos arquivos de configuração executando o seguinte comando no diretório raiz:
sudo chmod a+rwx searxng-docker/searxng
Etapa 5: Crie um Arquivo limiter.toml
Sem Restrição
- Crie um arquivo de configuração
searxng-docker/searxng/limiter.toml
sem restrição:
searxng-docker/searxng/limiter.toml
# Este arquivo de configuração atualiza o arquivo de configuração padrão
# Veja https://github.com/searxng/searxng/blob/master/searx/botdetection/limiter.toml
[botdetection.ip_limit]
# ativa o método link_token no método ip_limit
link_token = false
[botdetection.ip_lists]
block_ip = []
pass_ip = []
Etapa 6: Remova o Arquivo Padrão settings.yml
- Exclua o arquivo padrão
searxng-docker/searxng/settings.yml
se ele existir, pois será regenerado na primeira inicialização do SearXNG:
rm searxng-docker/searxng/settings.yml
Etapa 7: Crie um Novo Arquivo settings.yml
Na primeira execução, você deve remover cap_drop: - ALL
do arquivo docker-compose.yaml
para que o serviço searxng
consiga criar com sucesso /etc/searxng/uwsgi.ini
. Isso é necessário porque a diretiva cap_drop: - ALL
remove todas as capacidades, incluindo aquelas necessárias para a criação do arquivo uwsgi.ini
. Após a primeira execução, você deve re-adicionar cap_drop: - ALL
ao arquivo docker-compose.yaml
por motivos de segurança.
- Suba o container momentaneamente para gerar um novo arquivo settings.yml:
docker compose up -d ; sleep 10 ; docker compose down
Etapa 8: Adicione Formatos e Atualize o Número da Porta
- Adicione os formatos HTML e JSON ao arquivo
searxng-docker/searxng/settings.yml
:
sed -i s/formats: \[\"html\"\/]/formats: [\"html\", \"json\"]/ searxng-docker/searxng/settings.yml
Gere uma chave secreta para sua instância do SearXNG:
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng-docker/searxng/settings.yml
Usuários do Windows podem usar o seguinte script em Powershell para gerar a chave secreta:
$randomBytes = New-Object byte[] 32
(New-Object Security.Cryptography.RNGCryptoServiceProvider).GetBytes($randomBytes)
$secretKey = -join ($randomBytes | ForEach-Object { "{0:x2}" -f $_ })
(Get-Content searxng-docker/searxng/settings.yml) -replace ultrasecretkey, $secretKey | Set-Content searxng-docker/searxng/settings.yml
Atualize o número da porta na seção server
para corresponder ao que você configurou anteriormente (neste caso, 8080
):
sed -i s/port: 8080/port: 8080/ searxng-docker/searxng/settings.yml
Altere o bind_address
conforme desejado:
sed -i s/bind_address: "0.0.0.0"/bind_address: "127.0.0.1"/ searxng-docker/searxng/settings.yml
Arquivos de Configuração
searxng-docker/searxng/settings.yml (Extrato)
O arquivo padrão settings.yml
contém várias configurações de mecanismos. Abaixo está um extrato de como o arquivo padrão settings.yml
pode se parecer:
searxng-docker/searxng/settings.yml
# veja https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true
server:
# base_url é definido na variável de ambiente SEARXNG_BASE_URL, veja .env e docker-compose.yml
secret_key: "ultrasecretkey" # altere isso!
limiter: true # pode ser desativado para uma instância privada
image_proxy: true
port: 8080
bind_address: "0.0.0.0"
ui:
static_use_hash: true
search:
safe_search: 0
autocomplete: ""
default_lang: ""
formats:
- html
- json # json é obrigatório
# remova o formato para negar o acesso, use letras minúsculas.
# formats: [html, csv, json, rss]
redis:
# URL para conectar ao banco de dados redis. É sobrescrito por ${SEARXNG_REDIS_URL}.
# https://docs.searxng.org/admin/settings/settings_redis.html#settings-redis
url: redis://redis:6379/0
A porta no arquivo settings.yml para o SearXNG deve corresponder ao número da porta no arquivo docker-compose.yml para o SearXNG.
Passo 9: Atualize o arquivo uwsgi.ini
- Certifique-se de que o arquivo
searxng-docker/searxng/uwsgi.ini
corresponda ao seguinte:
searxng-docker/searxng/uwsgi.ini
[uwsgi]
# Quem irá executar o código
uid = searxng
gid = searxng
# Número de workers (geralmente a contagem de CPUs)
# valor padrão: %k (= número de núcleos da CPU, veja Dockerfile)
workers = %k
# Número de threads por worker
# valor padrão: 4 (veja Dockerfile)
threads = 4
# Direito concedido ao socket criado
chmod-socket = 666
# Plugin a ser usado e configuração do interpretador
single-interpreter = true
master = true
plugin = python3
lazy-apps = true
enable-threads = 4
# Módulo a ser importado
module = searx.webapp
# Virtualenv e caminho do Python
pythonpath = /usr/local/searxng/
chdir = /usr/local/searxng/searx/
# define automaticamente nomes de processo para algo significativo
auto-procname = true
# Desativar registro de solicitações para privacidade
disable-logging = true
log-5xx = true
# Definir o tamanho máximo de uma solicitação (excluindo o corpo da solicitação)
buffer-size = 8192
# Sem keep alive
# Veja https://github.com/searx/searx-docker/issues/24
add-header = Connection: close
# uwsgi serve os arquivos estáticos
static-map = /static=/usr/local/searxng/searx/static
# expiração configurada para um dia
static-expires = /* 86400
static-gzip-all = True
offload-threads = 4
2. Configuração Alternativa
Alternativamente, se você não quiser modificar a configuração padrão, você pode simplesmente criar uma pasta vazia searxng-docker
e seguir as instruções restantes de configuração.
Configuração do Docker Compose
Adicione as seguintes variáveis de ambiente ao arquivo Open WebUI docker-compose.yaml
:
services:
open-webui:
environment:
ENABLE_RAG_WEB_SEARCH: True
RAG_WEB_SEARCH_ENGINE: "searxng"
RAG_WEB_SEARCH_RESULT_COUNT: 3
RAG_WEB_SEARCH_CONCURRENT_REQUESTS: 10
SEARXNG_QUERY_URL: "http://searxng:8080/search?q=<query>"
Crie um arquivo .env
para o SearXNG:
# SearXNG
SEARXNG_HOSTNAME=localhost:8080/
Em seguida, adicione o seguinte ao arquivo docker-compose.yaml
do SearXNG:
services:
searxng:
container_name: searxng
image: searxng/searxng:latest
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng:rw
env_file:
- .env
restart: unless-stopped
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- DAC_OVERRIDE
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
Seu conjunto está pronto para ser iniciado com:
docker compose up -d
Na primeira execução, você deve remover cap_drop: - ALL
do arquivo docker-compose.yaml
para que o serviço searxng
consiga criar o arquivo /etc/searxng/uwsgi.ini
. Isso é necessário porque a diretiva cap_drop: - ALL
remove todas as capacidades, incluindo aquelas necessárias para criar o arquivo uwsgi.ini
. Após a primeira execução, você deve re-adicionar cap_drop: - ALL
ao arquivo docker-compose.yaml
por razões de segurança.
Alternativamente, você pode executar o SearXNG diretamente usando docker run
:
docker run --name searxng --env-file .env -v ./searxng:/etc/searxng:rw -p 8080:8080 --restart unless-stopped --cap-drop ALL --cap-add CHOWN --cap-add SETGID --cap-add SETUID --cap-add DAC_OVERRIDE --log-driver json-file --log-opt max-size=1m --log-opt max-file=1 searxng/searxng:latest
3. Confirmar Conectividade
Confirme a conectividade com o SearXNG a partir da sua instância de contêiner Open WebUI na interface de linha de comando:
docker exec -it open-webui curl http://host.docker.internal:8080/search?q=this+is+a+test+query&format=json
4. Configuração da Interface Gráfica
- Navegue até:
Painel de Admin
->Configurações
->Pesquisa Web
- Ative
Habilitar Pesquisa Web
- Defina
Mecanismo de Pesquisa Web
no menu suspenso comosearxng
- Defina
URL de Consulta Searxng
como um dos seguintes exemplos:
http://searxng:8080/search?q=<query>
(utilizando o nome do contêiner e a porta exposta, adequado para configurações baseadas em Docker)http://host.docker.internal:8080/search?q=<query>
(utilizando o nome DNShost.docker.internal
e a porta do host, adequado para configurações baseadas em Docker)http://<searxng.local>/search?q=<query>
(utilizando um nome de domínio local, adequado para acesso em rede local)https://<search.domain.com>/search?q=<query>
(utilizando um nome de domínio personalizado para uma instância SearXNG auto-hospedada, adequado para acesso público ou privado)
Observe que a parte /search?q=<query>
é obrigatória.
- Ajuste os valores de
Quantidade de Resultados de Pesquisa
eSolicitações Simultâneas
conforme necessário - Salve as alterações
5. Utilizando a Pesquisa Web em um Chat
Para acessar a Pesquisa Web, clique no + ao lado do campo de entrada da mensagem.
Aqui você pode ativar/desativar a Pesquisa Web.
Seguindo estes passos, você terá configurado com sucesso o SearXNG com o Open WebUI, permitindo que realize buscas na web usando o mecanismo SearXNG.
Nota
Você terá que ativar/desativar explicitamente isso em um chat.
Isso é ativado por sessão, por exemplo, recarregar a página ou mudar para outro chat desativará a função.