##########################################
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. 






