GuiderFiler, bilder och hemmetPrivat sökning med SearXNG

Kör din egen privata sökmotor med SearXNG och Podman utan root

SearXNG på Debian 13 i rootless Podman bakom Caddy, en privat sökmotor för dig och ditt hushåll som frågar flera sökmotorer på en gång, öppen utan lösenord via din VPN och bakom ett lösenord överallt annars.

Testad på SearXNG 2026.10.2 på Debian 13 (trixie) på en server hos Melonslab Uppdaterad 2 oktober 2026

Rekommenderad server för guiden

VC-S Micro · 2 vCPU · 8 GB Minne · 250 GB Lagring

Månadsvis, ingen bindningstid 7 dagars öppet köp

90 kr/mån

Beställ nu
På den här sidan

Det här sätter du upp

SearXNG är en metasökmotor. När du söker frågar den flera sökmotorer på en gång, till exempel DuckDuckGo och Wikipedia, slår ihop svaren och visar dem på en sida, utan annonser och utan en profil av dig. Sökmotorerna får frågan från din server, inte från din webbläsare, så de ser serverns adress och kan inte sätta cookies på dina enheter.

SearXNG utvecklas av SearXNG-projektet, en ideell gemenskap på GitHub. Inget företag står bakom det, och projektet anger inget land. Det är öppen källkod under GNU Affero General Public License 3.0. Det skickar ingen telemetri. Till sin natur skickar det varje sökning till de sökmotorer du slår på, från serverns adress, och som standard skickar det det du skriver i sökrutan till DuckDuckGo för förslag. När det startar hämtar det ClearURLs lista över spårningsparametrar från cdn.jsdelivr.net, och den hämtningen innehåller inget om dig. Steg 9 visar vad varje part ser och hur du stänger av förslagen.

Här körs det från sin officiella avbild, i en Podman-pod under en egen användare som heter searxng, med Valkey, en liten databas som dess hastighetsbegränsning behöver, bakom Caddy från Podman-guiden.

Den är till för dig och ditt hushåll, inte för hela internet. En publik instans lockar till sig botar, och sökmotorerna svarar då serverns adress med CAPTCHA eller blockeringar, för alla som använder den. Därför släpper Caddy in din WireGuard-VPN och ditt hem utan lösenord, och ber alla andra om ett.

Varje steg nedan har körts på en ny Melonslab VC-P Alloy (2 vCPU, 8 GB) med Debian 13:

  • SearXNG 2026.10.2 svarade via Caddy med ett certifikat från Let's Encrypt. En enhet på VPN:en, över IPv4 och IPv6, och den tillåtna hemadressen kom in utan lösenord. Alla andra adresser fick "401" tills de loggade in.
  • SearXNG såg varje besökares riktiga adress, inte Caddys, och struntade i en förfalskad X-Forwarded-For-header. Hastighetsbegränsningen svarade "429" efter 15 sökningar på 20 sekunder från en adress.
  • Sidor med bild-, video- och nyhetsresultat hämtade allt från servern: webbläsaren kontaktade ingen annan värd.
  • 34 sökningar under en halvtimme visade vilka sökmotorer som svarar den här servern och vilka som blockerar den (steg 7).
  • Chromium hittade sökmotorn av sig själv och gjorde den till standard.
  • En uppdatering till en nyare avbild installerades av sig själv, och allt startade igen av sig självt efter en omstart av servern.

SearXNG använde omkring 150 MB minne, och Valkey 8 MB.

Innan du börjar

Du behöver:

  • en server uppsatt som i Podman-guiden, med Caddy igång;
  • ufw som i säkerhetsguiden, steg 1 till 4;
  • för att söka från mobilen eller datorn när du inte är hemma, WireGuard som i WireGuard-guiden, med tunneladressen 10.8.0.1;
  • en A-post och en AAAA-post för search.example.com som pekar på din server.

