The searx documentation has an excellent introduction:

Searx is a free internet metasearch engine which aggregates results from more than 70 search services. Users are neither tracked nor profiled. Additionally, searx can be used over Tor for online anonymity.

If you don’t trust anyone, you can set up your own […]

But even if privacy isn’t a major concern, the search experience is so much better than Google and other ad-driven engines that it’s worth setting this up.

This is exactly what we’re going to do here. First the usual assumptions:

  • We are self-hosting using docker and docker-compose
  • The searx container is running behind a reverse proxy (which is already configured)

The official docker-compose.yaml example includes:

  • Caddy - which we won’t use because our Caddy instance proxies a number of other services
  • Filtron - may be unnecessary depending on your reverse proxy (i.e. I handle rate limiting globally, no need to add again here)
  • Morty - excluded for simplicity

So we are left with a nice, clean docker-compose.yml:

version: '3.7'

services:

  searx:
    image: searx/searx:1.0.0-151-c5d63a5c
    container_name: searx
    restart: unless-stopped
    ports:
      - '8086:8080'
    volumes:
      - './data/searx:/etc/searx'
    environment:
      - BASE_URL=https://search.YOURDOMAIN.com/
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - DAC_OVERRIDE

Note we are using the actual tag name 1.0.0-151-c5d63a5c instead of latest, it’s always best to specify tag names and perform upgrades deliberately and thoughtfully. Also note we are mapping :8086, change this to match your own reverse proxy configuration.

After running docker-compose up -d you can edit ./data/searx/settings.yml and change the following:

  • instance_name : "searx" # displayed name to whatever you prefer
  • enable_stats: True # activate /stats page - note: it may leak usage data to get some nifty “Engine stats”:
  • Change the secret_key : value to something unique
  • method: "GET" to avoid problems with Firefox searching from the address bar. Note that changing this in the settings in the GUI alone does not work.

Run docker-compose down && docker-compose up -d after changing settings.yml above. Once completed you should be able to access your new private search page!

Enabling in Firefox

To search from the address bar directly, add your new searx instance as a search engine in Firefox and set it as the default:

After doing so the search behavior is exactly like the default!

The same thing is possible in Firefox mobile on Android but it’s a little more manual, under Settings -> Search, + Add search engine:

  • Name: searx (or whatever you prefer)
  • Search string to use: https://search.YOURDOMAIN.com/search?q=%s
  • Save (little checkmark in the top right)
  • Set the Default search engine to searx

Similar steps apply to Chromium and other browsers.

Features

After using searx for a few days I was surprised at how good the user experience can be without a profit motive. Google and other engines are perniciously driven to favor ad revenue over everything else, even functionality. Having a search experience focused purely on efficiently providing information is a breath of fresh air.

The only downside to searx is the uncached speed. Search results take 2-3 seconds to load, whereas Google results often load in under a second. It’s enough to be noticeable coming from Google, but still acceptable.

Otherwise it’s nothing but upsides:

  • Detailed control (under preferences) of the default categories, theme, behavior, engines, and much more.
  • No personalized search results (Google creates a profile for each user on its platform, across devices, for billions of users, and uses that to hide search results it decides aren’t relevant to you). I’d prefer to make these decisions for myself.
  • Ability to control what categories (General, Files, Images, etc.) of results are displayed. The whole concept of “Categories” is extremely powerful. It’s one of those features you never knew you needed, but filtering by IT for information technology or Files specifically for files, or Social Media to deliberately search social media rather than having results mixed in… so powerful!
  • and on and on…

To repeat myself: getting unfiltered results on a platform I control is like breathing again after suffocating for so long. What a great feeling!

Motivations

I believe every human should resist the degradation toward a complete loss of privacy. In the online world monopolies produce gargantuan market pressure to harvest and monetize every expression of ourselves. We lose this privacy bit by bit, so slowly we rarely notice, and so we must take it back bit by bit and where we can.

Online search is the hinge, handle, and door itself into every other service and bit of information online, especially the information you don’t know exists yet. This, then, becomes one of the most important places to start when it comes to online privacy.