본문으로 건너뛰기

SearXNG

경고

이 튜토리얼은 커뮤니티 기여로 작성되었으며 Open WebUI 팀에서 지원하지 않습니다. 이것은 Open WebUI를 특정 사용 사례에 맞게 사용자 지정하는 방법을 보여주기 위한 데모로만 제공됩니다. 기여하고 싶으신가요? 기여 튜토리얼을 확인해보세요.

이 가이드는 Docker에서 SearXNG를 사용하여 Open WebUI에서 웹 검색 기능을 설정하는 방법에 대한 지침을 제공합니다.

SearXNG (Docker)​

"SearXNG는 다양한 검색 서비스와 데이터베이스의 결과를 통합하는 무료 인터넷 메타 검색 엔진입니다. 사용자는 추적되거나 프로파일링되지 않습니다."

1. SearXNG 구성​

SearXNG를 Open WebUI와 최적으로 사용하려면 다음 단계를 따르세요:

1단계: git clone하여 SearXNG Docker를 복제하고 폴더로 이동하세요:

  1. 새로운 디렉터리 searxng-docker를 생성합니다.

searxng-docker 저장소를 복제합니다. 이 폴더는 SearXNG 구성 파일을 포함합니다. 구성 지침은 SearXNG 문서를 참조하세요.

git clone https://github.com/searxng/searxng-docker.git

searxng-docker 저장소로 이동합니다:

cd searxng-docker

2단계: .env 파일을 찾아 수정하세요:

  1. .env 파일에서 SEARXNG_HOSTNAME의 주석을 제거하고 적절히 설정합니다:
# 기본적으로 https://localhost에서 청취
# 이를 변경하려면:
# * SEARXNG_HOSTNAME의 주석을 제거하고, <host>를 SearXNG 호스트 이름으로 대체
# * LETSENCRYPT_EMAIL의 주석을 제거하고, <email>을 이메일로 대체 (Lets Encrypt 인증서를 생성하는 데 필요)

SEARXNG_HOSTNAME=localhost:8080/
# LETSENCRYPT_EMAIL=<email>

# 선택 사항:
# 작은 인스턴스나 큰 인스턴스를 실행할 경우 사용되는 uwsgi worker 및 쓰레드 수를 변경할 수 있습니다.
# 더 많은 worker(=프로세스)는 동시에 더 많은 검색 요청을 처리할 수 있지만 리소스 사용량도 증가합니다.

# SEARXNG_UWSGI_WORKERS=4
# SEARXNG_UWSGI_THREADS=4

3단계: docker-compose.yaml 파일 수정

  1. localhost 제한을 제거하기 위해 docker-compose.yaml 파일을 수정합니다:
sed -i "s/127.0.0.1:8080/0.0.0.0:8080/"

4단계: 필요한 권한 부여

  1. 루트 디렉터리에서 다음 명령을 실행하여 컨테이너가 새 구성 파일을 생성할 수 있는 권한을 부여합니다:
sudo chmod a+rwx searxng-docker/searxng

5단계: 제한 없는 limiter.toml 파일 생성

  1. 제한 없는 searxng-docker/searxng/limiter.toml 구성 파일을 생성합니다:
searxng-docker/searxng/limiter.toml
# 이 구성 파일은 기본 구성 파일을 업데이트합니다.
# 자세한 내용은 https://github.com/searxng/searxng/blob/master/searx/botdetection/limiter.toml 를 참조하세요.

[botdetection.ip_limit]
# ip_limit 방법에서 link_token 방법 활성화
link_token = false

[botdetection.ip_lists]
block_ip = []
pass_ip = []

6단계: 기본 settings.yml 파일 삭제

  1. 기본 searxng-docker/searxng/settings.yml 파일이 존재하는 경우 삭제합니다. 이는 SearXNG 첫 실행 시 새로 생성됩니다:
rm searxng-docker/searxng/settings.yml

7단계: 새 settings.yml 파일 생성

노트

첫 실행 시 docker-compose.yaml 파일에서 cap_drop: - ALL을 제거해야 searxng 서비스가 /etc/searxng/uwsgi.ini를 성공적으로 생성할 수 있습니다. 이는 cap_drop: - ALL 지시가 모든 권한을 제거하여 필요한 파일 생성 권한까지 제거하기 때문입니다. 첫 실행 후에는 보안을 위해 cap_drop: - ALL을 다시 추가하십시오.

  1. 컨테이너를 잠시 실행하여 새 settings.yml 파일을 생성합니다:
docker compose up -d ; sleep 10 ; docker compose down

8단계: 포맷 추가 및 포트 번호 업데이트

  1. HTML 및 JSON 포맷을 searxng-docker/searxng/settings.yml 파일에 추가합니다:
sed -i s/formats: \[\"html\"\/]/formats: [\"html\", \"json\"]/ searxng-docker/searxng/settings.yml

SearXNG 인스턴스의 비밀 키를 생성합니다:

sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng-docker/searxng/settings.yml

Windows 사용자는 비밀 키를 생성하기 위해 다음 파워셸 스크립트를 사용할 수 있습니다:

$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

server 섹션에서 포트 번호를 앞서 설정한 번호(이 경우 8080)로 업데이트합니다:

sed -i s/port: 8080/port: 8080/ searxng-docker/searxng/settings.yml

bind_address를 원하는 값으로 변경합니다:

sed -i s/bind_address: "0.0.0.0"/bind_address: "127.0.0.1"/ searxng-docker/searxng/settings.yml

구성 파일​

searxng-docker/searxng/settings.yml (추출)​

기본 settings.yml 파일에는 많은 엔진 설정이 포함되어 있습니다. 아래는 기본 settings.yml 파일의 예제입니다:

searxng-docker/searxng/settings.yml
# https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true

server:
# base_url은 환경 변수 SEARXNG_BASE_URL에서 정의되어 있으며, .env 및 docker-compose.yml을 참조하세요.
secret_key: "ultrasecretkey" # 변경하세요!
limiter: true # 개인 인스턴스의 경우 비활성화할 수 있습니다.
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은 필수입니다.
# 형식을 제거하여 접근을 거부할 수 있으며, 소문자를 사용하세요.
# formats: [html, csv, json, rss]
redis:
# Redis 데이터베이스에 연결할 URL. ${SEARXNG_REDIS_URL}에 의해 덮어씁니다.
# https://docs.searxng.org/admin/settings/settings_redis.html#settings-redis
url: redis://redis:6379/0

SearXNG의 settings.yml 파일의 포트는 docker-compose.yml 파일의 포트 번호와 일치해야 합니다.

단계 9: uwsgi.ini 파일 업데이트

  1. 다음 내용을 확인하여 searxng-docker/searxng/uwsgi.ini 파일이 아래와 일치하는지 확인하세요:
searxng-docker/searxng/uwsgi.ini
[uwsgi]
# 코드 실행 사용자 지정
uid = searxng
gid = searxng

# 워커 수 (보통 CPU 코어 수)
# 기본값: %k (= CPU 코어 수, Dockerfile 참조)
workers = %k

# 워커당 스레드 수
# 기본값: 4 (Dockerfile 참조)
threads = 4

# 생성된 소켓의 권한
chmod-socket = 666

# 사용할 플러그인 및 인터프리터 설정
single-interpreter = true
master = true
plugin = python3
lazy-apps = true
enable-threads = 4

# 가져올 모듈
module = searx.webapp

# 가상 환경 및 Python 경로
pythonpath = /usr/local/searxng/
chdir = /usr/local/searxng/searx/

# 자동으로 프로세스 이름을 유의미한 것으로 설정
auto-procname = true

# 프라이버시를 위한 요청 로깅 비활성화
disable-logging = true
log-5xx = true

# 요청 최대 크기 설정 (요청 본문 제외)
buffer-size = 8192

# Keep alive 없음
# https://github.com/searx/searx-docker/issues/24 참조
add-header = Connection: close

# uwsgi가 정적 파일을 제공
static-map = /static=/usr/local/searxng/searx/static
# 하루로 만료 시간 설정
static-expires = /* 86400
static-gzip-all = True
offload-threads = 4

2. 대안 설정​

기본 구성을 수정하고 싶지 않다면, 빈 searxng-docker 폴더를 만들고 나머지 설정 지침을 따르기만 하면 됩니다.

Docker Compose 설정​

다음 환경 변수를 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>"

SearXNG를 위한 .env 파일을 생성하세요:

# SearXNG
SEARXNG_HOSTNAME=localhost:8080/

다음 내용을 SearXNG의 docker-compose.yaml 파일에 추가하세요:

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"

이제 스택을 다음 명령으로 실행할 준비가 되었습니다:

docker compose up -d

:::참고 처음 실행 시 SearXNG 서비스가 /etc/searxng/uwsgi.ini를 성공적으로 생성하기 위해서 docker-compose.yaml 파일에서 cap_drop: - ALL을 제거해야 합니다. 이는 cap_drop: - ALL 지시문이 모든 권한을 제거하기 때문입니다. 이후 보안을 위해 cap_drop: - ALL을 다시 추가해야 합니다. :::

또는 docker run을 사용하여 SearXNG를 직접 실행할 수도 있습니다:

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. 연결 상태 확인​

Open WebUI 컨테이너 인스턴스에서 SearXNG와 연결 상태를 명령줄 인터페이스를 통해 확인하세요:

docker exec -it open-webui curl http://host.docker.internal:8080/search?q=this+is+a+test+query&format=json

4. GUI 설정​

  1. 이동: Admin Panel -> Settings -> Web Search
  2. Enable Web Search 활성화
  3. 드롭다운 메뉴에서 Web Search Engine을 searxng로 설정
  4. Searxng Query URL을 아래 예시 중 하나로 설정하세요:
  • http://searxng:8080/search?q=<query> (컨테이너 이름과 노출된 포트를 사용하여 Docker 기반 설정에 적합)
  • http://host.docker.internal:8080/search?q=<query> (host.docker.internal DNS 이름과 호스트 포트를 사용하여 Docker 기반 설정에 적합)
  • http://<searxng.local>/search?q=<query> (로컬 도메인 이름을 사용하여 로컬 네트워크 접근에 적합)
  • https://<search.domain.com>/search?q=<query> (사용자 정의 도메인 이름을 사용하여 자체 호스팅된 SearXNG 인스턴스에 대해 공용 또는 개인 접근에 적합)

/search?q=<query> 부분은 필수입니다.

  1. Search Result Count 및 Concurrent Requests 값을 적절히 조정하세요
  2. 변경 사항 저장

SearXNG GUI Configuration

5. 채팅에서 웹 검색 사용하기​

웹 검색에 접근하려면 메시지 입력 필드 옆에 있는 +를 클릭하세요.

여기에서 웹 검색을 켜거나 끌 수 있습니다.

Web Search UI Toggle

이 단계를 따르면, Open WebUI와 함께 SearXNG를 성공적으로 설정하여 SearXNG 엔진을 사용하여 웹 검색을 수행할 수 있습니다.

참고​

채팅에서 이를 명시적으로 켜거나 꺼야 합니다.

이는 세션별로 활성화되며 페이지를 새로 고침하거나 다른 채팅으로 이동하면 비활성화됩니다.