Exemplen använder search.example.com för SearXNG, 203.0.113.10 för serverns IPv4-adress, 2001:db8:1f::/64 för dess IPv6-nät och 198.51.100.7 för ditt hems adress. Byt ut dem genomgående. ifconfig.co, öppnad hemma med VPN:en avslagen, visar ditt hems adress.

1. Skapa användaren

Som root:

useradd -m -s /bin/bash searxng
loginctl enable-linger searxng

SearXNG loggar hela adressen för en förfrågan till en sökmotor som misslyckas, och den adressen innehåller sökningen. Håll de raderna borta från serverns journal med ett filter för den här användarens tjänster:

mkdir -p /etc/systemd/system/user@$(id -u searxng).service.d
cat > /etc/systemd/system/user@$(id -u searxng).service.d/log-filter.conf <<EOF
[Service]
# A failed engine request is logged with its full address, search included.
LogFilterPatterns=~HTTP Request failed
EOF
systemctl daemon-reload
systemctl restart user@$(id -u searxng).service

Byt sedan till användaren:

machinectl shell searxng@

Allt fram till steg 5 körs som searxng.

2. Skriv inställningarna

mkdir -p ~/config ~/.config/containers/systemd
openssl rand -hex 32

Den sista raden skriver ut en slumpmässig nyckel, som SearXNG signerar sina länkar med. Skapa ~/config/settings.yml, med nyckeln i stället för SECRET_KEY:

# Only the settings that differ from SearXNG's defaults.
use_default_settings: true

server:
  base_url: https://search.example.com/
  secret_key: "SECRET_KEY"
  limiter: true
  image_proxy: true

valkey:
  url: valkey://localhost:6379/0
chmod 600 ~/config/settings.yml

Det här gör inställningarna:

  • use_default_settings: true behåller alla standardvärden och ändrar bara det filen räknar upp, så uppdateringar tar med sig nya standardvärden.
  • base_url är adressen SearXNG använder i sina egna länkar, till exempel i beskrivningen av sökmotorn som webbläsare läser (steg 8).
  • limiter: true slår på SearXNG:s botskydd och hastighetsbegränsning. Den behöver Valkey, på localhost inne i podden.
  • image_proxy: true skickar bilderna i resultaten via din server, så att webbplatserna som har dem aldrig ser dina enheters adresser.

Hastighetsbegränsningen måste känna till besökarnas riktiga adresser. Caddy skickar med dem, och inne i podden kommer Caddys anslutningar från serverns egen IPv4-adress, så det är den proxyn som ska betros. Skapa ~/config/limiter.toml:

[botdetection]
# Caddy's connections arrive from the server's own IPv4 address.
trusted_proxies = ['203.0.113.10/32']

3. Definiera podden

Skapa ~/.config/containers/systemd/searxng.pod:

[Unit]
Description=SearXNG pod

[Pod]
PodName=searxng
# Only Caddy, on this server, can reach SearXNG: the port is not open to the internet.
PublishPort=127.0.0.1:8101:8080

[Install]
WantedBy=default.target

4. Lägg till Valkey och SearXNG

De här följer filerna i SearXNG:s egen containeruppsättning. Skapa ~/.config/containers/systemd/searxng-valkey.container:

[Unit]
Description=Valkey for SearXNG's limiter

[Container]
ContainerName=searxng-valkey
Pod=searxng.pod
Image=docker.io/valkey/valkey:9-alpine
Exec=valkey-server --save 30 1 --loglevel warning --bind 127.0.0.1 ::1
Volume=searxng-valkey:/data
AutoUpdate=registry

[Service]
Restart=always

Och ~/.config/containers/systemd/searxng-core.container:

[Unit]
Description=SearXNG
Requires=searxng-valkey.service
After=searxng-valkey.service

[Container]
ContainerName=searxng-core
Pod=searxng.pod
Image=docker.io/searxng/searxng:latest
Volume=%h/config:/etc/searxng
Volume=searxng-data:/var/cache/searxng
# Keep the files in ~/config yours, so you can edit them.
Environment=FORCE_OWNERSHIP=false
AutoUpdate=registry

