From c2b15829fe9a370fbd295f136851f7fd5371d86d Mon Sep 17 00:00:00 2001 From: subh Date: Thu, 16 Apr 2026 19:03:33 +0530 Subject: changes --- stuff/searxng-docker.html | 243 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 stuff/searxng-docker.html (limited to 'stuff/searxng-docker.html') diff --git a/stuff/searxng-docker.html b/stuff/searxng-docker.html new file mode 100644 index 0000000..d5f6b0c --- /dev/null +++ b/stuff/searxng-docker.html @@ -0,0 +1,243 @@ + + + + + + subh.space + + + + +
+ home + git + github + notes + hackthebox + search +
+ +
+

Self-Hosting searxNG with Docker

+ +

This is a step-by-step guide on how to self-host your own instance of searxNG using docker, with full TLS support with certbot. For those of you who are unaware of searxNG, it's a free and open-source privacy-respecting metasearch engine that aggregates the results from multiple search engines for the user. Visiting searx.space, you can find public instances of searxNG which are hosted by people. If you also want to do the same, read on.

+ +

This guide assumes you're using a debian-based system.

+ + + +

1. Installing necessary packages

+

You need to install a few packages before starting the setup.

+
sudo apt update && sudo apt upgrade
+sudo apt install docker docker-compose nginx python3-certbot python3-certbot-nginx
+ +

2. Setting up

+

Download the necessary files for searxNG.

+
mkdir -p searxng/core-config
+cd searxng
+curl -fsSL \ 
+    -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
+    -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example
+
+

Make a .env file with the following contents: +

SEARXNG_VERSION=latest
+SEARXNG_HOST=[::]
+SEARXNG_PORT=8080
+
+You can use the downloaded docker-compose.yml file or use the modified one below if you face any issues +
version: '3.8'
+
+services:
+  core:
+    container_name: searxng-core
+    image: docker.io/searxng/searxng:${SEARXNG_VERSION:-latest}
+    restart: always
+    ports:
+      - "8080:8080"
+    env_file: ./.env
+    volumes:
+      - ./core-config/:/etc/searxng/:Z
+      - core-data:/var/cache/searxng/
+
+  valkey:
+    container_name: searxng-valkey
+    image: docker.io/valkey/valkey:9-alpine
+    command: valkey-server --save 30 1 --loglevel warning
+    restart: always
+    volumes:
+      - valkey-data:/data/
+
+volumes:
+  core-data:
+  valkey-data:
+
+

Finally, you can bring up the containers.

+
docker-compose up -d
+

If you have followed the tutorial meticulously thus far, you should have an instance of searxNG running on http://yourdomain.com:8080 (provided that you've correctly configured the DNS records.)

+

If you can't access it, make sure there are no firewall rules blocking inbound requests to that port.

+ +

3. Configuring searxNG

+

If you want to change the defaults for searxNG, you can do so by editing the file core-config/settings.yml. Configuring involves changing the default search engines, enhancing privacy and all.

+

Here's a link to my settings.yml incase you want to use it.

+

When you make a change to your settings.yml file, make sure to restart the containers for the change to take effect.

+
docker-compose down
+docker-compose up -d
+

It is also a good idea to setup rate limiting for your searxNG instance to reduce bot activities and abuse. To do so, create a file under core-config/ with the name limiter.toml and the following as contents. +

[botdetection.ip_limit]
+link_token = true
+

Also change the value of limiter to true under the server: block in settings.yml. + +

4. Setting up SSL/TLS with certbot and nginx

+

Save the following nginx config to /etc/nginx/sites-available/searxng

+
server {
+    listen 80;
+    listen [::]:80;
+    server_name yourdomain.com www.yourdomain.com;
+
+    location /.well-known/acme-challenge/ {
+        root /var/www/html;
+    }
+
+    location / {
+        proxy_pass         http://127.0.0.1:8080;
+        proxy_http_version 1.1;
+
+        proxy_set_header   Host              $host;
+        proxy_set_header   X-Real-IP         $remote_addr;
+        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
+        proxy_set_header   X-Forwarded-Proto $scheme;
+        proxy_set_header   Upgrade           $http_upgrade;
+        proxy_set_header   Connection        "upgrade";
+    }
+}
+

Create the symlink to tell nginx to use it

+
sudo ln -s /etc/nginx/sites-available/searxng /etc/nginx/sites-enabled/
+

Test the config and reload nginx

+
sudo nginx -t && sudo systemctl reload nginx
+

Now, you use certbot to request a certificate for your domain(s) by following the prompts.

+
certbot --nginx
+

At the end of it, you should have SSL/TLS setup for your searxNG instance. Visit https://yourdomain.com and you should see your own self-hosted searxNG instance.

+
+ + + + + -- cgit v1.2.3