Sphinx и его настройка

Порядок настройки Sphinx в проекте, на примере установки Sphinx 3.7.1 в операционной системе Rocky Linux 10.

В примерах проект расположен в /var/www/example и работает от пользователя example, как в руководстве по установке. В других операционных системах пути могут отличаться.

  1. Установите Sphinx на сервере.

    Минимально рекомендуемая версия 3.4.1+, в этом руководстве устанавливается 3.7.1.

    Индексирование и работа демона searchd осуществляются от пользователя sphinx. Он добавляется в группу проекта, чтобы индексатор мог записывать индексные файлы проекта:

    groupadd sphinx
    useradd -r -g sphinx -G example -d /var/lib/sphinx -s /sbin/nologin sphinx
    
    cd /tmp
    wget https://sphinxsearch.com/files/sphinx-3.7.1-da9f8a4-linux-amd64.tar.gz
    tar xzf sphinx-3.7.1-da9f8a4-linux-amd64.tar.gz
    cp sphinx-3.7.1/bin/* /usr/bin/
    
    mkdir -p /etc/sphinx /var/lib/sphinx /var/log/sphinx
    chown sphinx:sphinx /var/lib/sphinx /var/log/sphinx
    
    mkdir -p /var/www/example/files/sphinx
    chown example:example /var/www/example/files/sphinx
    chmod 775 /var/www/example/files/sphinx
    

    На сервере с ARM используйте архив linux-aarch64.

  2. Параметры подключения указываются в файле .env проекта:

    SPHINX_ENABLED=1
    SPHINX_HOST=127.0.0.1
    SPHINX_PORT=9306
    SPHINX_VERSION=3.7.1
    

    SPHINX_VERSION должна совпадать с установленной версией Sphinx. Настройки, которых нет в .env, редактируются в блоке sphinx файла /config/sys.php.

    Индексатор Sphinx подключается к базе данных с клиентской библиотекой, которая не поддерживает caching_sha2_password, поэтому пользователь базы данных проекта должен использовать mysql_native_password (см. База данных).

  3. Выполните консольную команду для формирования актуального файла конфигурации Sphinx.

    cd /var/www/example/public_html
    sudo -u example php index.php bff=sphinx
    

    После чего будет сформирован актуальный для вашего проекта файл конфигурации /config/sphinx.conf

    При изменении настроек подключения к базе данных данную команду необходимо выполнять повторно.

  4. Скопируйте файл конфигурации /config/sphinx.conf.global в системный файл конфигурации Sphinx /etc/sphinx/sphinx.conf

    cp /var/www/example/config/sphinx.conf.global /etc/sphinx/sphinx.conf
    chmod 755 /etc/sphinx/sphinx.conf
    

    Оставьте в данном файле в блоке files одну строку с путем к файлу /config/sphinx.conf вашего проекта:

    files=(
    "/var/www/example/config/sphinx.conf"
    )
    

    Этот файл — скрипт: Sphinx выполняет его и читает вывод как конфигурацию. Это позволяет одному экземпляру Sphinx обслуживать несколько проектов.

  5. Проверьте корректность индексации, выполнив команду (она должна завершиться без ошибок):

    sudo -u sphinx indexer --config /etc/sphinx/sphinx.conf --all
    
  6. Выполните запуск службы searchd, убедитесь что данная служба будет автоматически запускаться после перезагрузки сервера.

    Создайте systemd-сервис /etc/systemd/system/searchd.service:

    [Unit]
    Description=Sphinx search engine (searchd)
    After=network.target
    
    [Service]
    Type=forking
    PIDFile=/var/run/sphinx/searchd.pid
    User=sphinx
    Group=sphinx
    RuntimeDirectory=sphinx
    ExecStart=/usr/bin/searchd --config /etc/sphinx/sphinx.conf
    Restart=always
    RestartSec=30
    
    [Install]
    WantedBy=multi-user.target
    
    systemctl daemon-reload
    systemctl enable --now searchd
    
  7. Скопируйте скрипт для индексирования /config/sphinx_rotate.sh в /etc/sphinx/sphinx_rotate.sh и измените права, разрешив выполнение.

    cp /var/www/example/config/sphinx_rotate.sh /etc/sphinx/
    chown sphinx:sphinx /etc/sphinx/sphinx_rotate.sh
    chmod 755 /etc/sphinx/sphinx_rotate.sh
    

    В процессе работы скрипт может удалять файлы в директории /var/www/example/files/sphinx. Убедитесь, что у пользователя sphinx есть права на запись в эту директорию.

  8. Настройте запуск cron-задачи для индексирования каждые 5 минут от пользователя sphinx (crontab -u sphinx -e):

    */5 * * * * /etc/sphinx/sphinx_rotate.sh /var/www/example
    
  9. Включите использование Sphinx в соответствующих разделах “Настройки сайта / Системные настройки”. Для объявлений это также можно сделать из консоли:

    cd /var/www/example/public_html
    sudo -u example php index.php bff=config key=listings.search.engine value=sphinx