SearXNG ja Raspberry Pi: Henkilökohtainen hakukone

You are currently viewing SearXNG ja Raspberry Pi: Henkilökohtainen hakukone

Ilmeisesti on syytä heti alkuun todeta, että otsikko ei täysin pidä paikkaansa. Tai pitää, mutta ei sillä tavalla kuin suurin osa tuon käsittää. SearXNG ei ole hakukone kuten Google tai DuckDuckGo. Se on meta-haku, joka hyödyntää muita hakukoneita. Henkilökohtainen se on, kun käyttää Raspberryä.

Mikä ja miksi meta-hakukone

Meta tulee kreikasta ja tarkoittaa jotakuinkin jälkeen, yli, itsensä yli. Sitä käytetään, kun jokin asia kohdistuu asiaan itseensä. Metakeskustelu on keskustelua keskustelusta itsestään. Jollain foorumilla voidaan siis keskustella keskustelukulttuurista tai miten asia pitäisi muotoilla. Metatutkimus on tutkimus, joka tehdään toisista tutkimuksista. Otetaan vaikka nippu koirien D-vitamiinitutkimuksia ja koostetaan tutkimus, jossa yhdistellään noiden muiden tutkimusten tietoja ja saadaan aikaiseksi esimerkiksi uusia johtopäätöksiä.

Metahaku, jolloin se mikä moisen tekee olisi metahakukone, on muista hauista koostettu hakutulos. Yksi metahakuja tekevä ohjelma tai alusta, en tiedä miten nuo pitäisi erottaa, on SearXNG. En tiedä nimen alkuperää, mutta luulen sen tulevan siitä, että ensin oli SearX ja kun se hylättiin tai joku päätti tehdä sen pohjalta uuden, niin siitä tuli sitten uuden sukupolven SearX; SearX Next Generation, SearXNG. Voin olla pahasti väärässäkin.

Kun tekee haun SearXNG:llä, niin se siirtää kyselyn muille hakukoneille sekä sivustoille. Sen jälkeen se poistaa turhia ja päällekkäisiä osumia, ja listaa jäljelle jääneet tulokset painotusten mukaan, jos sellaisia on asetettu. Kun haen vaikka tutkimuksia melatoniinista ja sen yhteistoiminnasta muiden hormonien kanssa, niin kaipaan tieteellisempiä tuloksia. Sama haku Googlella antaisi ensin 10 sivua lisäravinnemainoksia, sitten toiset 10 sivua huuhaa-hoitajia ja vielä 10 sivua lisää kokemusasiantuntijoiden kehuja. Mikään noista ei kelpaa, enkä etsinyt niitä.

Minä haluaisin esimerkiksi PubMedin tai muiden tutkimustietokantojen osumia. Mielellään selvästi esitettynä. Minulle on hieman se ja sama minkä hakukoneen kautta tulokset tulevat, kunhan saisin edes suunnilleen sen kaltaista sisältöä mitä haen. En mainoksia, en huuhaata, en luuloja ja uskomuksia.

SearXNG tekee tuon, mahdollisuuksiensa mukaan. Olen luetellut sille mistä lähteistä sen tulee hakea tietoa. Samalla olen kertonut, että hakutulokset painotettaisiin esimerkiksi PubMedin, OpenAIREn jne. suhteen, ja vasta sen jälkeen tulisivat eräällä tavalla yleisemmät lähteet.

Pidän hieman akateemisempia hakuja esimerkkinä, koska itselleni niiden löytäminen perinteisten hakukoneiden kautta on vaikeaa. Mutta voisinhan minä tehdä samanlaisia rajauksia esimerkiksi kuvien tai meemien suhteen. Tai musiikille ja podcasteille.

Yksityisyys on pop

Olen tekemässä SearXNG:llä perinteisempää hakua kuten ”Natalie Portman elokuvat” ja hakuni kohdistuu Googleen ja DuckDuckGohon (joka on de facto Bing) sekä valokuviin useammankin sivuston kautta.

Miksi en kysyisi tuota samantien suoraan Googlelta? Siihen on kaksi syytä: hakuhistorian vaikutus hakuihin, ja Googlen kaikenkattava seuranta.

Googlen molemmat temput hajoavat samalla hetkellä, kun haku tuleekin meta-koneesta, ei minulta. Joten kun saan useammasta lähteestä kootut hakutulokset, ja saan samalla näytettyä keskisormea seurannalle, joka on hienosteleva ilmaisu vakoilulle, niin miksi en tekisi niin? Varsinkin kun kaupan päälle iso määrä mainoksia tipahtaa myös näkymättömiin.

Toki voisi käyttää myös Bravea tai jotain muuta hakumoottoria, joka oman ilmoituksensa mukaan ei seuraa käyttäjiä. Mutta silloin olisin riippuvainen siitä mitä Brave on indeksoinut ja miten se esittää tulokset. Brave ei ole kovinkaan hyvä hakukone, ja aivan riippumatta mitä mieltä olen seurannasta, jonka ainoa tarkoitus on kohdentaa mainoksia, niin haluan hakutuloksia. Ja siinä Brave, ja muutkin marginaalissa olevat hakusivustot, kompastuvat.

