Instalacja oraz administracja silnikiem wyszukiwania - SearXNG
SearXNG jest silnikiem wyszukiwania, który pozwala nam na bezpiecznie wyszukiwanie treści w Internecie, przyczym warto wspomnieć, że bezpieczne oznacza tutaj bardziej prywatne, czy wyszukiwanie z poszanowaniem naszej prywatności. Działanie wyszukiwarki jest bardzo proste. Wpisująć żądaną fraze, jest ona przesyłana do silnika wyszukiwarki, a ten przy użyciu API odpytuje inne popularne wyszukiwarki takie jak Google czy DuckDuckGo, przyczym dane te przesyłane do tych wyszukiwarek są jałowe, to znaczy nie zawierają żadnych danych, które mógły by ulec profilowaniu. Oczywiście jest okupione pewną wadą, otóż nie zawsze wyniki wyszukiwania są zadawalające. Moim zdaniem mamy tutaj doczynienia z wyszukiwaniem, a nie próbą odgadnięcia co chcieliśmy znaleźć jak ma to miejsce np. przy takie wyszukiwarce jak Google. Przy dzisiejszych możliwościach połączenia z Internetem, prawie każdy jest do niego podłączony 24 godziny i 7 dni w tygodniu umiejętność zapamiętywania ustępuje miejsca umiejętności sprawnego wyszukiwania informacji. Dlatego jeśli decydujemy się korzystanie z alternatywnych wyszukiwarek, warto zapoznać się z dokumentacją przedstawiającą różnego rodzaju dyrektywy czy inne sztuczki, coś ala Google hacking.
Instalacja wyszukiwarki SearXNG
Jeśli chcielibyśmy skorzystać z silnika tego typu lub przetestować jego działanie to możemy zrobić to na mojej publicznie dostępnej instacji: searx.morketsmerke.org. Nie mniej jednak SearXNG wymaga hostingu WWW, gdzieś na serwerze nawet w sieci lokalnej. Ja do tych celów wykorzystam maszynę wirtualną z Debianem. Po zainstalowaniu systemu lub/i zalogowaniu się do jego powłoki, musimy na początku spełnić wszystkie zależności (wymagania). Wydajemy polecenie:
$ sudo -H apt-get install -y python3-dev python3-babel python3-venv \ uwsgi uwsgi-plugin-python3 git build-essential libxslt-dev zlib1g-dev \ libffi-dev libssl-dev curl
W instrukcji na stronie projektu widnieje polecenie, aby sklonować repozytorium do katalogu Downloads w swoim katalogu domowym. Jednak w przypadku Debian 12, uruchomienie skryptu instalacji z tego katalogu, możnie zakończyć się porażką, gdyż skrypt instalacyjny tworzy użytkownika, na potrzeby działania silnika wyszukiwania, w pewnym momencie skrypt przełącza się na niego i próbuje sklonować pobrane przez nas wcześniej repozytorium i to się nie uda, ponieważ od Debiana 12-tki, katalogi domowe użytkowników mają uprawnienia w trybie 700, co daje kompletny brak uprawnień dla innych użytkowników systemu do danych umieszczonych w tych katalogach. Zatem musimy wybrać inne miejsce na pobranie repozytorium i takim miejscem może być katalog /tmp.
$ cd /tmp $ git clone https://github.com/searxng/searxng.git searxng
Teraz przechodzimy do właściwej instalacji. Na większość pytań odpowiadamy Yes łącznie z instalacją bazy danych Redis. Nie przestraszmy się, instalator w pewnym momencie zwraca exception z Pythona. Dotyczy ono połączenia z bazą danych Redis ale nie jest ona jescze zainstalowana, dlatego na pytanie o instalację Redis wybieramy Yes, wystarczy kilknąć y.
$ cd searxng $ sudo -H ./utils/searxng.sh install all
Pod sam koniec instalacji skrypt sam zwraca uwagę na to, że nie mamy zainstalowanego serwera WWW. Teraz doknamy jego instalacji oraz włączenia wszystkich niezbędnych do działania modułów. Oczywiście zakładam, że wykorzystywanym przez nas serwerem WWW jest Apache2.
$ sudo -H apt-get install apache2 $ sudo -H a2enmod ssl $ sudo -H a2enmod headers $ sudo -H a2enmod proxy $ sudo -H a2enmod proxy_http $ sudo -H a2enmod proxy_uwsgi
Nie restartujemy teraz serwera WWW, dodamy jeszcze plik z hostingiem zawierającym niezbędne przekierowania oraz dyrektywy do pracy naszej wyszukiwarki.
$ sudo touch /etc/apache2/sites-available/searxng.conf
Wewnątrz tego pliku umieszczamy zawartość poniższego bloku kodu.
# -*- coding: utf-8; mode: apache -*-
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_uwsgi_module /usr/lib/apache2/modules/mod_proxy_uwsgi.so
# LoadModule setenvif_module /usr/lib/apache2/modules/mod_setenvif.so
#
SetEnvIf Request_URI /searxng dontlog
# CustomLog /dev/null combined env=dontlog
<Location /searxng>
Require all granted
Order deny,allow
Deny from all
# Allow from fd00::/8 192.168.0.0/16 fe80::/10 127.0.0.0/8 ::1
Allow from all
# add the trailing slash
RedirectMatch 308 /searxng$ /searxng/
ProxyPreserveHost On
ProxyPass unix:/usr/local/searxng/run/socket|uwsgi://uwsgi-uds-searxng/
# see flaskfix.py
RequestHeader set X-Scheme %{REQUEST_SCHEME}s
RequestHeader set X-Script-Name /searxng
# see limiter.py
RequestHeader set X-Real-IP %{REMOTE_ADDR}s
RequestHeader append X-Forwarded-For %{REMOTE_ADDR}s
</Location>
Włączamy konfigurację hostingu dla SearXNG. Po tej czynności możemy wreszcie uruchomić ponownie naszą usługę serwera WWW. Restartujemy również usługę uwsgi wskazując jej instację searxng
$ sudo a2ensite searxng.conf $ sudo systemctl restart apache2 $ sudo -H service uwsgi restart searxng
W ten sposób nasz search engine jest zainstalowany. Możemy spróbować się z nim połączyć przy użyciu przeglądari podając adres IP w URL i uwaga koncząc go /searxng. Oczywiście możemy poprawić ten mankament, za pomocą dedykowane hostingu dla SearXNG oraz dyrektywy przekierowania, ale to wydaje mi się, że każdy sobie już sam potrafi zrobić. Dyrektywa przekierowania dla przypomnienia znajduje się poniżej.
Redirect / /searxng
Naszym oczom ukazę się biała strona z dużym logo SearXNG pośrodku oraz polem do wpisywania fraz. Warto sobie ją nieco skonfigurować.
Konfiguracja SearXNG
Plik konfiguracyjny SearXNG - settings.yml znajduje się w
katalogu
/etc/searxng. Poniżej
zamieszczam plik konfiguracyjny mojej instancji, aby można było sobie
co nieco skopiować. Usunąłem tylko opcję
secret_key
# SearXNG settings
use_default_settings: true
general:
debug: false
instance_name: "SearXNG - morketsmerke.org"
search:
safe_search: 2
autocomplete: 'google'
server:
# Is overwritten by ${SEARXNG_SECRET}
limiter: true
image_proxy: true
# public URL of the instance, to ensure correct inbound links. Is overwritten
# by ${SEARXNG_URL}.
# base_url: http://example.com/location
redis:
# URL to connect redis database. Is overwritten by ${SEARXNG_REDIS_URL}.
url: unix:///usr/local/searxng-redis/run/redis.sock?db=0
ui:
static_use_hash: true
default_locale: 'pl'
# preferences:
# lock:
# - autocomplete
# - method
enabled_plugins:
- 'Hash plugin'
- 'Search on category select'
- 'Self Informations'
- 'Tracker URL remover'
- 'Ahmia blacklist'
# - 'Hostname replace' # see hostname_replace configuration below
# - 'Infinite scroll'
# - 'Open Access DOI rewrite'
# - 'Vim-like hotkeys'
# plugins:
# - only_show_green_results
# hostname_replace:
#
# # twitter --> nitter
# '(www\.)?twitter\.com$': 'nitter.net'
engines:
# - name: fdroid
# disabled: false
#
# - name: apk mirror
# disabled: false
#
# - name: mediathekviewweb
# categories: TV
# disabled: false
#
# - name: invidious
# disabled: false
# base_url:
# - https://invidious.snopyta.org
# - https://invidious.tiekoetter.com
# - https://invidio.xamh.de
# - https://inv.riverside.rocks
Innymi rzeczami, które mogą nas interesować w celach personalizacji jest zmiana loga na stronie wyszukiwarki czy favicony na karcie przeglądarki, ale o tym w następnym podrozdziale.
Aktualizacja SearXNG
Po pewnym czasie, może być tak, że nasza instacja, czyli uruchomiona kopia procesu (formalnie, ale tym przypadku bardziej chodzi o uruchomione przez użytkowników silniki SearXNG) będzie wymagać aktualizacji. Aktualizacji możemy dokonywać z różną częstotliwością, ale takim sygnałem, że trzeba taką aktualizację przeprowadzić jest wygaśniecie kluczy API (wówczas nasz SearXNG, nie będzie stanie pobrać wyników wyszukiwania z innych wyszukiwarek). Aktualizacja naszego silnika jest dobrze opisana w dokumentacji projektu. Jest tylko jeden problem, ze względu interaktywność ostatniego etapu, czyli zapytania o zastąpienie pliku konfiguracyjnego nowszą wersją z plików projektu, nie można w prosty sposób tego procesu zautomatyzować.
Ja ten problem pośrednio rozwiązałem. Ze względu na to, że domyślną nawet sugerowaną przez skrypt odpowiedzią na wyżej wymienione pytanie jest Nie, odnalazłem funkcję w plikach projektu odpowiedzialną za tę czynność i złamałem jej wykonanie, poprzez dodanie do jej kodu zmiennej, którą polecenia w tej funkcji wykorzystują. Kiedyś ustawiała ona natychmiastowe zatwierdzenie domyślniej opcji i zakończenie wykonania, teraz ustawiana przez mnie wartość jest nieakceptowalna i wykonanie funkcji zostaje zatrzymane przez co nie dochodzi do samego pytania, a przy tym nadpisania pliku konfiguracyjnego jak i zatrzymania wykonania skryptu aktualizacji. Wszystkie niezbędne czynności zostały już wcześniej wykonane. Poniżej znajduje się kod skryptu uruchamianego przez usługę cron:
if [ ! -d ~/Downloads ]; then mkdir ~/Downloads; fi cd ~/Downloads; if [ -d searxng ]; then rm -rf searxng; fi git clone https://github.com/searxng/searxng.git searxng; cd searxng; sed -i '355i _t="-t 1"' ~/Downloads/searxng/utils/lib.sh; sudo -H ./utils/searxng.sh instance update sudo cp -vv /home/xf0r3m/searxng.png /usr/local/searxng/searxng-src/searx/static/themes/simple/img sudo cp -vv /home/xf0r3m/favicon.png /usr/local/searxng/searxng-src/searx/static/themes/simple/img sudo rm -v /usr/local/searxng/searxng-src/searx/static/themes/simple/img/favicon.svg sudo ln -v -s /usr/local/searxng/searxng-src/searx/static/themes/simple/img/favicon.png /usr/local/searxng/searxng-src/searx/static/themes/simple/img/favicon.svg
Tych kilka linijek, pozwala na automatyzowania zadania, które przecież
było interaktywne. Polecenie sed jest
odpowiedzialne za dodanie tej wcześniej omawianej wartości. Natomiast
ostatnie cztery linie, przedstawiają personalizację duzego loga na
stronie głównej oraz favicony.
Reinstalacja silnika wyszukiwania SearXNG
Z czasem, może przydarzyć nam się przykra sytuacja, gdy zamiast strony naszego silnika otrzymamy krótki komunikat:
Internal Server Error
Oczywiście możemy próbować rozwiązać ten problem, ale najprostrzym i najszybszym rozwiązaniem jest reinstalacja silnika. Poniżej możemy zamieściłem listę poleceń, które należy wykonać aby poprawnie zainstalować ponownie SearXNG. Uwaga, te polecenia należy wykonywać w zapisanej w przykładzie kolejności, inaczej zostawimy bałagan w systemie i możemy już nie zainstalować więcej SearXNG na tym hoście. Ostatnie cztery polecenia dotyczą mojej instancji, można je pominąć, ale jeśli zmienialiśmy logo na głównej stronie oraz favicone to wystarczy zmienić pliki źródłowe, ponieważ tego dotyczą te polecenia.
0. cp /etc/searxng/settings.yml /home/xf0r3m/searx_settings.yml 1. sudo systemctl stop searxng-redis.service 2. sudo service uwsgi stop searxng 3. sudo rm /lib/systemd/system/searxng-redis.service 4. sudo systemctl daemon-reload 5. sudo rm /etc/uwsgi/apps-enabled/searxng.ini 6. sudo rm /etc/uwsgi/apps-available/searxng.ini 7. sudo reboot 8. sudo userdel -r searxng 9. sudo rm -rf /usr/share/searxng-redis 10. sudo rm -rf ~/Downloads/searxng 11. cd ~/Downloads 12. git clone https://github.com/searxng/searxng.git searxng 13. cd searxng 14. sudo -H ./utils/searxng.sh install all # Na reverse proxy Apache odpowiadamy 'no'. 15. sudo cp -vv /home/xf0r3m/searxng.png /usr/local/searxng/searxng-src/searx/static/themes/simple/img 16. sudo cp -vv /home/xf0r3m/favicon.png /usr/local/searxng/searxng-src/searx/static/themes/simple/img 17. sudo rm /usr/local/searxng/searxng-src/searx/static/themes/simple/img/favicon.svg 18. sudo ln -s /usr/local/searxng/searxng-src/searx/static/themes/simple/img/favicon.png /usr/local/searxng/searxng-src/searx/static/themes/simple/img/favicon.svg
W ten sposób przedstawia się instalacja meta-silnika wyszukiwania SearXNG oraz kilka związanych z nim zadań administracyjnych.
~xf0r3m
Źródła: