Searx – Meta search engine respecting privacy, for your server

Privacy is for me very important, not that I have something special to hide, but I want to be sure I control what I do while not being set in a box (Profiling).

The search engine is probably the tool I am using the most in daily basis and I long used Google Search….But on top of not respecting your privacy (It’s their job of course), it will also build a profile of you and will change the ranking of the search results based on it. Then you quickly browse on the same websites every day with few new contents.

But there is actually plenty of alternatives. The most popular is probably DuckDuckGo, a meta search engine respecting your privacy (Does not track you,…)

Note that a meta search engine differs from a search engine. To be short, a search engine will crawl the web and index it in a database, then you will search inside this database. A meta search engine does not crawl and index, but will aggregate the results from others search engine instead.

Running a search engine actually needs significant resources (Space, IO, etc…) and requirement more development than a meta search. That’s why there is few alternatives as search engine but many as meta search engine.

And you can also run your own meta search engine on your own server. This is what Searx is all about.

searx meta search engine

Supporting different languages, searx can also be easily customized such as the selection of the search engines or categories. You can also set the output results as rss feed, or csv and even json.

You can directly give it a try on their official instance,

searx installation steps

And here is how to install it on Ubuntu/Debian based system.



You will first need to have a LAMP server, if you don’t know what it is, or don’t have it, please see this tutorial.

**1) Install the system dependencies


In root (or with sudo), run:

apt-get install git build-essential libxslt-dev python-dev python-virtualenv python-pybabel zlib1g-dev uwsgi uwsgi-plugin-python libapache2-mod-uwsgi
**2) Clone their latest version into your /var/www and change the ownership of the folder by searx user


Still in root,

cd /var/www
git clone
useradd searx -d /var/www/searx
chown searx:searx -R /var/www/searx


**3) Install searx dependencies in a virtualenv


Still in root,

su searx
cd /var/www/searx
virtualenv searx-ve
. ./searx-ve/bin/activate
pip install -r requirements.txt
python install


**4) Generate a secret key to set in the setting.yml file


sed -i -e "s/ultrasecretkey/`openssl rand -hex 16`/g" searx/settings.yml

If you want to make some additional modification like the port number, etc… simply edit the settings.yml manually.

At this point searx is not demonized ; uwsgi allows this.


**5) Configure and activate uwsgi


Create the configuration file /etc/uwsgi/apps-available/searx.ini

nano /etc/uwsgi/apps-available/searx.ini

and copy the following content:

# Who will run the code
uid = searx
gid = searx

# Number of workers (usually CPU count)
workers = 4

# The right granted on the created socket
chmod-socket = 666

# Plugin to use and interpretor config
single-interpreter = true
master = true
plugin = python

# Module to import
module = searx.webapp

# Virtualenv and python path
virtualenv = /var/www/searx/searx-ve/

And finally activate the uwsgi

cd /etc/uwsgi/apps-enabled
ln -s ../apps-available/searx.ini
/etc/init.d/uwsgi restart
**6) Create a dedicated virtualhost with uwsgi configured


Here is my virtualhost as exemple

nano /etc/apache2/sites-enabled/searx

<VirtualHost *:80>
        <Location />
            Options FollowSymLinks Indexes
            SetHandler uwsgi-handler
            uWSGISocket /run/uwsgi/app/searx/socket

Restart apache

/etc/init.d/apache2 restart

And you should be good to go!

If you face any issue during the installation, feel free to ask questions in the comment section or directly on their issues tracker.

Google Announcement


Loves to discover web-based apps to install on his own server@home and write articles about it


Add a comment