[Service]
Restart=always

Valkey lyssnar bara inne i podden. Utan FORCE_OWNERSHIP=false skulle SearXNG lämna över ~/config till en användare inne i containern, och du skulle inte längre kunna ändra dina egna inställningar.

Starta podden och slå på Podmans dagliga uppdateringar:

systemctl --user daemon-reload
systemctl --user start searxng-pod
systemctl --user enable --now podman-auto-update.timer
podman logs searxng-core

Loggen slutar med Started worker-1. Två rader ovanför står det ahmia: can't register engine och torch: can't register engine: de två söker bland Tors dolda tjänster och behöver en Tor-proxy, så de förblir avstängda. Varningen om att /etc/searxng inte ägs av searxng:searxng kommer från FORCE_OWNERSHIP=false och är väntad.

5. Sätt Caddy framför, bara för ditt hushåll

Välj vem som får komma in. Bäst fungerar sökningen från en webbläsare helt utan inloggning: adressfältet skickar varje sökning, och förslagen medan du skriver, direkt till servern. Därför kommer adresser du litar på in utan lösenord, och alla andra adresser måste logga in:

  • 10.8.0.0/24 och 2001:db8:1f::/64 är dina WireGuard-enheter. De får adresser ur de här näten i tunneln, som i WireGuard-guiden.
  • 198.51.100.7 är ditt hem. Lägg också till ditt hems IPv6-nät om det har ett, eftersom enheter föredrar IPv6.
  • Alla andra får en inloggningsruta, så att du ändå kan söka från en mobil som inte är på VPN:en.

Gå tillbaka till root med exit och byt till machinectl shell caddy@. Gör en lösenordshash för inloggningen och skriv lösenordet två gånger:

podman exec -it caddy caddy hash-password

Den skriver ut en rad som börjar med $2a$14$. Lägg till det här blocket sist i ~/Caddyfile, med den raden i stället för HASH:

search.example.com {
    # Your VPN and your home get in directly; everyone else must log in.
    @outside not remote_ip 10.8.0.0/24 2001:db8:1f::/64 198.51.100.7
    basic_auth @outside {
        family HASH
    }
    reverse_proxy 127.0.0.1:8101
}

family är användarnamnet. Starta om Caddy:

systemctl --user restart caddy

Om ditt hems adress ändras rättar du raden och startar om Caddy igen.

6. Kontrollera vad SearXNG ser

Hemifrån eller via VPN:en öppnar du https://search.example.com. Den öppnas utan lösenord. Sök på ip: det första svaret lyder "Your IP is:" följt av din egen adress. Visar det 203.0.113.10 i stället stämmer inte raden trusted_proxies från steg 2 med serverns adress.

Från alla andra nätverk, till exempel en mobil med VPN och wifi avslagna, frågar webbläsaren först efter användarnamn och lösenord.

Hastighetsbegränsningen tillåter 15 sökningar på 20 sekunder från en adress, vilket ett hushåll aldrig når för hand. Den avvisar också allt som inte ser ut som en webbläsare. En sökning med curl får "429" eller skickas tillbaka till startsidan, medan webbläsare fungerar som vanligt.

7. Välj sökmotorer

Från en server ser sökmotorerna en adress i ett datacenter, och en del av dem blockerar den. SearXNG visar sökmotorerna som misslyckades ovanför resultaten, med orsaken, och https://search.example.com/stats visar varje sökmotors tillförlitlighet sedan den senaste omstarten. Under 34 sökningar på en halvtimme på testservern:

SökmotorSvaradeVad som hände annars
Seznam34 av 34
Yahoo33 av 34ett "parsing error"
DuckDuckGo32 av 34två CAPTCHA, därefter svarade den igen
Mwmbl17 av 24timeout
Bing16 av 24inga resultat, utan felmeddelande
Yep15 av 24"access denied"
Google14 av 24"CAPTCHA" efter omkring 14 sökningar, sedan avstängd i en timme
Brave0 av 24"too many requests" varje gång

Qwant svarade med en CAPTCHA och PrivacyWall med "access denied" redan vid första sökningen, så de fick vara. Startpage och Mojeek är avstängda i själva SearXNG, eftersom båda numera kräver en CAPTCHA med proof-of-work. För bilder avvisade DuckDuckGo varje förfrågan, för nyheter gjorde Reuters det, och Vimeo för video.

Av sökmotorerna som är på som standard är Brave blockerad från den här servern, och flera är Googles: Googles anpassade sökning, dess bilder, nyheter, video och Scholar, samt YouTube. Seznam och Yahoo fungerade nästan varje gång men är avstängda som standard. Som searxng lägger du till det här sist i ~/config/settings.yml:

engines:
  # Blocked from this server: Brave answers every search with "too many requests".
  - name: brave
    disabled: true
  - name: brave.images
    disabled: true
  - name: brave.videos
    disabled: true
  - name: brave.news
    disabled: true
  # Google's engines are on by default. Switch them off to keep your searches away from Google.
  - name: google cse
    disabled: true
  - name: google cse images
    disabled: true
  - name: google videos
    disabled: true
  - name: google news
    disabled: true
  - name: google scholar
    disabled: true
  - name: youtube
    disabled: true
  # Refused every request from this server.
  - name: duckduckgo images
    disabled: true
  - name: reuters
    disabled: true
  - name: vimeo
    disabled: true
  # Worked from this server in every test.
  - name: yahoo
    disabled: false
  - name: seznam
    disabled: false

Och starta om podden:

systemctl --user restart searxng-pod

Webbsökningar går nu till DuckDuckGo, Yahoo och Seznam, med Wikipedia och Wikidata för fakta. Bilder kommer från Bing, Pinterest och Wikimedia Commons, video från Bing, DuckDuckGo, Dailymotion, SepiaSearch och Wikimedia Commons, och nyheter från Bing, DuckDuckGo och Wikinews. Sökmotorerna behandlar varje servers adress olika, så titta på /stats efter en vecka och stäng av en sökmotor som fortsätter att misslyckas på samma sätt. En avstängd sökmotor svarar ändå på sin genväg: !bi söker bara i Bing, och !mwm bara i Mwmbl.

8. Gör den till din standardsökning

SearXNG beskriver sig för webbläsare med OpenSearch, så en webbläsare kan lägga till den med förslag och allt. Du behöver bara söka på webbplatsen en gång först.

Chromium och Chrome: öppna chrome://settings/searchEngines. SearXNG står under Inactive shortcuts: välj Activate. Den flyttas till Site search. Där öppnar du More actions (de tre prickarna) bredvid den och väljer Make default. Sökningar från adressfältet går nu till din server, och den visas som SearXNG (Default).

Firefox: efter en sökning på webbplatsen erbjuder Firefox att lägga till SearXNG i adressfältets lista över sökmotorer. Välj den sedan under Settings, Search, Default Search Engine. Vi har inte testat det här i Firefox.

Mobiler: en mobil kommer in utan lösenord så länge den är på VPN:en, så låt WireGuard vara ansluten hela tiden. I Chrome på Android söker du på webbplatsen en gång och väljer sedan SearXNG under Settings, Search engine. Firefox på Android kan lägga till den under Settings, Search, med https://search.example.com/search?q=%s som adress. Safari på en iPhone erbjuder bara sin egen lista över sökmotorer, så använd en annan webbläsare där, eller lägg webbplatsen på hemskärmen. Vi har inte testat de här stegen på en mobil.

9. Vet vad varje part ser

  • Sökmotorerna ser din servers adress och orden du söker på. De ser inte din adress, din webbläsare eller dess cookies. Allt sökmotorerna vet om dina sökningar vet de om en server, som hela ditt hushåll delar.
  • Webbplatser i resultaten ser din adress först när du öppnar en länk. Bilderna i resultaten kommer via din server, så att visa dem avslöjar ingenting.
  • Förslag medan du skriver kommer från DuckDuckGo, via din server. För att stänga av dem i en webbläsare öppnar du Preferences på webbplatsen och sätter Autocomplete till -. Valet sparas bara i den webbläsaren.
  • Din server sparar nästan inget om sökningarna med de här inställningarna. Caddy loggar inga besök, bara förfrågningar som den inte kunde skicka vidare, till exempel en sökning medan SearXNG startar om för en uppdatering: den raden innehåller besökarens adress och sökningen. SearXNG loggar misslyckade förfrågningar till sökmotorer utan sökningen (steg 1), och Valkey sparar hastighetsbegränsningens räknare under förvrängda nycklar, som i vårt test försvann inom 30 minuter. Den som har root på servern kan slå på loggning, så upplägget är privat för dem som litar på serverns ägare.

10. Håll den uppdaterad

SearXNG publicerar en ny avbild flera gånger i veckan, ibland flera gånger om dagen, ofta med rättningar för sökmotorer vars webbplatser har ändrats. Timern från steg 4 kontrollerar en gång om dagen och startar om podden med den nya avbilden när det finns en. Varje uppdatering lämnar den gamla avbilden kvar, 271 MB varje gång. Som searxng låter du uppdateringen ta bort den:

mkdir -p ~/.config/systemd/user/podman-auto-update.service.d
cat > ~/.config/systemd/user/podman-auto-update.service.d/prune.conf <<EOF
[Service]
# Remove the images that an update replaced.
ExecStartPost=/usr/bin/podman image prune -f
EOF
systemctl --user daemon-reload

För att uppdatera direkt och se vad som ändrades:

systemctl --user start podman-auto-update.service
podman exec searxng-core sh -c 'echo $__SEARXNG_VERSION'

Den sista raden skriver ut versionen, till exempel 2026.10.2-19ffbcd30, alltså byggdatumet och koden den byggdes från.

11. Säkerhetskopiera

Inställningarna är det enda som spelar roll: Valkey har bara räknare, och SearXNG sparar ingen historik. Som searxng:

tar czf ~/searxng-config.tar.gz -C ~ config

Kopiera filen till en annan dator. Den innehåller den hemliga nyckeln, så förvara den säkert.

Felsökning

"Your IP is" visar serverns adress, eller alla delar samma gräns. Raden trusted_proxies i ~/config/limiter.toml anger inte serverns IPv4-adress. Rätta den och kör systemctl --user restart searxng-pod.

Loggen visar X-Forwarded-For nor X-Real-IP header is set!. Något nådde SearXNG på port 8101 utan att gå via Caddy, till exempel en curl på servern. Förfrågningar via Caddy har alltid headern.

En sökmotor visar "too many requests", "CAPTCHA" eller "access denied" ovanför resultaten. Den blockerar din servers adress. SearXNG pausar den en stund av sig självt. Händer det om och om igen stänger du av den som i steg 7.

En sökning med curl får "429", eller ett skripts sökning hamnar på startsidan. Hastighetsbegränsningen har tagit den för en bot, vilket är precis vad den är till för. Webbläsare påverkas inte.

Mobilen frågar efter lösenord hemma. Den använder sin mobilanslutning, eller så har ditt hems adress ändrats. Kontrollera adressen på ifconfig.co och rätta raden remote_ip från steg 5.

Kör det på din egen server

VC-S Micro

90 kr/mån

vCPU
2
Minne
8 GB
Lagring
250 GB
Trafik
10 TB
Standard
HDD · RAID 10
  • Full root-åtkomst
  • Nativt /64 IPv6
  • RAID-skyddad lagring
  • Malmö, Sverige
  • Månadsvis, ingen bindningstid
  • 7 dagars öppet köp
Alla guider