Mutta SearXNG:n avulla saan haettua useammista palveluista yhdellä haulla, ja painottaa niitä haluamallani tavalla.

Miksi henkilökohtainen hakukone

Maailmalla on ehkä 70 avointa ja kaikille vapaata SearXNG-palvelinta. Tuskin kukaan tietää paljonko on yksityisiä — avoin tarkoittaa sellaista, että osoite löytyy listoista ja kuka tahansa voi käyttää niitä hakukoneina; yksityinen voi olla vapaasti, ainakin jossain määrin, käytettävissä, mutta ei ole avointen listalla, joten url on tavalla tai toisella tiedettävä, tai sitten yksityinen on tosiaan yksityinen — kute oma Raspberryssä pyörivä, ei se näy maailmalle, eikä sinne kukaan muu pääse (paitsi omasta sisäverkostani).

Avointa voi käyttää, jos juuri sen palvelun ylläpitäjän tarjoama valikoima kelpaa tai riittää. Ymmärtääkseni avoimet sallivat enemmän tai vähemmän kaikki käytössä olevat hakumoottorit ja sivustot joihin voidaan moinen etsivä haku tehdä — niiden määrä on tätä kirjoitettaessa 200 luokkaa. Mutta jos haluaa tarkempaa rajausta, kuten pelkästään PubMed/OpenAIRE/Wikipedia tai koodauspuolella GitHub/Gitea/ja-mitä-niitä-onkaan, niin tarvitsee ikioman instanssin. Tai jos oma tarve painottaa hakutuloksia on eri kuin instanssin ylläpitäjän näkemys, niin on syytä käynnistää oma.

Oman instanssin käyttöä puoltaa myös minulle tuntematon aspekti, hakujen tekeminen valmiiksi. Jos taitoa riittää (tai pyytää tekoälyltä apua…), niin voi rakentaa scriptin, joka hakee vaikka yöllä edellisen päivän asiat — uudet tutkimukset, uudet podcastit jostain aiheesta, maailman uudet koirabloggaukset — valmiiksi aamua varten, ja tuuppaa koosteen RSS-lukijaan (miksi ihmiset eivät käytä enempää RSS:ää; esimerkiksi podcast-palvelut ovat usein vain fiinejä RSS-lukijoita).

Oma tarve

Minä käytän Googlea paljon. Jos päätän kirjoittaa jonkun koira-aiheen, tai haluan serverieni tekevän jonkun uuden asian — esimerkiksi haluan kokeilla SearXNG:tä — niin haen asiaan liittyvää jollain hakulauseella. Yleensä ensin suomeksi ja sitten englanniksi. Sitten alan selaamaan Googlen tarjontaa ja klikkailen osumia auki uusiin välilehtiin. Kun osumat alkavat toistamaan itseään, tai olen mennyt mittaluokkaa 10 osumasivua läpi ilman, että on tullut uutta herättävää linkkiä, tai olen mennyt koko Googlen tarjonnan läpi (noinkin käy), niin alan mennä välilehtiä silmäilemällä läpi. Minulle 300 avointa välilehteä on täysin normaalia. Välillä on enemmänkin.

Olen jo oppinut näkemään parilla silmäyksellä onko osumassa potentiaalia. Jos on, välilehti-url jää auki, jos ei, niin suljen sen. Silmäilyyn on yksi poikkeus: kun olen rikkonut servereilläni jotain ja etsin korjausta. Minulta puuttuu kyky arvioida mikä on relevanttia ja mikä ei, ja joudun lukemaan kaiken. Kokemus on osoittanut, että stetson-statistiikan mukaan asiaa etsiessä 90% osumista on jonninjoutavaa tai alkuperäisen lähteen kopiointia, ja IT-maailman ongelmissa 99% osumista antaa neuvoja, jotka eivät ole koskaan toimineet, eivät muusta syystä toimi, ovat pahasti vanhentuneita tai eivät liity asiaan mitenkään. Turhaa kohinaa ja ajanhukkaa.

Kun olen ensimmäisen karsinnan tehnyt, niin alan lukemalla lukea. Jos sisältö on hyödyllistä, niin välilehti jää auki. Jos ei, niin menee kiinni. Tuossa vaiheessa alkaa paljastua kopiot. Jätän nekin auki tässä vaiheessa. Sitten tulee kolmas vaihe, joka on taas vilkuilua. Keskityn kopioihin ja säilytän vain ne, joissa asia on laajimmin tai parhaiten selitetty, tai on originaali.

Lähes riippumatta mitä olen selvittänyt, niin kun alan omiin kirjoitustöihini, niin alkuperäinen 300 osumaa on tyypillisesti karsiutunut 3-5 sivuun.

