SearXNG
By Austin Lane
I saw a YouTube video recommending SearXNG yesterday and thought I would try it out. It is essentially a proxy that takes your search queries, runs them anonymously through a handful of popular sites like Google. DuckDuckGo, and Brave (or dozens of others depending on preference and what you are looking for), and then does a bunch of wizardry to assemble the results in a relevant list. It was dead easy to set up if you are used to running docker containers, and within about 20 minutes I was up and running with my own search portal.
I think the two biggest bummers so far are a) it doesn’t look like you can protect settings behind authentication, so I’m not exposing this outside my home network, and b) Apple won’t let me add custom engines to the Safari search list so I can’t default to this when using the address bar to type search queries. I’m going to have to develop muscle memory to switch to this and not just start typing my search query. I’ve found one option for a) in the settings file, which is to individually “lock” sections of the settings menu. It won’t let users make any changes, but this is obnoxious for me if I don’t want to have to make changes manually in the YML file, I still want to use the web menu. I’ve seen suggestions to combine this with Tailscale, which essentially creates a global private network so your laptop on the go can just connect to this and you don’t need to necessarily put your server out on the internet. It’s a neat idea but I’m trying to avoid reliance on outside services, the same reason I’m not just using Cloudflare tunnels to expose things outside. My Nginx web proxy works well enough, can front most of the web services and restrict the rest to internal only, and I’m also looking at adding some user-agent restrictions to even the public sites so I can control what crawlers are coming through. I’ve seen defined lists of AI-related crawlers that I could block, but honestly I don’t know how much I trust the honor system of robots.txt here. I think I’d like to actually try blocking IP ranges where possible. For the sake of sharing, here is the SearXNG Docker Compose template I made to run in Portainer: docker-compose.yml
services:
searxng:
image: searxng/searxng:latest
container_name: searxng
environment:
- BASE_URL=http://localhost:8080
- INSTANCE_NAME=search
ports:
- "8080:8080"
volumes:
- searxng:/etc/searxng
restart: unless-stopped
volumes:
searxng:
Today’s header - Austin skyline