A separate repository contains a WEB front end to interact with search engine.
The front end uses a canonicalized string format to represent query, e.g.,
NOT title:prove, AND body:$a^2+b^2=c^2$.
This string gets encoded as URI parameters and sent to a relay service which listens at port 8080, the relay service then
parse the linear canonicalized string to structured JSON format that search engine daemon is easy to take as input.
To setup relay service locally, the easiest way is to utilize existing Docker images:
$ docker run -it --network bridge --mount type=volume,src=usersdb_vol,dst=/postgres/data -p 8081:80 -p 5432:5432 approach0/postgres13 $ docker run -it --network host approach0/a0-stats $ docker run -it --network host -e A0_SEARCHD=localhost -p 8080:8080 approach0/a0-relay
Ensure a search daemon is running locally, then to view a local WEB demo, you only need to serve the WEB front end page:
$ git clone firstname.lastname@example.org:approach0/ui-approach0.git $ cd ui-approach0 $ npm run watch
http://localhost:19985 in your browser.
To quickly debug in a container, one trick is to bind mount the source file directly into container:
$ docker run -it --network host --mount type=bind,src=`pwd`,dst=/code a0-stats bash
There is not many differences to setup a demo remotely (e.g., from a VPS). But oftenly, you will need to run services remotely in a detached session so when you leave the SSH session, you do not interrupt your service.
Install tmux for keeping searchd running in a detached session (so that searchd can keep running even if we exit the shell).
$ sudo apt-get install tmux $ cd $PROJECT/searchd $ tmux new -d -s searchd_session './run/searchd.out -i ~/index'
To attach this search daemon session:
$ tmux list-sessions $ tmux attach -t searchd_session
To see logs from this search daemon:
$ tmux capture-pane -pt searchd_session
Configurations below are mainly for security considerations. It disallow direct interaction with search engine, so user has to make request via relay service which is written in PHP and offers more robust interface when directly exposing to public.
Drop external TCP traffic to searchd¶
iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -p tcp --dport 8921 -j DROP
The first rules give full access to localhost, otherwise the second rule may block any packet sent to searchd port.