Tiedon hakeminen on niin aikaa vievää, että kun varsinaisen jutun kirjoittamiseen menee aiheesta riippuen 1-4 tuntia, niin pohjatiedon hankkiminen syö luokkaa 8 tuntia, ainakin. Täysin vieraassa asiassa molemmat aikajaksot saa kertoa kahdella.

Joten mikä tahansa, joka säästää minulta aikaa ja vaivaa, löytyy taatusti työkalupakistani. Kuten nyt SearXNG.

Raspberryn rooli

Kaikessa yksinkertaisuudessaan SearXNG on ohjelma, joka piipahtaa eri palveluissa tekemässä haun, tuo tulokset takaisin kotiin, siivoaa ne ja esittää osumat. Se ei ole kovinkaan iso eikä raskas, ainakaan henkilökohtaisessa käytössä. Joten tarvitaan jonkinlainen tietokone ja että siellä pyörivä SearXNG pääsee niin sanotusti nettiin.

Aika monet kotitarvekäyttäjät hyödyntävät omaa läppäriään. Tai laittavat jo muutoin vanhaan ja väsyneeseen tietokoneen tapaiseen jonkun linuxin ja työntävät sen hurisemaan serverihommissaan johonkin kaappiin tai hyllylle.

Tämä on hyvä oivaltaa: SearXNG:en täytyy olla käynnissä vain kun sitä käyttää. Mutta se haluaa linuxin (ainakaan äkkiseltään en löytänyt muuta, mutta toisaalta en etsinytkään, koska itsellä ei enää Windowsia ole ja lähin Macia muistuttava on iPad).

Windowsiin saa muuten linuxin. Omat ohjeet ovat vanhat, eivätkä käsittele sitä miten Windowsin selain pääsee SearXNG:hen käsiksi localhostissa — selvitä itse, jos tarvitset. Linux-käyttäjät pääsevät paljon helpommalla — kun aletaan töihin, niin terminaalissa on dockerin kontti ja siinä SearXNG pyörimässä; se siitä.

Minä teen nykyään valtaosan töistäni iPadillä. Siinä ei moista palvelua pysty pyörittämään, joten tarvitsin jonkun tekemään serveritöitä kodin sisäverkossa. Joskus vuosia sitten hyödynsin vanhaa läppäriä, mutta kyllästyin nopeasti kuuntelemaan sen hurinaa. Ostin tupakka-askin kokoisen saippuakotelolta näyttävän tietoteknisen ihmeen Raspberry Pi 4b:n — nykyään on päivitetympikin versio myynnissä, mutta tuo on edelleen halvempi ja toimii aivan täysin.

Joten Raspberry on verkkojohdolla routerissa/modeemissa kiinni ja SearXNG omilla säädöillään pyörii siellä. Kiusaksi tulee nousee Applen politiikka. En saa Safarille oletushakukoneeksi omaani. Ainoat sallitut ovat Google, Yahoo, Bing, DuckDuckGo ja Ecosia. Pikakomennoilla olisi ilmeisesti mahdollista saada lähetettyä SearXNG:lle hakusanat — mutta en saanut tuota onnistumaan (en ole oikeastaan koskaan saanut iPadin pikakomentoja toimimaan, edes ohjeilla, en vaan tajua tuota systeemiä). Joten olen tyytynyt pikakuvakkeeseen työpöydällä.

Minulla on eräässä VPS:ssä SearXNG toiminnassa. Toki olisin saanut Raspberryn ja SearXNG:n näkymään maailmalle, mutta katsoin tuon helpommaksi ja turvallisemmaksi ratkaisuksi. En ole kuitenkaan päättänyt vielä sen tulevaisuutta. Mutta Raspberryssä surraa täysin henkilökohtaiseksi viritetty versio.

SearXNG:n asentaminen Raspberryyn

Olen sanonut usein näissä yhteyksissä, että en ole koodari, en ole dev ja olen sysadmin vain olosuhteiden pakosta — liian köyhä käyttämään maksullisia palveluita, eikä näitä töitä kukaan muukaan minulle tee. Joten suurimman osan aikaa en varsinaisesti tiedä mitä teen, ymmärtämisestä puhumattakaan.

SearXNG:n sivuilla on asennusohjeet. Niitä varmasti kannattaa seurata. Ja alleviivaan: niitä on seurattava alusta asti, eikä suinkaan vasta siitä kohdasta, jossa sanotaan asennus-scriptin hoitavan kaiken valmiiksi. Se pitää osaksi paikkaansa, jos on tajunnut asentaa, ottaa käyttöön ja asettaa dockerin ensin. Se, että miten docker otetaan käyttöön sitten jääkin kertomatta. Oletus kun on, että on niin edistynyt käyttäjä, että tietää miten dockeria käytetään.

Minun ymmärrykseni dockerista rajoittuu siihen, että se on jokin hemmetin kontti/container, jossa on kaikki tarvittava, paitsi että ei ole, ja se toimii turvallisesti omassa hiekkalaatikossaan, paitsi että tuokaan ei pidä paikkaansa ja dockerin container ei hittoakaan piittaa esimerkiksi UFW-palomuurista.

