123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- .. _favicons:
- ========
- Favicons
- ========
- .. sidebar:: warning
- Don't activate the favicons before reading the documentation.
- .. contents::
- :depth: 2
- :local:
- :backlinks: entry
- Activating the favicons in SearXNG is very easy, but this **generates a
- significantly higher load** in the client/server communication and increases
- resources needed on the server.
- To mitigate these disadvantages, various methods have been implemented,
- including a *cache*. The cache must be parameterized according to your own
- requirements and maintained regularly.
- To activate favicons in SearXNG's result list, set a default
- ``favicon_resolver`` in the :ref:`search <settings search>` settings:
- .. code:: yaml
- search:
- favicon_resolver: "duckduckgo"
- By default and without any extensions, SearXNG serves these resolvers:
- - ``duckduckgo``
- - ``allesedv``
- - ``google``
- - ``yandex``
- With the above setting favicons are displayed, the user has the option to
- deactivate this feature in his settings. If the user is to have the option of
- selecting from several *resolvers*, a further setting is required / but this
- setting will be discussed :ref:`later <register resolvers>` in this article,
- first we have to setup the favicons cache.
- Infrastructure
- ==============
- The infrastructure for providing the favicons essentially consists of three
- parts:
- - :py:obj:`Favicons-Proxy <.favicons.proxy>` (aka *proxy*)
- - :py:obj:`Favicons-Resolvers <.favicons.resolvers>` (aka *resolver*)
- - :py:obj:`Favicons-Cache <.favicons.cache>` (aka *cache*)
- To protect the privacy of users, the favicons are provided via a *proxy*. This
- *proxy* is automatically activated with the above activation of a *resolver*.
- Additional requests are required to provide the favicons: firstly, the *proxy*
- must process the incoming requests and secondly, the *resolver* must make
- outgoing requests to obtain the favicons from external sources.
- A *cache* has been developed to massively reduce both, incoming and outgoing
- requests. This *cache* is also activated automatically with the above
- activation of a *resolver*. In its defaults, however, the *cache* is minimal
- and not well suitable for a production environment!
- .. _favicon cache setup:
- Setting up the cache
- ====================
- To parameterize the *cache* and more settings of the favicons infrastructure, a
- TOML_ configuration is created in the file ``/etc/searxng/favicons.toml``.
- .. code:: toml
- [favicons]
- cfg_schema = 1 # config's schema version no.
- [favicons.cache]
- db_url = "/var/cache/searxng/faviconcache.db" # default: "/tmp/faviconcache.db"
- LIMIT_TOTAL_BYTES = 2147483648 # 2 GB / default: 50 MB
- # HOLD_TIME = 5184000 # 60 days / default: 30 days
- # BLOB_MAX_BYTES = 40960 # 40 KB / default 20 KB
- # MAINTENANCE_MODE = "off" # default: "auto"
- # MAINTENANCE_PERIOD = 600 # 10min / default: 1h
- :py:obj:`cfg_schema <.FaviconConfig.cfg_schema>`:
- Is required to trigger any processes required for future upgrades / don't
- change it.
- :py:obj:`cache.db_url <.FaviconCacheConfig.db_url>`:
- The path to the (SQLite_) database file. The default path is in the `/tmp`_
- folder, which is deleted on every reboot and is therefore unsuitable for a
- production environment. The FHS_ provides the folder for the
- application cache
- The FHS_ provides the folder `/var/cache`_ for the cache of applications, so a
- suitable storage location of SearXNG's caches is folder ``/var/cache/searxng``.
- In container systems, a volume should be mounted for this folder and in a
- standard installation (compare :ref:`create searxng user`), the folder must be
- created and the user under which the SearXNG process is running must be given
- write permission to this folder.
- .. code:: bash
- $ sudo mkdir /var/cache/searxng
- $ sudo chown root:searxng /var/cache/searxng/
- $ sudo chmod g+w /var/cache/searxng/
- :py:obj:`cache.LIMIT_TOTAL_BYTES <.FaviconCacheConfig.LIMIT_TOTAL_BYTES>`:
- Maximum of bytes stored in the cache of all blobs. The limit is only reached
- at each maintenance interval after which the oldest BLOBs are deleted; the
- limit is exceeded during the maintenance period.
- .. attention::
- If the maintenance period is too long or maintenance is switched
- off completely, the cache grows uncontrollably.
- SearXNG hosters can change other parameters of the cache as required:
- - :py:obj:`cache.HOLD_TIME <.FaviconCacheConfig.HOLD_TIME>`
- - :py:obj:`cache.BLOB_MAX_BYTES <.FaviconCacheConfig.BLOB_MAX_BYTES>`
- Maintenance of the cache
- ------------------------
- Regular maintenance of the cache is required! By default, regular maintenance
- is triggered automatically as part of the client requests:
- - :py:obj:`cache.MAINTENANCE_MODE <.FaviconCacheConfig.MAINTENANCE_MODE>` (default ``auto``)
- - :py:obj:`cache.MAINTENANCE_PERIOD <.FaviconCacheConfig.MAINTENANCE_PERIOD>` (default ``6000`` / 1h)
- As an alternative to maintenance as part of the client request process, it is
- also possible to carry out maintenance using an external process. For example,
- by creating a :man:`crontab` entry for maintenance:
- .. code:: bash
- $ python -m searx.favicons cache maintenance
- The following command can be used to display the state of the cache:
- .. code:: bash
- $ python -m searx.favicons cache state
- .. _favicon proxy setup:
- Proxy configuration
- ===================
- Most of the options of the :py:obj:`Favicons-Proxy <.favicons.proxy>` are
- already set sensibly with settings from the :ref:`settings.yml <searxng
- settings.yml>` and should not normally be adjusted.
- .. code:: toml
- [favicons.proxy]
- max_age = 5184000 # 60 days / default: 7 days (604800 sec)
- :py:obj:`max_age <.FaviconProxyConfig.max_age>`:
- The `HTTP Cache-Control max-age`_ response directive indicates that the
- response remains fresh until N seconds after the response is generated. This
- setting therefore determines how long a favicon remains in the client's cache.
- As a rule, in the favicons infrastructure of SearXNG's this setting only
- affects favicons whose byte size exceeds :ref:`BLOB_MAX_BYTES <favicon cache
- setup>` (the other favicons that are already in the cache are embedded as
- `data URL`_ in the :py:obj:`generated HTML <.favicons.proxy.favicon_url>`,
- which can greatly reduce the number of additional requests).
- .. _register resolvers:
- Register resolvers
- ------------------
- A :py:obj:`resolver <.favicon.resolvers>` is a function that obtains the favicon
- from an external source. The resolver functions available to the user are
- registered with their fully qualified name (FQN_) in a ``resolver_map``.
- If no ``resolver_map`` is defined in the ``favicon.toml``, the favicon
- infrastructure of SearXNG generates this ``resolver_map`` automatically
- depending on the ``settings.yml``. SearXNG would automatically generate the
- following TOML configuration from the following YAML configuration:
- .. code:: yaml
- search:
- favicon_resolver: "duckduckgo"
- .. code:: toml
- [favicons.proxy.resolver_map]
- "duckduckgo" = "searx.favicons.resolvers.duckduckgo"
- If this automatism is not desired, then (and only then) a separate
- ``resolver_map`` must be created. For example, to give the user two resolvers to
- choose from, the following configuration could be used:
- .. code:: toml
- [favicons.proxy.resolver_map]
- "duckduckgo" = "searx.favicons.resolvers.duckduckgo"
- "allesedv" = "searx.favicons.resolvers.allesedv"
- # "google" = "searx.favicons.resolvers.google"
- # "yandex" = "searx.favicons.resolvers.yandex"
- .. note::
- With each resolver, the resource requirement increases significantly.
- The number of resolvers increases:
- - the number of incoming/outgoing requests and
- - the number of favicons to be stored in the cache.
- In the following we list the resolvers available in the core of SearXNG, but via
- the FQN_ it is also possible to implement your own resolvers and integrate them
- into the *proxy*:
- - :py:obj:`searx.favicons.resolvers.duckduckgo`
- - :py:obj:`searx.favicons.resolvers.allesedv`
- - :py:obj:`searx.favicons.resolvers.google`
- - :py:obj:`searx.favicons.resolvers.yandex`
- .. _SQLite:
- https://www.sqlite.org/
- .. _FHS:
- https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html
- .. _`/var/cache`:
- https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch05s05.html
- .. _`/tmp`:
- https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch03s18.html
- .. _TOML:
- https://toml.io/en/
- .. _HTTP Cache-Control max-age:
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#response_directives
- .. _data URL:
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs
- .. _FQN: https://en.wikipedia.org/wiki/Fully_qualified_name
|