Hermes Agent 웹 검색이 차단될 때 — SearXNG로 무료 무제한 검색 붙이기 (DGX GB10 + Tailscale Funnel)
왜 Hermes Agent 웹 검색이 막히는가
⚠️ 실제로 겪었던 이야기
며칠 전까지만 해도 Hermes Agent가 웹 검색을 하다가 "검색 결과를 가져올 수 없습니다"라는 메시지만 반복해서 뱉어내는 바람에 거의 3시간을 허비했다. Firecrawl의 무료 티어는 하루 500회로 금방 바닥나고, Tavily도 유료 전환을 요구했다. "에이전트한테 검색 한 번 시키는데 결제까지 해야 하나?" 싶어서 직접 해결하기로 마음먹었다. Reddit r/hermesagent에서 SearXNG 이야기를 보고 "이거다!" 싶었다. 직접 설치해보니 생각보다 간단했는데, Docker Compose 파일이 최신 버전과 맞지 않아서 한 번 꼬이긴 했다. 그래도 한 번 세팅해두니 그 이후로 검색 차단 문제는 완전히 해결되었다.
Hermes Agent는 Nous Research가 만든 오픈소스 자율형 AI 에이전트다. 47개 이상의 빌트인 도구 중 web_search로 웹 검색이 가능하지만, 실전에서 잘 막힌다.
Hermes의 web_search는 현재 Firecrawl · Tavily · Exa · Parallel 네 가지 백엔드만 지원한다. 전부 유료 API 키가 필요하고, 무료 티어도 금방 소진된다. 웹사이트들이 봇 트래픽을 적극 차단하기 때문에, 에이전트가 검색 결과를 열어보지 못하고 루프에 빠지는 경우가 많다.
2026년 4월 24일 r/hermesagent에서도 동일한 문제가 화제였고, 가장 많이 추천된 해결책이 SearXNG였다.
SearXNG란? — 무료 · 무제한 · 셀프호스팅 메타검색 엔진
SearXNG는 오픈소스 메타검색 엔진이다.
| 항목 | 내용 |
|---|---|
| 비용 | 완전 무료, MIT 라이선스 |
| API 키 | 불필요 |
| 검색 엔진 | Google · Bing · DuckDuckGo 등 70개+ 통합 |
| 설치 | Docker Compose |
| IP 차단 | 셀프호스팅이므로 문제 없음 |
| 사용량 제한 | 없음 (rate limiter 직접 제어) |
| Open WebUI | 공식 지원 검색 백엔드 |
Step 1 — SearXNG Docker 설치 (2026년 4월 기준 새 공식 방법)
searxng/searxng-docker 리포는 2026년 3월 28일 아카이브되었다. 이제는 SearXNG 메인 리포(searxng/searxng)의 container/ 폴더에서 Compose 템플릿을 직접 받아서 사용한다. 공식 문서 참고.
1-1. 폴더 생성 및 공식 템플릿 다운로드
# 작업 폴더 생성
mkdir -p [local path]
cd [local path]
# 공식 docker-compose.yml + .env.example 다운로드
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
# .env 파일 생성
cp .env.example .env
▲ Searxng Terminal
1-2. 포트 설정
Open WebUI가 8080을 쓰고 있다면, SearXNG는 8888로 변경한다.
# .env 파일에 포트 및 바인딩 추가
echo "SEARXNG_PORT=8888" >> .env
echo "SEARXNG_HOST=0.0.0.0" >> .env
1-3. 첫 기동으로 settings.yml 자동 생성
docker compose up -d && sleep 15 && docker compose down
1-4. JSON 포맷 추가 (필수!)
sed -i 's/- html/- html\n - json/' core-config/settings.yml
settings.yml에 json 포맷을 추가하지 않으면 Open WebUI와 MCP 모두에서 403 Forbidden 에러가 발생한다.
1-5. Limiter 비활성화 (로컬 전용)
cat > core-config/limiter.toml << 'EOF'
[botdetection.ip_limit]
link_token = false
[botdetection.ip_lists]
block_ip = []
pass_ip = []
EOF
1-6. settings.yml 추가 설정 확인
core-config/settings.yml을 열어서 다음 항목을 확인하거나 수정한다.
search:
formats:
- html
- json # ← 이게 있는지 확인
server:
limiter: false # ← rate limiter 끄기
redis:
url: redis://searxng-valkey:6379/0 # ← 새 Compose에서는 컨테이너 이름이 searxng-valkey
1-7. 시작 및 확인
docker compose up -d
# JSON 응답 확인
curl "http://[internal endpoint]/search?q=test&format=json"
results 배열이 포함된 JSON이 출력되면 설치 완료다.
Step 2 — Hermes Agent에 SearXNG 연결 (MCP 방식)
Hermes Agent는 MCP를 네이티브 지원한다. SearXNG용 MCP 서버인 MCP-searxng를 연결하면, Hermes가 web_search 대신 SearXNG를 자율적으로 사용한다.
2-1. uvx로 간편 설정 (권장)
[local path]에 추가:
mcp_servers:
searxng:
command: "uvx"
args: ["mcp-searxng"]
env:
SEARXNG_URL: "http://[internal endpoint]"
2-2. git clone 방식 (uvx가 없는 경우)
cd ~
git clone https://github.com/SecretiveShell/MCP-searxng.git
cd MCP-searxng
uv pip install -e .
[local path]:
mcp_servers:
searxng:
command: "uv"
args:
- "--project"
- "/home/사용자/MCP-searxng/"
- "run"
- "/home/사용자/MCP-searxng/mcp-searxng/main.py"
env:
SEARXNG_URL: "http://[internal endpoint]"
2-3. 확인
hermes chat
Hermes 시작 시 mcp_searxng_search 도구가 자동 등록된다.
Step 3 — Open WebUI에서도 SearXNG 연동 (병행 추천)
Hermes의 MCP 경로와 별도로, Open WebUI 자체 Web Search에도 SearXNG를 붙이면 두 가지 독립적인 검색 경로가 생긴다.
| 경로 | 동작 | 트리거 |
|---|---|---|
| MCP 경로 | Hermes Agent가 자율 판단해서 MCP SearXNG 호출 | 에이전트 자동 |
| Open WebUI 경로 | 검색 결과를 프롬프트에 직접 주입 | 사용자가 Web Search 토글 ON |
Open WebUI 설정
- Open WebUI 로그인
- Admin Panel → Settings → Web Search
- Enable Web Search: ON
- Web Search Engine:
searxng - Searxng Query URL:
http://host.docker.internal:8888/search?q=<query> - Search Result Count: 5~10
- Save
Step 3.5 — Hermes Agent를 Open WebUI에 연결 (아직 안 했다면)
이미 연결되어 있다면 건너뛰어도 된다.
Hermes 쪽
[local path]에 추가:
API_SERVER_ENABLED=true
API_SERVER_KEY=my-secret-key-12345
API_SERVER_PORT=8642
tmux new -s hermes
hermes gateway
Open WebUI 쪽
- Admin Settings → Connections → OpenAI
- + Add Connection
- URL:
http://host.docker.internal:8642/v1(끝에/v1필수) - API Key:
my-secret-key-12345 - 체크마크 → Save
Step 4 — Tailscale Funnel로 외부 접속
Tailscale Funnel이 이미 설치되어 있다면 한 줄이면 된다.
4-1. Funnel 활성화
# Open WebUI 포트에 맞춰서:
sudo tailscale funnel --bg https / http://localhost:3000
# 또는 8080이면:
sudo tailscale funnel --bg https / http://[internal endpoint]
4-2. URL 확인
tailscale funnel status
4-3. Funnel vs Serve
| 기능 | Funnel | Serve |
|---|---|---|
| 접속 범위 | 인터넷 전체 | tailnet 내 기기만 |
| 상대방 Tailscale | 불필요 | 필요 |
| HTTPS 자동 | 예 | 예 |
| IP 노출 | 안 됨 | 안 됨 |
| 보안 | 중간 | 높음 |
| 대역폭 | 제한 있음 | P2P 직접 |
| 포트 | 443 / 8443 / 10000만 | 제한 없음 |
# 혼자만 쓴다면 Serve가 더 안전
sudo tailscale serve --bg https / http://localhost:3000
4-4. Funnel 끄기
sudo tailscale funnel https / off
전체 아키텍처
[외부 브라우저 / 모바일]
│
▼
[Tailscale Funnel] https://my-dgx.xxx.ts.net
│ 암호화 터널 (TLS)
▼
┌─── NVIDIA DGX GB10 (128GB 통합 메모리) ────────────────┐
│ │
│ Open WebUI (포트 3000/8080) │
│ ├── Hermes Agent API (포트 8642) │
│ │ ├── 47+ 빌트인 도구 │
│ │ ├── MCP-SearXNG ──→ SearXNG (포트 8888) │
│ │ └── 로컬 LLM (Ollama / vLLM) │
│ │ │
│ └── Open WebUI Web Search ──→ SearXNG (포트 8888) │
│ │
│ SearXNG Docker (searxng-core:8888 + searxng-valkey) │
│ └── Google · Bing · DuckDuckGo 등 70+ 메타검색 │
│ │
└─────────────────────────────────────────────────────────┘
자주 발생하는 문제와 해결
| 증상 | 원인 | 해결 |
|---|---|---|
| SearXNG 403 에러 | settings.yml에 json 포맷 누락 |
core-config/settings.yml에 - json 추가 후 재시작 |
| MCP 도구가 Hermes에 안 잡힘 | uvx 또는 uv 미설치 |
curl -LsSf https://astral.sh/uv/install.sh | sh |
| Hermes → SearXNG 연결 실패 | Docker 네트워크 격리 | SEARXNG_URL을 http://호스트IP:8888로 변경 |
| Valkey 연결 에러 (SearXNG 로그) | redis URL 호스트명 불일치 | settings.yml의 redis.url을 redis://searxng-valkey:6379/0으로 수정 |
| Tailscale Funnel 안 됨 | MagicDNS 미활성화 | Admin Console → DNS → MagicDNS ON |
| Funnel 포트 거부 | 허용 포트 아님 | 443, 8443, 10000만 가능 |
| Open WebUI 모델 안 보임 | URL에 /v1 누락 |
http://localhost:8642/v1 |
| Hermes gateway 끊김 | 터미널 세션 종료 | tmux 또는 systemd 서비스 등록 |
핵심 요약
Hermes Agent의 기본 web_search는 유료 API 의존 + 봇 차단에 취약하다. SearXNG를 셀프호스팅해서 MCP로 연결하면 무료·무제한·차단 없는 검색이 가능해진다. Open WebUI 레벨에서도 동시 연동하면 두 가지 경로로 활용할 수 있다. 외부 접속은 Tailscale Funnel 한 줄, 보안 강화는 Tailscale Serve로. 전체 스택 비용 0원.
searxng/searxng-docker 리포는 아카이브되었다. 새 설치는 SearXNG 메인 리포의 container/ 폴더에서 Compose 템플릿을 받아서 사용한다. 캐시 DB도 Redis에서 Valkey로 변경되었다.
※ 이 글은 설명을 돕기 위한 실제 터미널 출력 화면과 설정 파일 예시를 포함하고 있습니다. 곧 스크린샷도 추가할 예정입니다.
참고 링크
- SearXNG 공식 Docker 설치 가이드 (새 방식)
- Hermes Agent 공식 문서
- Hermes Agent MCP 설정 가이드
- Hermes Agent + Open WebUI 연결 가이드
- Open WebUI + SearXNG 공식 가이드
- MCP-SearXNG GitHub
- Tailscale Funnel 문서
- Open WebUI + Tailscale 통합 가이드
- Hermes Agent SearXNG 백엔드 추가 이슈 #5941
이 글은 2026년 4월 25일 기준으로 작성되었습니다. searxng-docker 리포 아카이브(2026.03.28) 이후 변경된 새 공식 설치법을 반영했습니다.