Sama asenne piinaa useampaakin ohjelmaa, varsinkin open source maailmassa. Devaajat tekevät devaajille, ja dokumentit ovat sitten joko vajaita tai edellyttävät perustietoja, jotka eivät ole perustietoja — Google (koska tässä vaiheessa esim. SearXNG ei toimi) sitten paljastaakin kuinka paljon niitä perusasioita kysytään.

Joten noudata virallista dokumentaatiota. Minä en tosin saanut niiden avulla SearXNG:tä ihan äkkiä toimimaan, koska jotain puuttui ja se minkä sitten sain paikalleen, vaatiikin enemmän hoivaa ja taputtelua. Kysyin apua yhdessä vaiheessa tekoälyltäkin, kun aloin olla tuskastunut rautalangan puuttumiseen. Olen ennenkin sanonut, että se on tyypillisesti 80 prosenttisesti oikeassa. Tällä kertaa sitten se 20 prosenttia työllistikin urakalla ja viiden minuutin operaatio venyi pariin tuntiin.

Jos tietää mitä tekee ja jätetään käytettävien hakusivustojen säädöt aikataulutuksen ulkopuolelle, niin SearXNG:n asennus vie viisi minuuttia — ja siinä on tupakkapaussi mukana.

SearXNG:n asentaminen Raspberryyn (oikeasti)

Pari raja-arvoa ja oletusta:

  • minulla on Raspberryn oma distro käytössä ilman näyttökilkkeitä sun muita. Eli RaspberryOS Lite serverikäytössä. Mutta homman pitäisi toimia samalla tavalla kaikilla Debian/Ubuntu klooneilla, ja muillakin. Mutta tässä esitelty tapa ei toimi VPS:llä ja ylipäätään ulkoverkoilla.
  • Raspberryn pitää osata jutella sisäverkon kanssa. Yleensä näin onkin, mutta jos tilanne on toinen, niin ihmettele routerin/modeemin asetuksia
  • Minulla toimii raspberrypi.local:8080 — jos sinulla ei toimi, niin luultavasti http://ip-osoite:portti tarvitaan (portin ei tarvitse olla 8080, mutta ilman aitoa domainia täytyy olla)
  • SearXNG on mahdollista asentaa ilman dockeria. En penkonut miten, vaikka en mitään dockerista tiedäkään ja eräällä tavalla pelkään sitä (tosin, oma Discourse-foorumikin on dockerilla)
  • neljägigaisen Raspberryn muisti riittää minulla mainiosti, mutta toki se riippuu paljonko on muita palveluja käytössä ja kuinka raskaaseen työhön SearXNG laitetaan. Dokumenttien mukaan muistinkäyttö on välillä 512 MB – 2 GB. Tyhjäkäynnillä VPS:ssä komento
❯ Näytä koodi
docker container stats searxng --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}"

näytti

❯ Näytä koodi
NAME      MEM USAGE / LIMIT     MEM %
searxng   101.5MiB / 15.25GiB   0.65%

Katsoin isolta serveriltä siksi, että Raspberry ei osaa tarvittavaa cgroup-mittausta. Ei hajuakaan mikä se on, mutta jollain tavalla liittyy Raspberryn käyttämään kernelversioon. Tällä nähnee miten Raspin SearXNG:n containerissa muistia kuluu:

❯ Näytä koodi
cat /proc/$PID/status | grep -E 'VmRSS|VmSize'

Ja suunnilleen samaa, tietysti, lepotilassa käytettiin:

❯ Näytä koodi
VmSize:  1095464 kB
VmRSS:     28864 kB

Koska Raspberry ei ollenkaan tykkää siitä, että joku häärää koko ajan rootin roolissa, niin olin omalla käyttäjälläni ja sudoa joutuu tarpeen tullen hyödyntämään.

Dockerin asentaminen

Ensin tarvitaan tietysti tuttu järjestelmän päivitys.

❯ Näytä koodi
sudo apt update && sudo apt dist-upgrade -y

Sitten asennetaan docker ja sen tarvitsema käyttäjä.

❯ Näytä koodi
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER

Kirjaudu tai sulje terminaali. Muuten ryhmäjutut ja pari muuta mystistä voodoo-juttua ei toimi. Ihan oikeasti. Jos et kirjaudu uudestaan, niin asiat menevät rikki.

Asennetaan docker-compose ja varmistetaan sen onnistuminen pyytämällä versiota.

❯ Näytä koodi
sudo apt install docker-compose-plugin -y
docker compose version

Nyt aletaan saapumaan alueella twilight zone, koska SearXNG:lle, dockerille tai composelle, ehkä jopa kaikille, tarvitaan oma hakemisto. Mihin se menee sitten riippuukin mitä dokumenttia lukee netistä tai jopa mitä kohtaa lukee SearXNG:n dokumentaatiosta.

Minulla kesti jonkun aikaakin oivaltaa, että sillä ei ole suurtakaan merkitystä niin kauan kun se ei ole pelkästään rootin käytössä. Useimmin mainitut paikat ovat

  • ~/searxng
  • /usr/local/searxng

