########################################## NOTE: read all of this before starting. Some steps were wrong... ########################################## Setting up searx on kvm vps w/docker: This guide assumes you have Docker already installed (if not follow the official documentation) This guide uses Devuan Ascii This guide is built on a VPS with KVM / Docker support. Note that many VPS (w/openVZ at the moment) do NOT support docker. It is helpful to have some experience with Docker. Buy a book, if you have not read one already. Other GNU/Linux Admin experience is assumed. This guide is meant as an adjunct to the official Searx Documentation on installing. Read that, also. Let's begin. First, clone the searx repo. cd into the directory. I had to make sure I pulled a specific tag release for searx otherwise the dockerfile build would fail. git checkout tags/v0.14.0 then sudo docker build -t whatever/searx . here, you are building the dockerfile in the same directory and giving it a name: whatever/searx (which obv can be customized) see searx is available with docker images (at any time, you can type just docker, and it will list options) docker run -d --name searx -p $PORT:8888 whatever/searx here $PORT will pick a random port for searx to be listening on Test it works by viewing WANIP:PORT and it should work. problems: 1) searx has bing and default search engines 2) no https 3) no filter, to block spammers (we need to use the filter asciimoo made, or make our own...) Most important is 3, followed by 1, and 2, in that order. Also need to give it port 80, or port 443. (probably need reverse proxy for nginx or something) let's get a filter first. filtron is the filter. filtron sits between nginx and searx. nginx -> filtron -> searx https://asciimoo.github.io/searx/admin/filtron.html good news is, filtron is managed by package manager in go. first install go. i'm using devuan ascii so, apt-get install golang everyone online tells you to dl binary bad idea. slower, and unable to update. I am not dealing with un-updateable binaries. after you apt-get install need to set gopath put these two in /etc/profile: export PATH=$PATH:/usr/local/go/bin export GOPATH=/root/go in debian, go has a path in /usr/share which has pkg, src, test that is the GOROOT not the GOPATH so make something different for gopath Typically it is a folder in users Home directory. I had an error package math/bits: unrecognized import path "math/bits" (import path does not begin with hostname) Go version and forums show that mine is too old. I COULD use the binary, but that's not what I'm going to do. EDIT: let's try backports first.... apt-get -t ascii-backports install golang that is 1.10 not 1.7 and that worked. So you MUST use ascii-backports for this. OK. so install it. get the rules.json in this folder as an example. Note that the default, requires you to set some variables run it with $GOPATH/bin/filtron -rules rules.json we will want to have it in the background, so something like above in rc.local (no service?) with the & afterwards, perhaps. So with filtron. we want to organize like this WAN nginx ----> filtron -----> docker ------> searx 443 4004 $PORT 8888 We'll need to specify the docker port, and the filtron port, and the nginx port. let's use 20000 as docker port. ignoring nginx, we have filtron --help shows us FILTRON ============ filtron -listen "127.0.0.1:4004" -target "127.0.0.1:20000" -rules rules.json NOTE: There is a trap with filtron. It expects a string, so -listen "127.0.0.1:4444" will work, but simply typing -listen 4444 will NOT work. Verify filtron is listening with ss -ntlp, where you should see: LISTEN 0 128 127.0.0.1:4005 *:* users:(("filtron",pid=27293,fd=3)) LISTEN 0 128 127.0.0.1:4004 *:* users:(("filtron",pid=27293,fd=5)) or similar. DOCKER ============ docker run -d --name searx -p 20000:8888 whatever/searx searx is run by docker, and we don't need to worry about that. Then we need reverse ssl proxy for nginx. I can get that from the gitea page so I checked there first, and then here https://nginx.org/en/docs/http/configuring_https_servers.html lets encrypt will be later. (I have that covered in my own lets encrypt docs) so open a screen to test and run those, with & for filtron, docker will detatch with -d add location / { proxy_pass http://localhost:4004; } or just the proxy pass part to the nginx config. (make a copy of default, and edit the copy, add symbolic link to sites-enabled) And if you want to troubleshoot, you can do it step by step with the above example of reverse - reverse - reverse proxy to searx.... wget the docker ip at 20000 wget the filtron ip 4004 wget the nginx at 80 should all work. That's it.