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).
Requisitos
Sección titulada «Requisitos»- 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.
Inicio rápido (Docker Compose)
Sección titulada «Inicio rápido (Docker Compose)»git clone https://github.com/diegoparras/searchgirlcd searchgirldocker compose up -d --buildAbre http://localhost:8089 — búsqueda privada, funcionando.
Login local (standalone)
Sección titulada «Login local (standalone)»Para una instalación propia con pantalla de inicio de sesión, define en un .env junto al compose:
SEARCHGIRL_USER=diegoSEARCHGIRL_PASS=una-clave-largaSECRET_KEY=un-secreto-de-cookie # opcional; sin él las sesiones se reinician con el contenedorAparece 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.
Desplegar en EasyPanel
Sección titulada «Desplegar en EasyPanel»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.
- 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). - Servicio
searxng— App → Docker Imageghcr.io/searxng/searxng:latest. DefineSEARXNG_SECRET(openssl rand -hex 32) y agrega un File Mount en/etc/searxng/settings.ymlconformats: [html, json]ylimiter: false(el contenido exacto está enDEPLOY.md). Sin dominio — se mantiene interno. - Servicio
app— App → Docker Imageghcr.io/diegoparras/searchgirl:latest. Entorno:SEARXNG_URL=http://searchgirl_searxng:8080, tusSEARCHGIRL_USER/SEARCHGIRL_PASS/SECRET_KEY,COOKIE_SECURE=1ySEARCHGIRL_TRUSTED_PROXIES=172.16.0.0/12. Agrega tu dominio con HTTPS activado, puerto interno 8080. - Verifica:
curl https://tu-dominio/healthz→ok, y luego inicia sesión desde el navegador. - Actualiza: presiona Deploy en el servicio
app— descargalatest. 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).
Opcional: Respuesta IA
Sección titulada «Opcional: Respuesta IA»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:
# 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/v1LLM_MODEL=qwen2.5:7bSin ninguno de los dos, todo lo demás funciona igual — simplemente el botón no aparece.
Principales variables de entorno
Sección titulada «Principales variables de entorno»| Variable | Por defecto | Qué controla |
|---|---|---|
SEARXNG_URL | http://searxng:8080 | URL del SearXNG interno. |
SEARCHGIRL_DEFAULT_LANGUAGE | es | Idioma de búsqueda por defecto. |
SEARCHGIRL_USER / SEARCHGIRL_PASS | — | Login local standalone: un usuario, pantalla estándar de Escriba. |
SECRET_KEY | aleatoria | Clave HMAC de la cookie de sesión; defínela para que las sesiones sobrevivan reinicios. |
COOKIE_SECURE | 0 | 1 detrás de HTTPS. |
SEARCHGIRL_MCP_TOKEN | — | Tokens Bearer para API+MCP. Varios, con nombre: claude:abc...,n8n:def... — revocar uno no rota el resto. |
SEARCHGIRL_TRUSTED_PROXIES | — | IPs/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_BURST | 20 / 60 | Límite de tasa por IP en API, MCP y login (RPS=0 lo desactiva). |
AUTH_MODE | vacía | federado habilita OIDC con Lockatus (con LOCKATUS_ISSUER / LOCKATUS_CLIENT_ID / LOCKATUS_REDIRECT_URI). |
ANTHROPIC_API_KEY / LLM_BASE_URL + LLM_MODEL | — | El proveedor opcional de Respuesta IA. |
La tabla completa vive en el README del repo.
Leer la documentación