Minä laitoin sen VPS:ssä hakemistoon /opt/searxng koska /opt on määrätyissä kulttuureissa aika tyypillinen paikka tuon tyyppisille ohjelmille. Mutta koska asentajan kotihakemisto mainittiin usein, myös virallisemmissa yhteyksissä, ja koska asensin sen Raspiin ja itselleni, niin:

❯ Näytä koodi
mkdir ~/searxng && cd ~/searxng

Syy sille miksi koen tämän olevan akselilla twilight zone on, että tuossa hakemistossa ei ole kuin kuin kaksi asetustiedostoa. Ja silti kaikkea käytetään sitä kautta. Kuten jo sanoin, en tajua tätä docker-asiaa, yhtään.

Laitetaan composerille asetukset kuntoon:

❯ Näytä koodi
nano docker-compose.yml

Muistutuksena: yml-tiedostot ovat auringontarkkoja sisennyksistä. Aina välilyönneillä, sisennys on aina kaksi välilyöntiä ja saman syvyyden sisennykset ovat oltava samalla syvyydellä läpi koko tiedoston. Joten jos kopioit minulta, niin toivon todellakin, että koodilohkoni antaa sen sinulle oikein.

❯ Näytä koodi
services:
  searxng:
    image: searxng/searxng:latest
    container_name: searxng
    restart: unless-stopped
    ports:
      - "0.0.0.0:8080:8080" # jos käyttää IPv4 tai raspberrypi.local
      #- "[::]:8080:8080"   # molemmat, IPv4 ja IPv6
    volumes:
      - ./settings.yml:/etc/searxng/settings.yml
    environment:
      - SEARXNG_BASE_URL=http://raspberrypi.local:8080/ # tai IP-osoite
      - SEARXNG_SECRET_KEY=<tähän-tulee-kohta-paljon-merkkejä>
      - UWSGI_WORKERS=2
      - UWSGI_THREADS=2

Sitten tehdään hieman mutkan kautta settings.yml . Aja tämä:

❯ Näytä koodi
docker run --rm --name searxng-vanilla -p 8081:8080 searxng/searxng:latest &
sleep 2

docker exec searxng-vanilla cat /etc/searxng/settings.yml > ~/searxng/settings.base.yml

docker stop searxng-vanilla

Kopioin tuon eräältä, joka oli riidellyt instanssinsa kanssa. Tuo käynnistää ihan perustason SearXNG:n (kikka, jota voi käyttää virheen metsästykseenkin). Sitten se hakee sille toimivan settings.yml tiedoston ja kopio sen kotihakemistoon nimellä settings.base.yml . Pienen odotuksen jälkeen se sammuttaa itsensä.

Kopioi se oikealle nimelle. Oletan, että ollaan edelleen ~/searxng:

❯ Näytä koodi
cp settings.base.yml settings.yml

Muodostetaan tässä välissä SECRET_KEY :

❯ Näytä koodi
python3 - << 'PY'
import secrets, string
alphabet = string.ascii_letters + string.digits
print(''.join(secrets.choice(alphabet) for _ in range(64)))
PY

Kopioi pitkä merkkisarja ja laita se SECRET_KEY kohtaan molempiin tiedostoihin, docker-compose.yml ja settings.yml.

Kun olet tiedostossa settings.yml niin selaa se muutenkin läpi. Ainakin asetukset ennen engines: kohtaa (siellä asetetaan hauissa käytettävät sivustot, miten ne on ryhmitelty jne.). Joudut luultavasti muuttamaan ainakin portin ja IP:n.

Totesin aikaisemmin, että portin voi muuttaa, mutta se pitää kuitenkin olla 8080. Eli docker-compose.yml tarvitsee

❯ Näytä koodi
ports:
      - "0.0.0.0:8080:8080"

sekä

❯ Näytä koodi
environment:
      - SEARXNG_BASE_URL=http://raspberrypi.local:8080/ # tai IP:8080

ja settings.yml

❯ Näytä koodi
port: 8080
  bind_address: "0.0.0.0". # jos IPv4

Oletetaan, että portiksi olisi laitettu 8888:8080. Koska aito BASE_URL puuttuu, niin selaimen liittymässä asetusten tallentaminen aiheuttaa sen, että palataankin porttiin 8080 — mutta sitä ei kuunnella. Ja jos yrittää käyttää dockeria tai mikä lie container onkaan ja yrittää ehdottaa 8888:8888 niin koko systeemi kaatuu.

Kuten olen jo pariin otteeseen maininnut, niin minusta tämä on twiligh zone materiaalia. Joku muu varmaan osaa korjata tuonkin, mutta minä se en ole. Joten portilla 8080 mennään joka paikassa, kun työskennellään Raspin kanssa. Isoilla koneilla ja aidolla domainilla tilanne on toinen.

SearXNG:n asentaminen

