Ir al contenido

Instalar Searchgirl

Searchgirl son dos contenedores: la app (ghcr.io/diegoparras/searchgirl) y su SearXNG interno (la imagen oficial, sin modificar y nunca expuesta — solo Searchgirl la alcanza por la red privada).

  • Docker (Docker Desktop en Windows/Mac, o Docker Engine en un VPS).
  • Nada más: sin base de datos, sin servicios externos. Searchgirl no guarda estado que migrar.
Ventana de terminal
git clone https://github.com/diegoparras/searchgirl
cd searchgirl
docker compose up -d --build

Abre http://localhost:8089 — búsqueda privada, funcionando.

Para una instalación propia con pantalla de inicio de sesión, define en un .env junto al compose:

Ventana de terminal
SEARCHGIRL_USER=diego
SEARCHGIRL_PASS=una-clave-larga
SECRET_KEY=un-secreto-de-cookie # opcional; sin él las sesiones se reinician con el contenedor

Aparece el login estándar de la familia Escriba (una tarjeta con toggle mostrar/ocultar en la contraseña) y todo — UI, API, MCP, miniaturas — queda protegido hasta que inicias sesión. Es un único usuario, sin base de datos. En modo federado estas variables se ignoran: el contrato de la suite prohíbe que un login local conviva con el SSO.

La imagen publicada más el SearXNG oficial, como dos servicios en un proyecto. La guía de punta a punta (mounts, dominio, HTTPS, resolución de problemas) está en DEPLOY.md.

  1. Crea un proyecto llamado searchgirl. Dentro de un proyecto, los servicios se ven entre sí por DNS interno como <proyecto>_<servicio> (p. ej. searchgirl_searxng).
  2. Servicio searxng — App → Docker Image ghcr.io/searxng/searxng:latest. Define SEARXNG_SECRET (openssl rand -hex 32) y agrega un File Mount en /etc/searxng/settings.yml con formats: [html, json] y limiter: false (el contenido exacto está en DEPLOY.md). Sin dominio — se mantiene interno.
  3. Servicio app — App → Docker Image ghcr.io/diegoparras/searchgirl:latest. Entorno: SEARXNG_URL=http://searchgirl_searxng:8080, tus SEARCHGIRL_USER/SEARCHGIRL_PASS/SECRET_KEY, COOKIE_SECURE=1 y SEARCHGIRL_TRUSTED_PROXIES=172.16.0.0/12. Agrega tu dominio con HTTPS activado, puerto interno 8080.
  4. Verifica: curl https://tu-dominio/healthzok, y luego inicia sesión desde el navegador.
  5. Actualiza: presiona Deploy en el servicio app — descarga latest. Cero estado que migrar.

Dokploy / Coolify / Portainer: los tres aceptan Docker Compose — pega el docker-compose.yml del repo tal cual (ya monta searxng/ y no expone el motor), define las mismas variables de entorno y pon el reverse proxy del panel delante del puerto 8089 con HTTPS (COOKIE_SECURE=1).

Con un modelo configurado, se encienden el botón de Respuesta IA, el endpoint POST /api/answer y la herramienta MCP answer. Elige un proveedor:

Ventana de terminal
# Anthropic (nativo):
ANTHROPIC_API_KEY=sk-ant-... # opcional: ANTHROPIC_MODEL
# ...o cualquier endpoint compatible con OpenAI — Ollama local, OpenRouter, DeepSeek:
LLM_BASE_URL=http://host.docker.internal:11434/v1
LLM_MODEL=qwen2.5:7b

Sin ninguno de los dos, todo lo demás funciona igual — simplemente el botón no aparece.

VariablePor defectoQué controla
SEARXNG_URLhttp://searxng:8080URL del SearXNG interno.
SEARCHGIRL_DEFAULT_LANGUAGEesIdioma de búsqueda por defecto.
SEARCHGIRL_USER / SEARCHGIRL_PASSLogin local standalone: un usuario, pantalla estándar de Escriba.
SECRET_KEYaleatoriaClave HMAC de la cookie de sesión; defínela para que las sesiones sobrevivan reinicios.
COOKIE_SECURE01 detrás de HTTPS.
SEARCHGIRL_MCP_TOKENTokens Bearer para API+MCP. Varios, con nombre: claude:abc...,n8n:def... — revocar uno no rota el resto.
SEARCHGIRL_TRUSTED_PROXIESIPs/CIDRs del reverse proxy para que el límite de tasa vea la IP real del cliente vía X-Forwarded-For.
SEARCHGIRL_RATE_RPS / SEARCHGIRL_RATE_BURST20 / 60Límite de tasa por IP en API, MCP y login (RPS=0 lo desactiva).
AUTH_MODEvacíafederado habilita OIDC con Lockatus (con LOCKATUS_ISSUER / LOCKATUS_CLIENT_ID / LOCKATUS_REDIRECT_URI).
ANTHROPIC_API_KEY / LLM_BASE_URL + LLM_MODELEl proveedor opcional de Respuesta IA.

La tabla completa vive en el README del repo.

Leer la documentación