Sphinx и его настройка
Порядок настройки Sphinx в проекте, на примере установки Sphinx 3.7.1 в операционной системе Rocky Linux 10.
В примерах проект расположен в /var/www/example и работает от пользователя example, как в руководстве по установке. В других операционных системах пути могут отличаться.
-
Установите 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. -
Параметры подключения указываются в файле
.envпроекта:SPHINX_ENABLED=1 SPHINX_HOST=127.0.0.1 SPHINX_PORT=9306 SPHINX_VERSION=3.7.1SPHINX_VERSIONдолжна совпадать с установленной версией Sphinx. Настройки, которых нет в.env, редактируются в блокеsphinxфайла/config/sys.php.Индексатор Sphinx подключается к базе данных с клиентской библиотекой, которая не поддерживает
caching_sha2_password, поэтому пользователь базы данных проекта должен использоватьmysql_native_password(см. База данных). -
Выполните консольную команду для формирования актуального файла конфигурации Sphinx.
cd /var/www/example/public_html sudo -u example php index.php bff=sphinxПосле чего будет сформирован актуальный для вашего проекта файл конфигурации /config/sphinx.conf
При изменении настроек подключения к базе данных данную команду необходимо выполнять повторно.
-
Скопируйте файл конфигурации /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 обслуживать несколько проектов.
-
Проверьте корректность индексации, выполнив команду (она должна завершиться без ошибок):
sudo -u sphinx indexer --config /etc/sphinx/sphinx.conf --all -
Выполните запуск службы 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.targetsystemctl daemon-reload systemctl enable --now searchd -
Скопируйте скрипт для индексирования /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 есть права на запись в эту директорию. -
Настройте запуск cron-задачи для индексирования каждые 5 минут от пользователя sphinx (
crontab -u sphinx -e):*/5 * * * * /etc/sphinx/sphinx_rotate.sh /var/www/example -
Включите использование Sphinx в соответствующих разделах “Настройки сайта / Системные настройки”. Для объявлений это также можно сделать из консоли:
cd /var/www/example/public_html sudo -u example php index.php bff=config key=listings.search.engine value=sphinx