Sitä ei asenneta. settings.yml riittää. Vieläkö muistat Twilight Zonen tunnusmusiikin… nyt on hyvä hetki vihellellä sitä. Koska jostain tiheästä ilmasta tai toisesta ulottuvuudesta se tulee. No, aidosti se kopioidaan lähteestä (ja tähän hiukan Matrix viboja). Käytännössä GitHubista ja se asentuu… muistiin ymmärtääkseni, ainakin niiltä osin, kun ei mountata myös serverille ”fyysisesti”. Dockerin imaget ovat näkymättömiä, ainakin minusta.

Tällä aloitetaan:

❯ Näytä koodi
docker compose pull

Tuo hakee uusimman version. Sillä myös tehdään päivitykset.

SearXNG lähtee käyntiin komennolla:

❯ Näytä koodi
docker compose up -d

Ensimmäisellä kerralla, ainakin, saattaa olla syytä antaa logien näkyä, ja komentaa perään:

❯ Näytä koodi
docker logs -f searxn

Tulet näkemään virheitä. Iso osa niistä johtuu siitä, että joku engine ei toimi. Kuten tätä kirjoitettaessa ainakin Amerikoiden kongressin kirjasto. Tai hakukone Qwant, joka muutti toimintaansa niin, että SearXNG ja muut meta-haut eivät enää toimi.

ctrl-c ja virheet eivät kiusaa.

On kaksi tapaa tarkistaa toimiiko SearXNG.

  • avata selain ja mennä osoitteeseen http://raspberrypi.local:8080 tai IP:llä, jos se on käytössä
  • curl -I http://127.0.0.1:8080 kertoo onko status 200 vai jotain muuta

Jos se ei toimi, niin tarkista ainakin ensimmäiseksi, että asetukset on oikein, kuin myös yml-tiedostojen sisennykset ja rakenne muutenkin.

Jos toimii, niin voitto se on pienikin voitto. Minulla toimi näillä ohjeilla.

Kaksi huomiota.

Kun docker potkaisi SearXNG:n käyntiin, niin settings.yml omistajuus muuttui. Minulla se on 977:977 ja muilla sitten minkä systemd on arponut. Tuo johtuu siitä, että dockerille ei tehty missään vaiheessa käyttäjää. Se taasen johtuu siitä, että kopioimani lähteet eivät tehneet sitä. SearXNG:n ohjeet kylläkin asettavat sen. Ja syy sille, että en lisännyt sitä ohjeisiin on, että en tehnyt sitä alunperin. Kerron vain se mitä olen tehnyt, ja joka varmuudella on toiminut — ainakin minulle.

Ymmärtääkseni omistajuus on pelkkä kauneusvirhe, ei muuta. Nimi tai numero, mikään ei muutu. Ja muokkaus onnistuu kun muistaa sudo nano settings.yml.

Toinen muistettava on, että kun muuttaa asetuksia niin täytyy tehdä dockerin sammutus ja sitten käynnistys. Muutoin muutokset eivät tule voimaan.

settings.yml

En mene sen syvemmin asetuksia läpi, mutta ne ovat aika itseään selittäviä. Oleellista on, että secret key, IP, portti ja url ovat server-osiossa oikein.

❯ Näytä koodi
port: 8080
  bind_address: "0.0.0.0"
  base_url: false

Älä ilmoita instanssiasi julkiseksi. Jos teet sen, niin Raspisi taitaa mainostaa hakukonettasi maailmalla, ja sen jälkeen kotirouterisi saa aika paljon koputuksis. Eihän siitä läpi pääse, jos et ole erikseen sallinut, mutta… ei silti

❯ Näytä koodi
public_instance: false

Method on oletuksena POST, koska se on jotenkin tietoturvallisempi. Mutta samalla se rikkoo selaimen back-toiminnon ja pari muuta asiaa. Vaihda se GET.

❯ Näytä koodi
method: "GET"

Makuasia, mutta kohta hostnames on kommentoitu. Siihen kannattaa tutustua. Jos poistat kommentoinnin, ja myös alempaa Facebookin kohdalta, niin halutuloksissa ei näy enää Facebookia. Minulla on vahva mielikuva minkä kaikkien sivustojen kohdalla tulen tuota hyödyntämään.

❯ Näytä koodi
hostnames:
  remove:
    - '(.*\.)?facebook.com$'

Kategoriat ovat hyvinkin oleellinen asia. Niiden kanssa valikoidaan mitkä hakukoneet ovat käytössä. Asia aukeaa paremmin, jos on ensin kokeillut SearXNG:tä. Mutta tämän kaltaisesta asiasta on kyse:

❯ Näytä koodi
categories_as_tabs:
  general:
  science:
  some:

Ja se näyttäisi livenä tältä:

Kun käytetään general määritettyjä hakukoneita

Kun käytettiin science luokiteltuja

Kategoriat, painotukset jne. tehdään engines kohdassa. Sieltä saa poistaa viemästä tilaa sellaisia, joita ei koskaan käytä. Minulta lähti välittömästi kiinalaiset ja aina monta muutakin. Jos on hieman epävarma tai jollain muutoin käyttökelpoisella näkyi logeissa virheitä, niin ne voi ottaa pois päältä.

