Salta ai contenuti

Installa Searchgirl

Searchgirl è due container: l’app (ghcr.io/diegoparras/searchgirl) e il suo SearXNG interno (l’immagine ufficiale, non modificata e mai esposta — solo Searchgirl la raggiunge sulla rete privata).

  • Docker (Docker Desktop su Windows/Mac, oppure Docker Engine su un VPS).
  • Nient’altro: nessun database, nessun servizio esterno. Searchgirl non conserva alcuno stato da migrare.
Terminal window
git clone https://github.com/diegoparras/searchgirl
cd searchgirl
docker compose up -d --build

Apri http://localhost:8089 — ricerca privata, in funzione.

Per un’installazione tutta tua con una schermata di accesso, definisci in un .env accanto al compose:

Terminal window
SEARCHGIRL_USER=diego
SEARCHGIRL_PASS=una-password-lunga
SECRET_KEY=un-segreto-per-il-cookie # opzionale; senza, le sessioni si azzerano col container

Compare il login standard della famiglia Escriba (una card con il pulsante mostra/nascondi sulla password) e tutto — UI, API, MCP, miniature — resta protetto finché non effettui l’accesso. È un singolo utente, senza database. In modalità federata queste variabili vengono ignorate: il contratto della suite vieta che un login locale conviva con l’SSO.

L’immagine pubblicata più il SearXNG ufficiale, come due servizi in un unico progetto. La guida completa (mount, dominio, HTTPS, risoluzione dei problemi) è in DEPLOY.md.

  1. Crea un progetto chiamato searchgirl. Dentro un progetto, i servizi si vedono tra loro via DNS interno come <progetto>_<servizio> (es. searchgirl_searxng).
  2. Servizio searxng — App → Docker Image ghcr.io/searxng/searxng:latest. Imposta SEARXNG_SECRET (openssl rand -hex 32) e aggiungi un File Mount in /etc/searxng/settings.yml con formats: [html, json] e limiter: false (il contenuto esatto è in DEPLOY.md). Nessun dominio — resta interno.
  3. Servizio app — App → Docker Image ghcr.io/diegoparras/searchgirl:latest. Ambiente: SEARXNG_URL=http://searchgirl_searxng:8080, i tuoi SEARCHGIRL_USER/SEARCHGIRL_PASS/SECRET_KEY, COOKIE_SECURE=1 e SEARCHGIRL_TRUSTED_PROXIES=172.16.0.0/12. Aggiungi il tuo dominio con HTTPS attivo, porta interna 8080.
  4. Verifica: curl https://tuo-dominio/healthzok, poi accedi dal browser.
  5. Aggiorna: premi Deploy sul servizio app — scarica latest. Zero stato da migrare.

Dokploy / Coolify / Portainer: tutti e tre accettano Docker Compose — incolla il docker-compose.yml del repository così com’è (monta già searxng/ e non espone il motore), imposta le stesse variabili d’ambiente e metti il reverse proxy del pannello davanti alla porta 8089 con HTTPS (COOKIE_SECURE=1).

Con un modello configurato, si attivano il pulsante Risposta IA, l’endpoint POST /api/answer e lo strumento MCP answer. Scegli un provider:

Terminal window
# Anthropic (nativo):
ANTHROPIC_API_KEY=sk-ant-... # opzionale: ANTHROPIC_MODEL
# ...oppure qualsiasi endpoint compatibile OpenAI — Ollama locale, OpenRouter, DeepSeek:
LLM_BASE_URL=http://host.docker.internal:11434/v1
LLM_MODEL=qwen2.5:7b

Senza nessuno dei due, tutto il resto funziona uguale — semplicemente il pulsante non compare.

VariabilePredefinitoCosa controlla
SEARXNG_URLhttp://searxng:8080URL del SearXNG interno.
SEARCHGIRL_DEFAULT_LANGUAGEesLingua di ricerca predefinita.
SEARCHGIRL_USER / SEARCHGIRL_PASSLogin locale standalone: un utente, la schermata standard di Escriba.
SECRET_KEYcasualeChiave HMAC del cookie di sessione; impostala perché le sessioni sopravvivano ai riavvii.
COOKIE_SECURE01 dietro HTTPS.
SEARCHGIRL_MCP_TOKENToken Bearer per API+MCP. Diversi, con nome: claude:abc...,n8n:def... — revocarne uno non ruota gli altri.
SEARCHGIRL_TRUSTED_PROXIESIP/CIDR del reverse proxy perché la limitazione di frequenza veda l’IP reale del client via X-Forwarded-For.
SEARCHGIRL_RATE_RPS / SEARCHGIRL_RATE_BURST20 / 60Limite di frequenza per IP su API, MCP e login (RPS=0 lo disattiva).
AUTH_MODEvuotafederado abilita OIDC con Lockatus (con LOCKATUS_ISSUER / LOCKATUS_CLIENT_ID / LOCKATUS_REDIRECT_URI).
ANTHROPIC_API_KEY / LLM_BASE_URL + LLM_MODELIl provider opzionale della Risposta IA.

La tabella completa si trova nel README del repository.

Leggi la documentazione