SSD Nodes Learn Hosting plans →
Przewodniki Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-08-30

Searx czy SearXNG: czy projekt Searx jest martwy?

Projekt Searx nie otrzymuje aktualizacji od kwietnia 2023 roku. Sprawdź, dlaczego należy wybrać SearXNG, jak poprawnie skonfigurować instancję i uniknąć błędów w plikach YAML.

Searx czy SearXNG: co zainstalować?

Searx i SearXNG to dwa różne projekty o niemal identycznej nazwie, z których tylko jeden otrzymuje poprawki. Należy zainstalować SearXNG. Oryginalny projekt Searx nie otrzymał żadnego commita od kwietnia 2023 roku, a jego plik README jasno określa sytuację: "Searx is no longer maintained" (Searx nie jest już utrzymywany).

Stanowi to problem praktyczny, a nie filozoficzny. Oba projekty dzielą ten sam zrzut ekranu, większość pliku konfiguracyjnego oraz połowę nazwy, więc poradnik napisany dla jednego z nich wygląda na pasujący do drugiego. Tak nie jest. Plik ustawień znajduje się w innej lokalizacji, mechanizmy ochrony przed botami są nowe, a nazwa pakietu zniknęła z aktualnych wydań Ubuntu. Poniżej przedstawiono różnice, polecenia do samodzielnego sprawdzenia statusu oraz listę zmian istotnych dla osoby wdrażającej instancję.

Czym jest Searx i skąd wywodzi się SearXNG

Searx to metawyszukiwarka. Nie posiada własnego indeksu. Pobiera zapytanie użytkownika, przekazuje je do innych usług wyszukiwania, takich jak Bing, DuckDuckGo czy Wikipedia, a następnie scala otrzymane wyniki na jednej stronie. Korzyścią jest to, że wspomniane usługi widzą adres serwera, a nie adres użytkownika. Kosztem jest utrzymanie. Każdy silnik to fragment kodu analizujący HTML lub API zewnętrznych serwisów, dlatego silnik przestaje działać, gdy tylko zmieni się struktura źródła. Sprawność metawyszukiwarki zależy wyłącznie od osób naprawiających jej moduły.

Repozytorium searx powstało w październiku 2013 roku. W kwietniu 2021 roku były opiekun projektu uruchomił SearXNG jako jego fork. Skrót "NG" oznacza next generation. Plik README projektu searx opisuje oba projekty równolegle i ten opis pozostaje najbardziej przejrzystym podsumowaniem podziału:

SearXNG to fork searx, stworzony przez byłego opiekuna searx.
SearXNG posiada wydania typu rolling release, częściej aktualizowane zależności oraz szybciej naprawiane silniki.

Przyczyną podziału były różnice w podejściu do diagnostyki. Searx traktował dane o użytkowaniu jako informacje, których instancja nie powinna przechowywać, co wprost deklarują jego domyślne ustawienia: enable_stats: False # activate /stats page - note: it may leak usage data. SearXNG przyjął odmienne założenie i domyślnie dostarcza enable_metrics: true. Te metryki wypełniają paski czasu odpowiedzi oraz strony błędów, które ułatwiają identyfikację i naprawę uszkodzonego silnika. Oba stanowiska są uzasadnione. Tylko jedno z nich kontynuowało aktywne wydawanie kodu.

Czy projekt Searx jest martwy? Jak to sprawdzić samodzielnie

„Martwy” nie jest statusem raportowanym przez GitHub, dlatego należy przeanalizować dwa istniejące sygnały i wyciągnąć wnioski. Pierwszym z nich jest sprawdzenie, czy repozytorium zostało zarchiwizowane oraz kiedy ostatnio odnotowano w nim wypchnięcie zmian (push).

curl -s https://api.github.com/repos/searx/searx | jq -r '.archived, .pushed_at'
curl -s https://api.github.com/repos/searxng/searxng | jq -r '.archived, .pushed_at'

W dniu 22 sierpnia 2026 roku pierwsze polecenie wyświetla false oraz 2026-05-14T10:02:22Z. Drugie polecenie wyświetla false oraz znacznik czasu z dnia wykonania. Należy zwrócić uwagę na pierwszą wartość. Repozytorium searx nie jest zarchiwizowane i nikt nie zablokował dostępu, dlatego pytanie o jego status powraca.

pushed_at jest słabym sygnałem, ponieważ zmienia się przy wypchnięciu zmian do dowolnej gałęzi, w tym przy zmianie jednej linii w dokumentacji. Zamiast tego należy przejrzeć listę commitów.

curl -s 'https://api.github.com/repos/searx/searx/commits?per_page=5' \
  | jq -r '.[] | .commit.committer.date[:10] + "  " + (.commit.message | split("\n")[0])'

Według stanu na sierpień 2026 roku polecenie to wyświetla:

2026-05-14  [doc] add hister reference
2023-09-07  Searx is no longer maintained
2023-04-05  Fix quoting issue in search_operator plugin (#3479)
2023-04-04  Bump pallets-sphinx-themes from 2.0.2 to 2.0.3 (#3450)
2023-04-04  Bump selenium from 4.7.2 to 4.8.3 (#3490)

Należy czytać listę od dołu. Zwykłe prace rozwojowe ustały w kwietniu 2023 roku. Commit z września 2023 roku to informacja dodana przez opiekunów do pliku README. Jedyny commit od tamtego czasu dotyczy dokumentacji, ponieważ pierwotny autor przeniósł się do Hister, narzędzia wyszukiwawczego, które indeksuje wybrane strony i pliki zamiast odpytywać inne wyszukiwarki. Jest to inna koncepcja, przydatna, jeśli celem jest własna wyszukiwarka treści osobistych.

Drugim sygnałem jest pakowanie, od którego cicho zależą niemal wszystkie stare poradniki.

  • PyPI zawiera jedno wydanie searx, wersję 0.17.0, przesłaną w lipcu 2020 roku. pip install searx kończy się powodzeniem i dostarcza kod sprzed dziewięciu miesięcy przed powstaniem forka.
  • Debian dostarczył searx 1.1.0 w Debian 12 (bookworm) i nadal utrzymuje go w wersji unstable. Pakiet został usunięty z wersji testing w październiku 2023 roku, więc Debian 13 (trixie) nie posiada już pakietu searx.
  • Ubuntu ostatnio dostarczyło go w wersji 22.04, w wersji 1.0.0. W systemie Ubuntu 24.04 polecenie sudo apt install searx kończy się komunikatem E: Unable to locate package searx.
  • searx.space, katalog publicznych instancji, do którego projekt zawsze kierował użytkowników, wymienia teraz instancje SearXNG.

Oto uczciwy status projektu. Kod jest publiczny, nadal działa, można go sklonować i uruchomić dzisiaj. Użytkownik nie otrzymuje jednak poprawek silników ani aktualizacji bezpieczeństwa, a w przypadku metawyszukiwarki jest to główne zadanie. Silniki ulegają degradacji zgodnie z harmonogramem zewnętrznych dostawców. Nieutrzymywana instancja zwraca z każdym miesiącem coraz mniej wyników, nawet bez ingerencji w konfigurację serwera.

Co się zmieniło w nowej instancji

Plik ustawień został przeniesiony i działa teraz jako nakładka

W Searx edytowano searx/settings.yml bezpośrednio w drzewie źródłowym. W SearXNG plik znajduje się w /etc/searxng/settings.yml, a proces odnajduje go poprzez zmienną środowiskową SEARXNG_SETTINGS_PATH. Szablon kopiowany tam przez instalator jest krótki:

use_default_settings: true

general:
  debug: false
  instance_name: "SearXNG"

search:
  safe_search: 2
  autocomplete: 'duckduckgo'
  formats:
    - html

server:
  # Is overwritten by ${SEARXNG_SECRET}
  secret_key: "ultrasecretkey"
  limiter: true
  image_proxy: true

valkey:
  # URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}.
  url: valkey://localhost:6379/0

use_default_settings: true to linia, która zmienia sposób pracy. Dzięki niej plik zawiera tylko nadpisania, a każdy klucz, którego nie uwzględniono, jest pobierany z wartości domyślnych dostarczonych w pakiecie. Bez tego plik musiałby opisywać całą konfigurację, silnik po silniku. W ten sposób powstają instancje, które uruchamiają się poprawnie, ale niczego nie znajdują. Stary plik ustawień Searx wklejony w tę ścieżkę jest kompletną konfiguracją z innymi nazwami kluczy, więc wybiera drugą drogę i robi to nieprawidłowo.

Klucz tajny zatrzymuje proces

sudo -H sed -i -e "s/ultrasecretkey/$(openssl rand -hex 16)/g" \
              "/etc/searxng/settings.yml"

Uruchom to polecenie raz, po skopiowaniu szablonu. Jeśli je pominiesz, SearXNG zapisze jedną linię w dzienniku i zakończy działanie ze statusem 1, ponieważ webapp.py porównuje klucz z wartością w szablonie przed obsłużeniem jakiegokolwiek żądania:

server.secret_key is not changed. Please use something else instead of ultrasecretkey.

Weryfikacja jest pomijana, gdy general.debug ma wartość true, więc instancja może działać poprawnie w sesji debugowania, a następnie odmawiać startu pod systemd lub w kontenerze. Kontener restartujący się w pętli z tą linią w docker compose logs oznacza, że to sprawdzenie nie przeszło, a nie że obraz jest uszkodzony.

Limiter jest nowy i wymaga Valkey

Searx nie posiadał wbudowanego ograniczania liczby żądań (rate limiting). Publiczne instancje Searx umieszczały przed nim osobne usługi: filtron do filtrowania żądań oraz morty do proxy treści wyników. Oba te repozytoria otrzymały ostatni commit w 2023 roku.

SearXNG wykonuje tę pracę samodzielnie. Ograniczanie żądań i wykrywanie botów realizuje limiter, włączany za pomocą server.limiter. W dostarczonych ustawieniach domyślnych jest to false, a w szablonie instalatora true; wymaga on bazy danych Valkey do przechowywania liczników. Valkey to fork Redis, dostępny w pakietach Ubuntu 24.04:

sudo apt install -y valkey-server
server:
  limiter: true

valkey:
  url: valkey://localhost:6379/0

Poradniki napisane przed tą zmianą nazwy konfigurują blok redis:, więc należy skopiować nazwę klucza z aktualnej dokumentacji limitera. Dostrajanie odbywa się w drugim pliku, /etc/searxng/limiter.toml, a server.public_instance: true włącza bardziej rygorystyczne wykrywanie botów, wymagane w instancjach publicznych, w tym metodę tokenów linków. Widocznym skutkiem jest odpowiadanie na niektóre żądania kodem HTTP 429 zamiast wynikami, co dotyczy również własnych zapytań, jeśli używa się skryptów do odpytywania instancji. Temat ten opisano na stronie: dlaczego instancja SearXNG odpowiada 429 Too Many Requests.

Silniki zawieszają się same, a limity czasu są długie

Gdy usługa nadrzędna odpowiada stroną z CAPTCHA lub informacją o przekroczeniu limitu, SearXNG zgłasza wyjątek i przestaje odpytywać dany silnik przez określony czas, zamiast ponawiać próby aż do zablokowania. Wartości domyślne znajdują się w searx/settings.yml w sekcji search.suspended_times. Są to wartości 6 opublikowane w sierpniu 2026 roku:

ChartSearXNG default engine suspension times, in seconds
The data behind this chart
[
  {
    "label": "SearxEngineAccessDenied",
    "suspend_seconds": "180"
  },
  {
    "label": "SearxEngineCaptcha",
    "suspend_seconds": "3,600"
  },
  {
    "label": "SearxEngineTooManyRequests",
    "suspend_seconds": "180"
  },
  {
    "label": "cf_SearxEngineCaptcha",
    "suspend_seconds": "1,296,000"
  },
  {
    "label": "cf_SearxEngineAccessDenied",
    "suspend_seconds": "86,400"
  },
  {
    "label": "recaptcha_SearxEngineCaptcha",
    "suspend_seconds": "604,800"
  }
]

Zwykła odpowiedź o odmowie dostępu zawiesza silnik na 180 sekund. CAPTCHA zawiesza go na 3,600 sekund. Cloudflare CAPTCHA zawiesza go na 1,296,000 sekund, czyli piętnaście dni, a Google reCAPTCHA na 604,800 sekund, czyli tydzień. Długie wartości są celowe, ponieważ ponowne odpytywanie po tym, jak usługa oflagowała adres IP, prowadzi do trwałego zablokowania instancji.

Podczas zawieszenia silnika strona wyników pomija go i informuje o tym w bloku paska bocznego zatytułowanym "Wiadomości z wyszukiwarek", a /stats/errors zawiera listę nieudanych prób. Nowa instancja zwracająca ubogie wyniki zazwyczaj sygnalizuje właśnie ten stan, a nie błąd instalacji.

Interfejs JSON API jest domyślnie wyłączony

Domyślnym ustawieniem jest formats: [html] i nic więcej, więc API, którego wymaga każdy skrypt, jest zamknięte, dopóki nie zostanie otwarte.

curl -s -o /dev/null -w '%{http_code}\n' \
  'http://127.0.0.1:8888/search?q=test&format=json'

Powoduje to wyświetlenie 403, ponieważ ścieżka wyszukiwania wywołuje flask.abort(403), gdy żądany format nie znajduje się na liście search.formats. Dodaj format i zrestartuj usługę:

search:
  formats:
    - html
    - json

Plik ustawień searx nie posiadał w ogóle klucza formats, więc wyjście JSON było dostępne na żądanie. Każdy skrypt i fragment kodu z tamtego okresu zakłada to samo, a trybem awarii jest czysty błąd 403 bez wyjaśnienia. Jeśli integrujesz instancję z narzędziami, udostępnienie agentowi punktu końcowego SearXNG do wyszukiwania zaczyna się od tego jednego ustawienia.

Dlaczego kopiowane poradniki do Searx zawodzą

Każda z tych linii pojawia się w poradnikach, które wciąż są wysoko w wynikach wyszukiwania, a każda z nich zawodzi lub wprowadza w błąd w bieżącej instalacji.

  • sudo apt install searx na Ubuntu 24.04 zatrzymuje się na E: Unable to locate package searx, ponieważ pakiet ostatni raz wydano w wersji 22.04.
  • pip install searx kończy się sukcesem i instaluje wersję 0.17.0 z lipca 2020 roku. Brak ostrzeżenia, że wersja ta powstała przed forkiem.
  • git clone https://github.com/asciimoo/searx nadal działa, ponieważ GitHub przekierowuje ze starej nazwy właściciela i dostarcza drzewo z kwietnia 2023 roku.
  • Kroki edytujące searx/settings.yml w drzewie źródłowym nie zmieniają niczego w SearXNG, który odczytuje /etc/searxng/settings.yml.
  • Kroki instalujące filtron lub morty to ponowne budowanie elementów, które SearXNG już zawiera.
  • Adres URL redis: dla limitera jest o jedną zmianę nazwy za bieżącym kluczem valkey:.

Poradniki do SearXNG również ulegają dezaktualizacji, a adres URL klonowania jest najszybszym sposobem na określenie ich wieku. Pliki compose znajdowały się wcześniej w oddzielnym repozytorium searxng-docker. Repozytorium to zostało zarchiwizowane w marcu 2026 roku, a jego pliki przeniesiono do container/ w głównym repozytorium. Bieżący szybki start kontenerowy z dokumentacji to:

mkdir -p ./searxng/core-config/
cd ./searxng/
curl -fsSL \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example
cp -i .env.example .env
nano .env
docker compose up -d

Edytuj .env przed wykonaniem ostatniego polecenia. Obraz mapuje zmienne środowiskowe na klucze ustawień, więc SEARXNG_SECRET staje się server.secret_key, a SEARXNG_BASE_URL staje się server.base_url. Skryptowa instalacja na hoście to inna ścieżka o tym samym rezultacie:

git clone https://github.com/searxng/searxng.git searxng
cd searxng
sudo -H ./utils/searxng.sh install all

Tworzy ona użytkownika searxng, środowisko wirtualne w /usr/local/searxng oraz usługę uWSGI, co stanowi referencyjną konfigurację w dokumentacji SearXNG. Dłuższy opis tej ścieżki znajduje się w instalacja SearXNG na własnym VPS.

Instancja publiczna czy własna

Instancja publiczna to serwer należący do podmiotu trzeciego, który dokonuje terminacji połączenia TLS (transport layer security), co oznacza, że oprogramowanie na tym serwerze odczytuje zapytanie jako tekst jawny. Dokumentacja SearXNG stawia kwestię zaufania wprost: użytkownik musi ufać administratorowi i nie ma możliwości sprawdzenia, czy zapytania są logowane, agregowane lub przekazywane podmiotom trzecim. Widoczna lista jest krótka i kompletna. Stos technologiczny operatora widzi treść zapytania, czas, adres IP, z którego pochodzi żądanie, user agent przeglądarki oraz plik cookie z preferencjami użytkownika. Operator kontroluje również kod, więc każda wprowadzona przez niego poprawka jest wykonywana przy każdym wyszukiwaniu.

Domyślne ustawienie ułatwia przypadkowe logowanie. Searx wysyłał zapytania metodą POST. SearXNG dostarcza method: "GET" z komentarzem, że POST usuwa zapytania z historii przeglądarki, ale powoduje problemy z użytecznością. W przypadku GET zapytanie znajduje się w linii żądania, więc domyślnie trafia do logów dostępu reverse proxy oraz do historii przeglądarki. Jest to standardowe zachowanie serwera WWW. Warto o tym wiedzieć przed wyborem serwera, na którym odbywa się wyszukiwanie.

Uruchomienie własnej instancji przenosi zaufanie, zamiast je eliminować. Użytkownik kontroluje kod oraz logi. Jeśli nie ma potrzeby publikowania nazwy hosta lub certyfikatu TLS dla pojedynczego użytkownika, dostęp przez v3 onion service pozwala na ukrycie instancji przed publicznym DNS przy zachowaniu możliwości połączenia z dowolnego miejsca. W zamian silniki wyszukiwania widzą jeden adres dla wszystkich zapytań, a w przypadku instancji jednoosobowej każde zapytanie jest przypisane bezpośrednio do użytkownika, zamiast mieszać się w tłumie. Obciążona instancja publiczna zapewnia anonimowość w tłumie, ale odbiera kontrolę nad logami. Należy wybrać priorytetową cechę, a jeśli potrzebna jest pełna lista ryzyk, czy SearXNG jest bezpieczny w użyciu szczegółowo je omawia.

Praktyczna uwaga dotycząca VPS: zakresy adresów centrów danych są flagowane szybciej niż połączenia domowe, więc nowa instancja napotyka CAPTCHA w niektórych silnikach już po kilku pierwszych wyszukiwaniach. Jest to wspomniane wcześniej zachowanie polegające na zawieszaniu zapytań, a nie błąd konfiguracji.

Jeśli korzystasz już z instancji Searx

Nic nie ulegnie awarii w dniu, w którym przeczytasz ten tekst. Serwer będzie działał do momentu, aż kolejna zmiana w kodzie źródłowym spowoduje awarię silnika, po czym pozostanie w stanie niedziałającym. Zaplanuj migrację i nie przenoś pliku konfiguracyjnego. Zacznij od szablonu SearXNG, a następnie dodaj ponownie tylko te elementy, które celowo zmieniłeś: nazwę instancji, safe_search, nazwy włączonych lub wyłączonych silników oraz domyślne ustawienia interfejsu. Nazwy silników i opcje uległy zmianie w forku, dlatego sprawdź każdą z nich w aktualnej dokumentacji, zamiast zakładać, że klucz nadal istnieje. Reguły Filtron oraz adres URL dla morty nie mają odpowiedników, ponieważ te zadania zostały przeniesione do wnętrza aplikacji.

Uruchom nową instancję na innym porcie, podczas gdy stara jest nadal aktywna. Migracja przebiegła pomyślnie, gdy strona główna zwraca kod 200, wyszukiwanie zwraca wyniki z więcej niż jednego silnika, a /stats/errors jest puste lub zawiera tylko zrozumiałe błędy. Następnie przekieruj ruch na reverse proxy i zatrzymaj starą usługę.

FAQ

Czy Searx jest martwy w 2026 roku?

Repozytorium nie jest zarchiwizowane, więc nic nie stoi na przeszkodzie, aby je sklonować, jednak projekt nie jest utrzymywany. Ostatni commit kodu pojawił się w kwietniu 2023 roku, a plik README zawiera informację: "Searx is no longer maintained". Sprawdź to samodzielnie za pomocą curl -s https://api.github.com/repos/searx/searx | jq -r '.pushed_at', a następnie przeczytaj ostatnie komunikaty commitów, ponieważ sama data wypchnięcia zmian może pochodzić z edycji dokumentacji. W przypadku wyszukiwarki metawyszukiwań brak utrzymania oznacza, że jakość wyników samoistnie spada, ponieważ każdy moduł wyszukiwarki zależy od zewnętrznej witryny, która stale się zmienia.

Czy nadal mogę zainstalować Searx przez apt lub pip?

Nie na obecnych systemach i nie w sposób użyteczny tam, gdzie jest to możliwe. Ubuntu ostatni raz spakowało searx w wersji 22.04 w wersji 1.0.0, więc sudo apt install searx w wersji 24.04 zwraca E: Unable to locate package searx. Debian dostarczył wersję 1.1.0 w Debian 12 i usunął ją z wersji testowej w październiku 2023 roku, więc Debian 13 nie posiada tego pakietu. PyPI nadal udostępnia wersję 0.17.0 z lipca 2020 roku, która jest starsza niż sam fork. Zamiast tego zainstaluj SearXNG.

Czy mój stary plik settings.yml z searx będzie działał w SearXNG?

Nie. Skopiuj wartości, a nie cały plik. SearXNG odczytuje /etc/searxng/settings.yml i oczekuje use_default_settings: true na początku, więc Twój plik działa jako nakładka na domyślne ustawienia dostarczone z oprogramowaniem. Stary plik searx to pełna konfiguracja z innymi nazwami kluczy, która nie zawiera limiter, bloku valkey ani listy formats. Zacznij od szablonu dostępnego pod utils/templates/etc/searxng/settings.yml i dodawaj swoje zmiany pojedynczo.

Dlaczego moja własna instancja SearXNG zwraca mniej wyników niż publiczna?

Niektóre wyszukiwarki są zawieszone. Gdy wyszukiwarka odpowiada stroną z CAPTCHA lub ograniczeniem częstotliwości zapytań (rate limit), SearXNG przestaje wysyłać do niej zapytania na określony czas, od 180 sekund w przypadku zwykłej odmowy do 1,296,000 sekund w przypadku CAPTCHA od Cloudflare. Strona z wynikami informuje o tym w sekcji "Messages from the search engines", a /stats/errors wyświetla listę błędów wraz z przyczynami. Adresy IP centrów danych są blokowane szybciej niż połączenia domowe, więc nowa instancja na VPS napotyka ten problem wcześnie.

Czy powinienem korzystać z publicznej instancji SearXNG, czy uruchomić własną?

Uruchom własną, jeśli chcesz mieć kontrolę nad kodem i logami, akceptując fakt, że zewnętrzne wyszukiwarki widzą wtedy jeden adres dla wszystkich Twoich zapytań. Korzystaj z publicznej instancji, jeśli mieszanie Twoich zapytań z zapytaniami innych osób jest dla Ciebie ważniejsze niż wiedza o tym, co jest logowane. Na publicznej instancji operator może widzieć treść zapytania, czas, Twój adres IP oraz User Agent, a także może zmienić kod w dowolnym momencie. Deklarowana polityka logowania nie może zostać zweryfikowana z zewnątrz.