Tältä näyttää minulla Google:

❯ Näytä koodi
- name: google
    engine: google
    shortcut: go
    weight: 1.5
    categories: [general]
  • nimi täytyy olla pienellä, eikä alaviivaakaan sallita
  • engine on nimi, jolla koodin puolella löytyy se mikä ajetaan
  • shortcut on lyhenne, jolla saa haun etsimään vain siitä; !go searxng hakisi vain ja ainoastaan Googlesta
  • weight on painotus; 1 on oletus, pienempi tipauttaa tuloksissa, suurempi nostaa
  • categories on kategoria, mihin kuuluu. Voi olla useammassa, ja ne erotetaan toisistaan pilkulla

Asetuksia voi olla enemmänkin, ja lisäksi noita on erityyppisiä. Esimerkiksi joltain Discourse foorumilta voi hakea. Tämä on Katiskan foorumi:

❯ Näytä koodi
- name: katiskafoorumi
    engine: discourse
    shortcut: katiska
    base_url: 'https://foorumi.katiska.eu/'
    api_order: views
    categories: [some, general, science]
    weight: 1.5
    show_avatar: true
    search_endpoint: "/search.json"
    api_username: "api-käyttäjä"
    api_key: "api-avaim"

Katiskan foorumilta haetaan aina, jos haku käyttää mitä tahansa määritellyistä kolmesta kategoriasta.

Kaikki enginet löytyvät SearXNG:n sivuilta. Huonot uutiset, omalla tavallaan, on se, että käyttö on rajoitettu niihin sivustoihin, joille on koodattu engine, eli pelkkä määrittely settingsissä ei riitä. Hyvä uutinen on sitten se, että jos osaa koodata ja ymmärtää mistä on kyse, niin voi tehdä forkin ja laajentaa. Mutta aika paljon siellä oli vaihtoehtoja. Hyödyllisiä ehkä vähemmän, ainakin minulle. Hauskana pidin sitä, että PirateBayllekin löytyi engine — mutta meille suomalaisillehan se on kielletty sivusto, vaikka käyttäisikin Saksan tai Hollannin kautta liikkuvaa VPN:ää (oikeasti, feikkisivustoja on vaikka kuinka ja aidompienkin mirroreiden kautta liikkuu rutkasti haittoja).

Jakke Lehtonen

Teen B2B-markkinoille sisällöntuottoa sekä UX-testauksia. Samaan liittyy myös koulutukset yrityksille ja webmaailman kanssa muutoin painiville. Serverien sielunelämää on joutunut ohessa opettelmaan. Toinen puoli toiminnasta on koirien ravitsemuksen ja ruokinnan suunnittelua sekä varsinkin omistajien kouluttamista hoitamaan koiriaan oikein ja vielä paremmin. Profiili: Jakke Lehtonen

Foorumin keskustelu

  1. Minua jäi häiritsemään syvästi se, että en ymmärrä miten SearXNG toimii. Yleensä aina on joku hakemisto, jossa on kaikenlaisia tiedostoja. Niitä sitten ajellaan ja kutsutaan, jolloin jotain tapahtuu. Nyt kaikki tuo näyttäisi puuttuvan.

    En edelleenkään ymmärrä dockerin ajatusta, mutta sen verran kuvittelen selvittäneeni, että kun komennetaan docker compose up -d, niin ladataan image — en edes yritä kääntää tuota kuvaksi, levykuvaksi tai joksikin muuksi vastaavaksi.

    Tuo image on valmiiksi paketoituna koko hakemistorakenne, tiedostot ja ohjelmat. Sitten se puretaan johonkin, jota ei näy normaalisti hakemistoissa. Ehkä muistiin, koska se häviää puf kuin kuuluisa pieru Saharaan. Tosin en ymmärrä miten isotkin ohjelmistokokonaisuudet mahtuvat muistiin. Mutta se on sitten ehkä container.

    Missä ne containerit sitten majailevat, on minulle sekin mysteeri. Ne kun eivät häviä mihinkään, vaan alkavat kertymään sitä mukaa kun vanhoja sammutetaan ja uusia rakennetaan siitä imagesta.

    Taitaa olla parempi kuin ei liikaa mieti. Tämä foorumikin on tehty dockerilla, mutta ei imagella. En ymmärrä miten tämäkään toimii, mutta olen opetellut komennot, joilla saan tehtyä sen mitä tarvitsen. Ilmeisesti SearXNG:n suhteen täytyy ottaa käyttöön sama politiikka: käyttö ei vaadi ymmärrystä.

    Joten siihen käyttöön… pakko laittaa nämä ylös, koska muutoin unohdan itse.

    SearXNG:n päivitys

    Vaikka tämä Raspin ketju, niin käytän silti serveriversioni polkuja. Mutta Raspberryssä polku on ~/searxng.

    cd /opt/searxng
    
    # 1. Hae uusimmat imaget (ei vaikuta käynnissä olevaan containeriin)
    docker compose pull
    
    # 2. Pysäytetään container
    docker compose down
    
    # 3. Käynnistetään uudella imagella
    docker compose up -d
    
    # 4. Näyttää lokit, ctrl-c pysäyttää
    docker logs -f searxng
    

    Siivous

    Vanhat imaget:

    docker image prune -f
    

    Kaikki vanhat, mukaanlukien pysäytetyt containerit ja imaget, jotka eivät ole kytketty käynnissä olevaan containeriin (sama kuin Discoursen ./launcher cleanup)

    docker system prune -a
    

    Docker ja tiedostot

    Täällä on varsinaiset ohjelman tiedostot dockerin sisällä, uskoisin.

    docker exec -it searxng ls -l /usr/local/searxng
    

    Koko hakemistorakenne (lienee vastaava kuin Discoursen ./launcher enter app)

    docker exec -it searxng sh
    

    sh:ssa ei ole kuin peruskomennot. Tällä saa bashin, jonkinlaisen, käyttöön:

    docker run --rm -it \
      -v /opt/searxng:/opt/searxng \
      debian:bookworm-slim bash
    

    En vaan tiedä mitä tuolla tekisi. Se ilmeisesti kaivaa esille jonkun Debianin kevyt-imagen. Varmaan ihan käyttökelpoinen jossain ongelmatapauksissa, mutta en minä sillä SearXNG:n sisälle pääse.

    Ilmeisesti ajatus on, että jos jotain täytyy muokata, niin se mountataan ”fyysiseen” hakemistoon ja sitten tehdään siellä töitä ihan normaalisti. Tai jotain.

  2. Uusi päivä ja uudet kujeet.

    Koska SearXNG:n tiedostoihin pääsee käsiksi vain jos hakemistoja mounttaa dockerista normaalipuolelle, ja koska määrätyt tuunaukset saa thetyä vain muokkaamalla dockerin takana piilossa olevia itedostoja, niin sitten täytyy mountata jotain.

    Noin luulin. Todellisuus sitten olikin, että homma toimii mountissa juurikin toisinpäin ja jos haluaa muokata jotain, niin se muokattu mountataan containeriin – sitä ennen täytyy muilla työkaluilla selvittää mitä ja missä se on, että osaa tehdä saman rakenteen paikalliseksi.

    Tsiisus, että tämä on sekavaa.

    Nämäkin teen VPS:ssä, koska Raspi-versio on puhtaasti henkilökohtainen, en piittaa sen ulkonäöstä, ja sen muistikapasiteetti SD-kortilla on rajallinen. Mutta moiset tekniset detaljit ohittaen ainoa ero on esimerkkien polkurakenne. Raspissa SearXNG on tavalla tai toisella kotihakemistossani ja VPS:ssä polussa /opt/searxng

    Hakemistojen mounttaamista

    Googlella löysin aika paljonkin esimerkkejä miten mount tehdään hakemistoille. Joten tein ne. Sen seurauksena instanssini kuoli.

    Niitä ei pitänyt tehdä. ne olivat vain hyödyttömiä esimerkkejä. olen jossain määrin varma, että moiset esimerki8t ovat osaavien jäynä. jolla testataan kohteen osaamisen tasoa. tai sitten ne olivat suunnattu heille, jotka alkavat tekemään vaikka teema nollasta.

    Mountaaminen tehdään docker-compose.ymltiedoston volumesosioon:

    volumes:
          - /opt/searxng/settings.yml:/etc/searxng/settings.yml
          - /opt/searxng/static:/usr/local/searxng/searx/static
    

    Mounttaaminen toimii hostista containeriin. Se ei ylikirjoita, vaan piilottaa tai peittää containerissa olevan. Joten esimerkissä olevissa

    • paikallinen settings.ymlohittaa containerin versio
    • /static ohittaa containerin saman hakemiston

    Jolloin jos paikallinen /static ei sisällä kaikkia tarvittavia CSS-tiedostoja ja mahdollisia alihakemistoja ja niiden tiedostoja jne. niin instanssi kaatuu. Joten joko muokataan koko hakemiston sisältöä, tai mountataan vain muokattu tiedosto, kuten settings.yml tapauksessa.

    Oma luuloni oli, että mountti tuo containerin sisällön hostiin paikalliseksi, ja sitten niitä voi muokata. Jos tuon haluaa, niin sitten pitää ensin kopioida käsin conatinerista paikalliseksi, ja sitten mountata sama containerin suuntaan – jossa ei ole suurtakaan järkeä.

    Mutta jos tuon haluaisi tehdä, niin näin:

    # containeristä hostiin:
    docker cp searxng:/usr/local/searxng/searx/static /opt/searxng/static
    # mount:
    volumes:
      - /opt/searxng/static:/usr/local/searxng/searx/static:ro 
    # :ro on read-only, en tiedä miksi ja kumpaan suuntaan se edes on
    

Jatka keskustelua foorumilla Katiskan foorumi

Osallistujat

Avatar for Jagster

WordPressin kommentit: