Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения

вторник, 28 апреля 2026 г.

Установка Webmail клиента RoundCube в RoclyLinux 9

Устанавливаем Apache и MariaDB
# dnf install epel-release
# dnf install httpd php php-mysqlnd php-json php-curl php-zip php-gd php-xml php-mbstring php-intl php-pecl-mailparse php-ldap mariadb-server
# dnf install ImageMagick ImageMagick-devel php-pecl-imagick
# systemctl enable --now httpd
# systemctl enable --now mariadb


Выполняем инициирование MariaDB:
# mariadb-secure-installation
    Enter current password for root (enter for none): <Enter>
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] Y
New password: <вводим пароль> - <rootПароль>
Re-enter new password: <вводим пароль еще раз rootПароль>
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y


Создаем базу данных в MariaDB, необходимую для работы web-почтового клиента RoundCube
# mysql -u root -p
> CREATE DATABASE roundcubemail;
> CREATE USER 'roundcube'@'localhost' IDENTIFIED BY '<Пароль>';
> GRANT ALL PRIVILEGES ON roundcubemail.* TO 'roundcube'@'localhost';
> FLUSH PRIVILEGES;
> EXIT;

Устанавливаем RoundCube
# dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
# dnf install roundcubemail

Конфиги тут: /etc/roundcubemail/
Веб-файлы тут: /usr/share/roundcubemail/
Логи тут: /var/log/roundcubemail/
Данные тут: /var/lib/roundcubemail/

Заливаем структуру базы данных RoundCube:
# mysql -u root -p roundcubemail < /usr/share/roundcubemail/SQL/mysql.initial.sql

Задаем конфигурационый файл для RoundCube
# cp /etc/roundcubemail/config.inc.php.sample /etc/roundcubemail/config.inc.php
# nano /etc/roundcubemail/config.inc.php

1. 
Определяем учетные данные для доступа к базе данных MariaDB:
$config['db_dsnw'] = 'mysql://roundcube:<Пароль>@localhost/roundcubemail';
2.
Настройки IMAP сервера ($config['default_host'] = 'localhost';) меняем на следующий блок:
$config['default_host'] = 'ssl://mail.domain.ru'; 
$config['default_port'] = 993;
$config['imap_auth_type'] = 'LOGIN';
$config['imap_user'] = '%u';

3.
Настройки SNMP сервера ($config['smtp_server'] = 'localhost';) меняем на:
$config['smtp_server'] = 'tls://mail.domain.ru';
Остальное - по умолчанию
4.
Включение поддерждки LDAP
$config['ldap_public'] = array();
$config['ldap_public']['local_ldap'] = [
    'name'              => 'Справочник нашей компании',
    'hosts'             => ['<IPадрес>'],
    'port'              => 389,
    'user_specific'     => false,
    'base_dn'           => '',
    'bind_dn'           => '',
    'bind_pass'         => '',
    'ldap_version'      => 3,
    'scope'             => 'sub',
    'search_fields'     => ['mail', 'cn', 'displayName', 'sn', 'givenName'],
    'name_field'        => 'cn',
    'email_field'       => 'mail',
    'surname_field'     => 'sn',
    'firstname_field'   => 'givenName',
    'sort'              => 'cn',
    'filter'            => '(objectClass=*)',
    'fuzzy_search'      => true,
    'global_search'     => true,
    'sizelimit'         => 1000,
    'timelimit'         => 30,
];

$config['autocomplete_addressbooks'] = ['local_ldap'];
$config['address_book_type'] = 'ldap';

Устанавливаем права на файлы:
# chown -R apache:apache /etc/roundcubemail/
# chmod -R 755 /etc/roundcubemail/
# chown -R apache:apache /var/lib/roundcubemail/
# chown -R apache:apache /var/log/roundcubemail/
# chmod 775 /var/lib/roundcubemail/temp/
# chmod 775 /var/log/roundcubemail/

Настраиваем виртуальный хост Apache.
# nano /etc/httpd/conf.d/roundcubemail.conf
Меняем Require local на Require all granted в блоке <Directory /usr/share/roundcubemail/>
<Directory /usr/share/roundcubemail/>
   ...
        #Require local
        Require all granted
   ...
</Directory>

# systemctl restart httpd
Открываем возможность обращаться к Apache по сети:
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload

Теперь можно обратиться к почтовому клиенту:
http://<IPадрес>/roundcubemail/

Логин вводиться без домена.
После авторизации мы получим возможность отправлять или принимать письма через web-интерфейс. Имя пользователя по умолчанию будет в домене mail.domain.ru. Для исправления адреса электронной почты отправителя нужно зайти в настройки. Далее профиль. Выбрать email, изменить имя (удалить mail) в поле E-Mail.




понедельник, 19 мая 2025 г.

Установка Wordpress

Установка Apache
# dnf install httpd -y
# systemctl start httpd
# systemctl enable httpd

Установка базы данных MariaDB
# dnf install mariadb-server mariadb -y
# systemctl start mariadb
# systemctl enable mariadb
Создаем root пароль базы MariaDB:
# mysql_secure_installation

Устанавливаем php и модули необходимые для работы wordpress
# dnf install php php-mysqlnd php-fpm php-{bz2,mysqli,curl,gd,intl,common,mbstring,xml} -y
# systemctl restart httpd

Подключаемся к базе MariaDB. Создаем базу данных «wordpress» для WordPress и пользователя, который будет работать с базой (например, пользователь admin с паролем passwd123)
# mysql -u root -p
>CREATE DATABASE wordpress;
>CREATE USER 'admin'@'localhost' IDENTIFIED BY 'passwd123';
>GRANT ALL PRIVILEGES ON wordpress.* TO 'admin'@'localhost';
>FLUSH PRIVILEGES;

Скачиваем и распаковываем набор скриптов wordpress
# cd /usr/src/
# tar -xzvf latest.tar.gz
В директории /usr/src образуется директория /usr/src/wordpress
Перемещаем все файлы из /usr/src/wordpress в /var/www/html
# mv /usr/src/wordpress/* /var/www/html
Задаем права:
# chown -R apache:apache /var/www/html
# chmod -R 755 /var/www/html
Удаляем уже не нужные файлы и папки в /usr/src
# rm -f latest.tar.gz
# rmdir wordpress

Обращаемся к серверу http://<IP адрес>

Должна сработать переадресация на страницу стартовых скриптов wordpress http://<IP адрес>/wp-admin/setup-config.php
Увидим сообщение:

Нажимаем кнопку “Lets go!”. Далее необходимо заполнить информацию для доступа к базе данных:

Нажимаем “Submit”. В следующем окне, при необходимости можно изменить данные доступа вручную, которые пропишутся в файле «wp-config.php». Для продолжения нужно нажать “Run the installation”. В следующем окне так же нажать “Run the installation”


После того, как скрипты worpress создадут базу для работы, потребуется указать название сайта, и завести пользователя:

После нажатия кнопки “Install WordPress” произойдет автоматическое развертывание системы Worddpress. Завершение установки будет сопровождаться сообщением “Success!”

Теперь управлять сайтом можно так: http://<IP адрес>/wp-admin
Смотреть то, что отображается пользователю так: http://<IP адрес>


Настройка работы nginx в связке с php-fpm в Debian 12

Настройка возможности работы nginx с PHP файлами.

Работа nginx с PHP обеспечивается службой php-fpm.

Устанавливаем сервис php-fpm:
# install nginx php-fpm

Смотрим текущую версию php в системе
# php -v
PHP 8.2.28 (cli) (built: Mar 13 2025 18:21:38) (NTS)

В моем случае - это 8.2
Конфигурационный файл серввиса php-fpm: /etc/php/8.2/fpm/pool.d/www.conf
ini файл настроек PHP: /etc/php/8.2/fpm/php.ini
Заходим в конфигурацию php-fpm для версии 8.2:
# nano /etc/php/8.2/fpm/pool.d/www.conf
Здесь ищем директиву "listen", которая определяет, что будет прослушивать запущенный процесс php-fpm.
В нашей случае - указан сокет. Отлично, фиксируем путь к сокету
    listen = /run/php/php8.2-fpm.sock

Теперь находим конфигурационный файл nginx и для сервере, у которого необходимо включить PHP

# nano /etc/nginx/sites-enabled/<file>.conf
Добавляем конфигурацию для php в конец блока "server"
server {
        listen 80;
        listen 443 ssl;
...
        location ~ \.php$ {
           include snippets/fastcgi-php.conf;
           fastcgi_pass unix:/run/php/php8.2-fpm.sock;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include fastcgi_params;

        }
}


Рестартуем NGINX и PHP-FPM:
# systemctl restart nginx
# systemctl restart php8.2-fpm


Логи ошибок php-fpm будут тут /var/log/nginx/error.log




вторник, 29 октября 2024 г.

Обновление php с 8.0 до 8.3 в Rocky Linux 9.4 (Blue Onyx)

1. Добавление репозитариев
# dnf install epel-release -y
# dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm

2. Построение кеша
# dnf makecache -y

3. Сброс модуля php
# dnf module reset php

4. Просмотр репозитариев, из которых возможна установка php
# dnf module list php
Last metadata expiration check: 0:00:34 ago on Sat 26 Oct 2024 08:40:59 PM +04.
Rocky Linux 9 - AppStream
Name                    Stream                     Profiles                                     Summary
php                     8.1                        common [d], devel, minimal                   PHP scripting language
php                     8.2                        common [d], devel, minimal                   PHP scripting language
Remi's Modular repository for Enterprise Linux 9 - x86_64
Name                    Stream                     Profiles                                     Summary
php                     remi-7.4                   common [d], devel, minimal                   PHP scripting language
php                     remi-8.0                   common [d], devel, minimal                   PHP scripting language
php                     remi-8.1                   common [d], devel, minimal                   PHP scripting language
php                     remi-8.2                   common [d], devel, minimal                   PHP scripting language
php                     remi-8.3                   common [d], devel, minimal                   PHP scripting language
php                     remi-8.4                   common [d], devel, minimal                   PHP scripting language

5. Установка php 8.5
# dnf module -y install php:remi-8.3

6. Установка расширений php
# dnf -y install php php-{common,pear,cgi,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip,imap}

7. Перезагрузка apache
# systemctl restart httpd


понедельник, 21 ноября 2022 г.

Ошибка вставки данных в MariaDB Server 10.9.3 mysqli_sql_exception Data too long for column

В MariaDB Server версий больше 10.1.6 включены по умолчанию режимы, требующие четкого соблюдения типов вставляемых данных.
https://mariadb.com/kb/en/sql-mode/
Например, если вставляемые текстовые данные по объему больше, чем определено в типе поля, то будет возникать ошибка:
Fatal error: Uncaught mysqli_sql_exception: Data too long for column

Посмотреть, какие режимы установлены в текущей инсталляции можно так:
MariaDB [(none)]> SELECT @@SESSION.sql_mode
    -> ;
+-------------------------------------------------------------------------------------------+
| @@SESSION.sql_mode                                                                        |
+-------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------+


Режим STRICT_TRANS_TABLES - как раз отвечает за контроль того, что длинна строки вставляемых данных должна быть меньше определенной
в структуре таблицы значения. Можно отключить этот режим и тогда вставка данных будет происходить как в старых версиях - входная строка будет обрезаться до максимально возможного, определенного в структуре таблице.

Установку редима можно производить каждый раз при подключении к таблице, точно так же как мы устанавливаем режим кодировки:

$query="SET NAMES utf8";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
$query="SET sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);

воскресенье, 6 ноября 2022 г.

Установка и использование graphviz в RockyLinux 9

Установка graphviz
# yum install 'graphviz*'

Установка репозитария PHP
# cd /usr/src
# wget http://pear.php.net/go-pear.phar
# php go-pear.phar


Установка пакета php GraphViz
(https://pear.php.net/package/Image_GraphViz)
# /usr/bin/pear_old install Image_GraphViz

Теперь в коде PHP можно использовать:

require_once 'Image/GraphViz.php';
$gv = new Image_GraphViz();

И использовать свойства $gv для построения графиков

среда, 19 октября 2022 г.

Исправление ошибки в браузере: не установлено корректное значение атрибута «SameSite»

В новых браузерах при работах с cookies файлами необходимо использовать атрибут SameSite. Данный атрибут предназначен для защиты от подделки межсайтовых запросов (CSRF). С помощью этого атрибута можно запретить браузеру передавать cookies файлы на другие сервера при переходе по ссылкам.

Если на сервере данный атрибут не задается явно, то в браузере в консоли разработчика будем видеть ошибки:
Для куки «XXXXX» не установлено корректное значение атрибута «SameSite». Вскоре куки без атрибута «SameSite» или с некорректным значением этого атрибута будут рассматриваться как «Lax». Это означает, что куки больше не будут отправляться в сторонних контекстах. Если ваше приложение зависит от доступности этих кук в подобных контекстах, добавьте к ним атрибут «SameSite=None». Чтобы узнать больше об атрибуте «SameSite», прочитайте https://developer.mozilla.org/docs/Web/HTTP/Headers/Set-Cookie/SameSite
Пример:


Для решения данной проблемы необходимо заставить сервер устанавливать атрибут SameSite в файлы cookies.

1)    В настройках php это прописывается в директиве session.cookie_samesite фаайла php.ini.
# nano /etc/php.ini
; Add SameSite attribute to cookie to help mitigate Cross-Site Request Forgery (CSRF/XSRF)
; Current valid values are "Strict", "Lax" or "None". When using "None",
; make sure to include the quotes, as `none` is interpreted like `false` in ini files.
; https://tools.ietf.org/html/draft-west-first-party-cookies-07
session.cookie_samesite = Lax


2)    В коде php это прописывается так:
 Пример для php 8.1
setcookie('cookie-name', 'cookie-value',
 array('expires' => time() + 86400,
 'path' => '/',
'samesite' => 'Lax'));
 

Пример для php 5.4:
setcookie('cookie-name', 'cookie-value', 0, '/; samesite=Lax ');




Rocky Linux 9. Вывод ошибок PHP8 в web интерфейс

Для вывода ошибок php в web интерфейс нужно отредактировать php.ini
# nano /etc/php.ini
Устанавливаем следующие директивы в On
    display_errors = On
    display_startup_errors = On

Перезапускаем модуль php:
# systemctl restart php-fpm
Все.

Логи ошибок в консоли можно посмотреть тут:
# tail -f /var/log/php-fpm/www-error.log

понедельник, 17 октября 2022 г.

Rocky Linux 9. Установка MariaDB 10.9.3, Apache, PHP8.1, PhpMyAdmin 5.2.0

Установка MariaDB

Устанавливаем репозитарий MariaDB.
# curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash
Устанавливаем свежую стабильную версию MariaDB. На момент написания - это 10.9.3.
# yum install mariadb-server
Добавляем в автозапуск и запускаем сервис:
# systemctl enable mariadb.service
# systemctl start mariadb.service

Запускаем скрипт, инициализирующий удаление лишних тестовых баз и гостевых пользователей. Следующие ответы позволят задать root пароль для базы данных и позволить подключаться в базе с паролем root
# mariadb-secure-installation
    Switch to unix_socket authentication [Y/n] Y
    Change the root password? [Y/n] Y
    New password: <вводим пароль>
    Re-enter new password: <вводим пароль еще раз>
    Remove anonymous users? [Y/n] Y
    Disallow root login remotely? [Y/n] n
    Remove test database and access to it? [Y/n] Y
    Reload privilege tables now? [Y/n] Y


Открываем возможность доступа к Mariadb по сети:
# firewall-cmd --permanent --add-service=mysql
# firewall-cmd --reload


Установка Apache
# yum install httpd
# nano /etc/httpd/conf/httpd.conf

Имя сервера прописывается в директиве ServerName
ServerName serv.domain.ru:80
Добавляем сервер Apache в скрипт автозапуска и запускам сервис
# systemctl enable httpd.service
# systemctl start  httpd.service

Открываем порт 80 в файрволл:
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload

Проверяем работу Apache обратившись к серверу так: http://<IP-сервера>

Установка PHP 8.1.11
# dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
# dnf module reset php
# dnf module install php:remi-8.1
# dnf install php-gd php-odbc php-mysqlnd php-mysqli php-bcmath php-ctype php-json

Перезапускаем web-сервер
# systemctl restart httpd.service
Создаем файл для проверки работы PHP
# nano /var/www/html/info.php
вписываем туда
<?php phpinfo(); ?>
Теперь при запросе страницы Info.php (http://<IP-сервера>/info.php ) можно увидеть информацию о модуле PHP

Установка PHPMYADMIN.
# dnf install phpmyadmin
# nano /etc/httpd/conf.d/phpMyAdmin.conf

Добавляем Require all granted под Require local
<Directory /usr/share/phpMyAdmin/>
   AddDefaultCharset UTF-8
   Require local
   Require all granted
</Directory>

Перезапускаем сервер Apache
# systemctl restart httpd.service
Теперь к странице phpmyadmin можно обратиться так: http://<IP-сервера>/phpmyadmin

Для добавления настроек, включающих дополнительные возможности PHPMYADMIN выполняем следующее:
Создаем базу данных для служебной информации:
# mysql < /usr/share/phpMyAdmin/sql/create_tables.sql -u root -p
Раскомментируем дополнительные возможности phpmyadmin в конфигурационном файле config.inc.php:
# nano /etc/phpMyAdmin/config.inc.php
Раскомментируем стоки:
 // Это логин пользователя, который можно сменить
 $cfg['Servers'][$i]['controluser'] = 'pma';
 // Пароль по умолчанию pmapass, который нужно обязательно заменить
 $cfg['Servers'][$i]['controlpass'] = 'pmapass123';
 $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
 $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
 $cfg['Servers'][$i]['relation'] = 'pma__relation';
 $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
 $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
 $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
 $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
 $cfg['Servers'][$i]['history'] = 'pma__history';
 $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
 $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
 $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
 $cfg['Servers'][$i]['recent'] = 'pma__recent';
 $cfg['Servers'][$i]['favorite'] = 'pma__favorite';
 $cfg['Servers'][$i]['users'] = 'pma__users';
 $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
 $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
 $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
 $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
 $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
 $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';

Подключаемся к консоли mysql и создаем пользователя pma с правами на базу данных phpmyadmin:
# mysql -uroot -p
>GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY 'pmapass123';
>GRANT SELECT (
        Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
        Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
        File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
        Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
        Execute_priv, Repl_slave_priv, Repl_client_priv
        ) ON mysql.user TO 'pma'@'localhost';
>GRANT SELECT ON mysql.db TO 'pma'@'localhost';
>GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
        ON mysql.tables_priv TO 'pma'@'localhost';
>GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost';

После данных манипуляций нужно выйти и заново зайти на страницу http://<IP-сервера>/phpmyadmin. Теперь можно пользоваться дополнительными возможностями программы.

воскресенье, 5 июня 2022 г.

PHP. Переход от запросов с помощью mssql_query к запросам PDO.

В PHP есть устаревшие функции работы с MSSQL - mssql_connect и mssql_query. В один прекрасный момент они перестают работать. Выражается это так, что при выполнении директивы mssql_query скрипт выдает «Ошибка сегментирования» и программа останавливается. Причем в логах ничего дополнительно не пишется.
Для того, что бы и продолжать работать с MS SQL необходимо переписать скрипт на использование PDO.


Пример, того как было:
$link = mssql_connect('IP-АДРЕС', 'ЛОГИН', 'ПАРОЛЬ');
if (!$link || !mssql_select_db('БАЗА-ДАННЫХ', $link)) {
    die('Unable to connect or select database!');
}
$q = "СТРОКА ЗАПРОСА";
$resp = mssql_query($q);
while($row = mssql_fetch_assoc($resp)) {
        echo var_dump($row).PHP_EOL;
}


Пример того, как стало:
$db = new PDO('dblib:host=IP-АДРЕС;dbname=БАЗА-ДАННЫХ;charset=utf8', 'ЛОГИН', 'ПАРОЛЬ');
$q = "СТРОКА ЗАПРОСА";   
$result = $db->query($q);
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
    echo var_dump($row).PHP_EOL;
}


понедельник, 17 января 2022 г.

Установка MariaDB, Apache, PHP7 и PHPMYADMIN на Rocky Linux

1. Узнаем версию дистрибутива:
# cat /etc/*release
Rocky Linux release 8.5 (Green Obsidian)
NAME="Rocky Linux"
VERSION="8.5 (Green Obsidian)"

2.    Устанавливаем базовые пакеты:
# yum install nano wget git net-tools unzip telnet mtr
# yum -y install epel-release

3.    Выключаем SELINUX.
# nano /etc/sysconfig/selinux
Строка, которая не должна быть закомментирована
SELINUX=disabled
4.    Добавляем своего пользователя и добавляем его в sudo
# adduser  korolev
# passwd korolev
# usermod -aG wheel korolev

5.    Устанавливаем автоматическое обновление, касающееся безопасности системы
# nano /etc/dnf/automatic.conf
upgrade_type = security
download_updates = yes
apply_updates = yes

6.    Отключаем firewall
# systemctl disable firewalld
# systemctl stop firewalld

7.    Перезагружаемся:
# reboot

8.    Установка MariaDB.
# yum install mariadb
# yum install mariadb-server

Добавляем в автозапуск и запускаем сервис:
# systemctl enable mariadb.service
# systemctl start mysqld.service

    Задаем пароль root для сервера MySQL
# mysql_secure_installation
    Enter current password for root (enter for none): <просто нажимаем Enter>
    Set root password? [Y/n] Y
    New password: <вводим пароль>
    Re-enter new password: <вводим пароль еще раз>
    Remove anonymous users? [Y/n] Y
    Disallow root login remotely? [Y/n] Y
    Remove test database and access to it? [Y/n] Y
    Reload privilege tables now? [Y/n] Y


9.    Установка Web-сервера APACHE
# yum install httpd
Задание имени серверу
# nano /etc/httpd/conf/httpd.conf
Имя сервера прописывается в директиве ServerName
ServerName zabbix-n.svttk.ru:80
Добавляем сервер Apache в скрипт автозапуска и запускам сервис
# systemctl enable httpd.service
# systemctl start  httpd.service

Проверяем работу Apache обратившись к серверу через http и убеждаемся, что через браузер сервер отвечает (http://<IP-сервера>)
Логи у Apache будут в каталоге /etc/httpd/logs/ и /var/log/httpd/

10.    Устанавка PHP (7 версия)
# yum install php
# yum install php-gd php-odbc php-mysqlnd php-mysqli php-bcmath php-ctype php-mbstring php-json php-xml

Перезапускаем web-сервер
# systemctl restart httpd.service
Создаем файл для проверки работы PHP
# nano /var/www/html/info.php
вписываем туда
<?php phpinfo(); ?>
Теперь при запросе страницы Info.php (http://<IP-сервера>/info.php ) можно увидеть информацию о модуле PHP

11.    Установка PHPMYADMIN
# DATA="$(wget https://www.phpmyadmin.net/home_page/version.txt -q -O-)"
# URL="$(echo $DATA | cut -d ' ' -f 3)"
# VER="$(echo $DATA | cut -d ' ' -f 1)"
# curl -o phpMyAdmin-${VER}-all-languages.tar.gz https://files.phpmyadmin.net/phpMyAdmin/${VER}/phpMyAdmin-${VER}-all-languages.tar.gz

В текущую папку должен скачаться файл-архив с последней версией PhpMyAdmin
Например, phpMyAdmin-5.1.1-all-languages.tar.gz
Распаковываем архив
# tar xvf phpMyAdmin-5.1.1-all-languages.tar.gz
# rm phpMyAdmin-*.tar.gz

Перемещаем весь архив в папку /usr/share/phpmyadmin
# mv phpMyAdmin-*/ /usr/share/phpmyadmin
# chown -R apache:apache /usr/share/phpmyadmin/

Создаем директорию для временных файлов phpmyadmin
# mkdir /usr/share/phpmyadmin/tmp
# chmod 777 /usr/share/phpmyadmin/tmp

Создаем файл конфигурации из типового:
# cp /usr/share/phpmyadmin/config.sample.inc.php  /usr/share/phpmyadmin/config.inc.php
Редактируем файл конфигурации:
# nano /usr/share/phpmyadmin/config.inc.php
В переменную $cfg['blowfish_secret'] необходимо вписать 32 символа, которые будут использоваться для шифрования пароля в cookies. Например
$cfg['blowfish_secret'] = 'YTRE137dfgsbvqewdsca6eblfjhsgdye';
Создаем базу данных для phpmyadmin:
# mysql < /usr/share/phpmyadmin/sql/create_tables.sql -u root -p
Добавляем конфигурацию Apache для phpmyadmin
# nano /etc/httpd/conf.d/phpmyadmin.conf


Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin/>
   AddDefaultCharset UTF-8
   <IfModule mod_authz_core.c>
     <RequireAny>
      Require all granted
     </RequireAny>
   </IfModule>
</Directory>

Перезапускаем сервер Apache
# systemctl restart httpd.service
Теперь к странице phpmyadmin можно обратиться так:
http://<IP-сервера>/phpmyadmin

среда, 17 ноября 2021 г.

Установка расширения ssh2 для php7 в CentOS8

В CentOS8 по умолчанию устанавливается версия php – 7.2.
Данная версия языка php не содержит готового пакета расширения ssh2 в репозитариях CentOS8. Более того расширение не поддерживается официально для php7. В связи с этим нет возможности использовать директивы ssh2_connect, ssh2_exec, ssh2_scp_send в программах на php7.

Это ограничение можно обойти, установив расширение вручную.
1) Подготовим систему для сборки расширения ssh2
# yum install gcc php-devel libssh2 libssh2-devel

2) Скачиваем и собираем расширение
# cd /usr/src
# git clone https://github.com/php/pecl-networking-ssh2.git
# cd pecl-networking-ssh2
# phpize
# ./configure
# make

Сборка завершается сообщением:
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/src/pecl-networking-ssh2/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the 'LD_RUN_PATH' environment variable
     during linking
   - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

3) Устанавливаем собранный пакет
# make install
Результат:
Installing shared extensions:     /usr/lib64/php/modules/

4) Информацию о новом модуле нужно задать в директории /etc/php.d
Создаем файл и заносим в него информацию о расширении:
# touch /etc/php.d/40-ssh2.ini
# nano /etc/php.d/40-ssh2.ini

Вписываем туда:
extension=ssh2

5) Проверить результат можно командой:
# php -i |grep ssh2
Для применения настроек в apache, web-сервер нужно перезагрузить







суббота, 4 июля 2020 г.

Установка Apache 2.4, PHP7, SQLite3 в Windows 10

Apache 2.4, PHP7, SQLite3 на Windows 10

Apache

Apache скачиваем с сайта https://www.apachehaus.com/, например для 64 разрядной ОС нужно скачать файл: httpd-2.4.43-o111g-x64-vc15.zip. Создаем папку C:\Apache24 и распаковываем туда содержимое папки Apache24 из zip архива.
Запускаем командную строку и переходим в папку C:\Apache24\bin.
Запуск Apache выполняем так: C:\Apache24\bin>httpd.exe. При срабатывании Защитника Windows, предоставляем Apache доступ:
 
Пока мы не закрыли терминал, Apache будет работать. Увидеть приветственную страницу можно открыв в браузере адрес http://localhost/


PHP

PHP7 скачиваем с сайта https://windows.php.net/. Нам нужен архив с Thread Safe, например, файл php-7.4.7-Win32-vc15-x64.zip. Создаем папку C:\php7 и распаковываем туда содержимое zip архива.
Открываем файл C:\Apache24\conf\httpd.conf
После списка загружаемых модулей добавляем строки:
LoadModule php7_module "c:/php7/php7apache2_4.dll"
PHPIniDir "c:/php7"

В раздел <IfModule mime_module>….</IfModule> вставляем строки
    AddHandler application/x-httpd-php .php
    AddType application/x-httpd-php .php .html

В директории
<IfModule dir_module>…  </IfModule>
Меняем DirectoryIndex index.html на DirectoryIndex index.php index.html
Перезапускаем сервер Apache (CTRL+C, потом снова httpd.exe в командной строке).
Создаем файл phpinfo.php в каталоге C:\Apache24\htdocs\ с содержимым: <?php phpinfo(); ?>. Проверить отображение можно по ссылке: http://localhost/phpinfo.php:
 

SQLite

Специально устанавливать sqlite не нужно. PHP уже обладает модулем работы с этой базой данных.
Копируем файл C:\php7\php.ini-production в файл C:\php7\php.ini.
Для поддержки SQLite3 в файле php.ini нужно раскомментировать и модифицировать строки:
;extension=pdo_sqlite меняем на extension=c:\php7\ext\php_pdo_sqlite.dll
;extension=sqlite3 меняем на extension=c:\php7\ext\php_sqlite3.dll
Проверяем поддержку SQLite, создав в файл C:\Apache24\htdocs\sqlitetest.php с содержимым:
<?php
$dbname='base';
if(!class_exists('SQLite3')) die("SQLite 3 NOT supported.");
$base=new SQLite3($dbname, 0666);
echo "SQLite 3 supported.";
?>

Запускаем его в браузере:
http://localhost/sqlitetest.php
Должны получить:
 



воскресенье, 22 марта 2020 г.

Установка MySQL, Apache, PHP7 и PHPMYADMIN на CentOS 8

Установка MySQL, Apache, PHP7 и PHPMYADMIN на CentOS 8

1. Узнаем версию дистрибутива:
# cat /etc/*release
Для CentOS8 должно быть:
NAME="CentOS Linux"
VERSION="8 (Core)"
2. Устанавливаем базовые пакеты:
# yum install nano wget git
# yum -y install epel-release
3. Меняем имя сервера:
# hostnamectl set-hostname www.curator.xxx.ru
4. Выключаем SELINUX.
# nano /etc/sysconfig/selinux
Комментируем все, вставляем строку
SELINUX=disabled
Перезагружаемся:
# reboot

5. Установка MySQL.
# yum install mysql mysql-server
Добавляем в автозапуск и запускаем сервис:
# systemctl enable mysqld.service
# systemctl start mysqld.service
Задаем пароль root для сервера MySQL
# mysql_secure_installation
Сначала на вопрос о проверки надежности пароля отвечаем N.
Затем вводим пароль и его подтверждение. 
На остальные вопросы отвечаем ДА (y)

6. Установка Web-сервера APACHE
# yum install httpd
Задание имени серверу
# nano /etc/httpd/conf/httpd.conf
Имя сервера прописывается в директиве ServerName
ServerName www.curator.xxx.ru
Для того что бы сам сервер знал всегда свое имя, добавляем это имя в файл hosts
# nano /etc/hosts
Вписываем строку в конец:
127.0.0.1 www.curator.xxx.ru curator.xxx.ru
Добавляем сервер Apache в скрипт автозапуска и запускам сервис
# systemctl enable httpd.service
# systemctl start  httpd.service
Открываем 80 порт в Firewall
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --reload
Проверяем работу Apache обратившись к серверу через http и убеждаемся, что через браузер сервер отвечает (http://<IP-сервера>)
Логи у Apache будут в каталоге /etc/httpd/logs/

7. Устанавка PHP (7 версия)
# yum install php
# yum install php-gd php-ldap php-odbc php-mysqlnd 
Перезапускаем web-сервер
# systemctl restart httpd.service
Создаем файл для проверки работы PHP
# nano /var/www/html/info.php
вписываем туда
<?php phpinfo(); ?>
Теперь при запросе страницы Info.php (http://<IP-сервера>/info.php ) можно увидеть информацию о модуле PHP

8. Установка PHPMYADMIN
# yum install -y php-json php-mbstring
# DATA="$(wget https://www.phpmyadmin.net/home_page/version.txt -q -O-)"
# URL="$(echo $DATA | cut -d ' ' -f 3)"
# VER="$(echo $DATA | cut -d ' ' -f 1)"
# curl -o phpMyAdmin-${VER}-all-languages.tar.gz https://files.phpmyadmin.net/phpMyAdmin/${VER}/phpMyAdmin-${VER}-all-languages.tar.gz
В текущую папку должен скачаться файл-архив с последней версией PhpMyAdmin
Например, phpMyAdmin-5.0.2-all-languages.tar.gz
Распаковываем архив
# tar xvf phpMyAdmin-5.0.2-all-languages.tar.gz
Перемещаем весь архив в папку /usr/share/phpmyadmin
# rm phpMyAdmin-*.tar.gz
# mv phpMyAdmin-*/ /usr/share/phpmyadmin
# chown -R apache:apache /usr/share/phpmyadmin/
Создаем директорию для временных файлов phpmyadmin
# mkdir /usr/share/phpmyadmin/tmp
# chmod 777 /usr/share/phpmyadmin/tmp
Создаем файл конфигурации из типового:
# cp /usr/share/phpmyadmin/config.sample.inc.php  /usr/share/phpmyadmin/config.inc.php
Редактируем файл конфигурации:
# nano /usr/share/phpmyadmin/config.inc.php
В переменную $cfg['blowfish_secret'] необходимо вписать 32 символа, которые будут использоваться для шифрования пароля в cookies. Например
$cfg['blowfish_secret'] = 'YTRE137dfgsbvqewdsca6eblfjhsgdye';
Создаем базу данных для phpmyadmin:
# mysql < /usr/share/phpmyadmin/sql/create_tables.sql -u root -p
Добавляем конфигурацию Apache для phpmyadmin
# nano /etc/httpd/conf.d/phpmyadmin.conf
Содержимое файла:
Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin/>
   AddDefaultCharset UTF-8

   <IfModule mod_authz_core.c>
     # Apache 2.4
     <RequireAny> 
      Require all granted
     </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

Перезапускаем сервер Apache
# systemctl restart httpd.service
Теперь к странице phpmyadmin можно обратиться так:
http://<IP-сервера>/phpmyadmin



воскресенье, 23 февраля 2020 г.

Установка и использование REDIS (REmote DIctinary Service) в Cent OS7

Установка и использование REDIS (REmote DIctinary Service)  в Cent OS7

Установить EPEL репозитарий
# yum install epel-release
Установка базы  REDIS
# yum install redis
Запускаем сервис REDIS и включаем его в автозагрузку
# systemctl start redis.service
# systemctl enable redis

По умолчанию сервис REDIS запускается на порту 6379 и слушает только localhost.
У сервиса есть режим командной строки. Заходим в него для проверки и отправляем проверочную команду PING, на которую последует ответ PONG
# redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379>
Пример установки пары ключ – значение
127.0.0.1:6379> SET a 12345
OK
Получение значения по ключу:
127.0.0.1:6379> GET a
"12345"
Выход из командной строки - CTRL+D

Конфигурация сервера в файле /etc/redis.conf
По умолчанию сервер прослушивает только localhost. Это отражено в директиве:
bind 127.0.0.1

Логи в директории /var/log/redis/

Передавать команды в REDIS из внешних скриптов можно так:
# redis-cli set test:1:string "my binary safe string"
OK
# redis-cli get test:1:string
"my binary safe string"

Скрипт PHP для передачи параметров в базу:
<?php 
# https://github.com/nrk/predis
date_default_timezone_set('Etc/GMT-3');
require  "vendor/autoload.php"; 
$client = new Predis\Client([
    'scheme' => 'tcp',
    'host'   => '127.0.0.1',
    'port'   => 6379,
]);
$client->set('foo', 'bar');
$value = $client->get('foo');
echo $value."\n";
?>

Скрипт Python для работы с базой:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import redis
r = redis.StrictRedis(host='localhost', port=6379)
# Извлекаем одну строчку из очереди пока есть что извлекать
while(r.llen('logs')!=0):
   # Извлекаем одну строчку
   log_str = r.lpop('logs')

Удалить все записи из REDIS можно командой:
> FLUSHALL
Удалить из текущей базы все элементы:
>FLUSHDB
Узнать содержимое баз данных REDIS:
> info
Вот здесь (в самом конце вывода) информация о количестве ключах баз данных:
db0:keys=8442,expires=0,avg_ttl=0
db1:keys=8441,expires=0,avg_ttl=0
Показ всех элементов в очереди:

>LRANGE logs 0 999

воскресенье, 8 апреля 2018 г.

Установка и использование graphviz в CentOS7

Установка и  использование graphviz в CentOS7

1. Просмотр доступных пакетов graphviz
# yum list available 'graphviz*'

2. Установка всех пакетов graphviz
# yum install 'graphviz*'

3. Проверка работы системы graphviz
Создаем файл temp.dot 
# touch temp.dot
Помещаем в файл следующее:
digraph G{
  Один->Два->Три->Четыре->Пять->Шесть->Десять;
  Три->Десять;
  Четыре->Десять;
}
Конвертируем данные в граф с представлением в png
# dot -Tpng temp.dot -o temp.png
После ключа T указываем тип выходного файла
Получим файл png с изображением:

4. Установка связки php с GraphViz
# yum install php-pear-Image-GraphViz
# service httpd restart

5. Создадим файл  network.php с содержимым
<?php
require_once 'Image/GraphViz.php';

$gv = new Image_GraphViz();
$gv->addEdge(array('wake up'        => 'visit bathroom'));
$gv->addEdge(array('visit bathroom' => 'make coffee'));
$gv->image();
?>
При просмотре этого файла в браузере получим изображение



Основными объектами являются узлы («node») и ребра («edge»)
Пример описания узла и связей:
<?php

require_once 'Image/GraphViz.php';

$gv = new Image_GraphViz();

$gv->addNode(
    'Node1',
    array(
      'URL'   => 'http://yandex.su',
      'label' => 'Яндекс',
      'shape' => 'box3d',
      'color' => 'green',
      'style'=>'filled',
      'fillcolor'=>'lightgrey'
    )
  );

$gv->addEdge(array('Node1' => 'Node2'));
$gv->addEdge(array('Node2' => 'Node3'),  
array('color' => 'red',
'fontcolor'=>"blue",
'label'=>"ссылка на Google",
'URL'=>"http://www.google.com"

);
$gv->image();

?>

Результат:



Попытка вставить код php в имеющуюся отформатированную страницу приведет к ошибке
 
Это связано с тем, что код, который генерит GraphViz.php имеет первую строку 
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
При наличии xml-фрагмента браузер не допускает других символов перед <?xml.

Обойти это можно создав другую страницу, которая будет получать код основной с построенным графом.
Пример файла забирающего данные с другой страницы и выводящего дополнительные данные до и после графа:
<p>123</p>
<?php

date_default_timezone_set('Etc/GMT-3');

$url = "http://10.10.49.162/network.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$output = curl_exec($ch);

?>
<p>456</p>
Результат:

суббота, 28 октября 2017 г.

Поисковый движок SPHINX.

Поисковый движок SPHINX.

Установка движка в CentOS7

1. Скачиваем с сайта пакет RPM
http://sphinxsearch.com/downloads/release/
Я выбрал пакет RHEL/CentOS 7.x x86_64 RPM 2.2.11-release (6.2M)

2. Копируем пакет в папку /usr/src

3. В консоли переходим в папку с пакетом
# cd /usr/src/

4. Проводим установку sphinx
# yum install -y sphinx-2.2.11-1.rhel7.x86_64.rpm
Вместе с необходимым пакетом установятся так же postgresql-libs и  unixODBC

5. Конфигурационный файл службы - /etc/sphinx/sphinx.conf
Зарезервируем на всякий случай конфигурационный файл
# cp /etc/sphinx/sphinx.conf /etc/sphinx/sphinx.conf.default

Настройка сервиса sphinx для работы с базой MySQL и запуск сервиса

1. Для работы поиска с помощью sphinx сделаем тестовую базу данных MySQL, наполним ее тестовыми данными, проведем создание индекса:

Подключаемся к базе MySQL (MariaDB)
# mysql -u root –p
Создаем базу test
> CREATE DATABASE test;
Заливаем тестовые данные, которые присутствуют в /usr/share/doc/sphinx-2.2.11/example.sql 
> SOURCE /usr/share/doc/sphinx-2.2.11/example.sql;
Выходим из базы
> quit;
Тестовые данные представляют из себя таблицу с записями, содержащими текст. Упрощенно это записи:
( 1, 'test one', 'this is my test document number one. also checking search within phrases.' ),
( 2, 'test two', 'this is my test document number two' ),
( 3, 'another doc', 'this is another group' ),
( 4, 'doc number four', 'this is to test groups' )

2. Редактируем имеющийся конфигурационный файл. Он по умолчанию создан для работы с базой MySQL. Файл содержит несколько секции
source – раздел описывает источник данных
index – раздел описывает местоположение индекса и с каким источником будет работать индекс. Их может быть несколько. Один для испытаний я закомментировал
indexer – раздел описывает параметры работы с индексами
searchd – здесь описание демона sphinx
# nano /etc/sphinx/sphinx.conf
Содержимое тестового конфигурационного файла:
#
# Minimal Sphinx configuration sample (clean, simple, functional)
#

source src1
{
        type                    = mysql

        sql_host                = localhost
        sql_user                = root
        sql_pass                = **********
        sql_db                  = test
        sql_port                = 3306  
        sql_query               = \
           SELECT id, group_id, \
           UNIX_TIMESTAMP(date_added) AS date_added, \
           title, content \
           FROM documents

        sql_attr_uint           = group_id
        sql_attr_timestamp      = date_added
}


index test1
{
        source                  = src1
        path                    = /var/lib/sphinx/test1
}


indexer
{
        mem_limit               = 128M
}


searchd
{
        listen                  = 9312
        listen                  = 9306:mysql41
        log                     = /var/log/sphinx/searchd.log
        query_log               = /var/log/sphinx/query.log
        read_timeout            = 5
        max_children            = 30
        pid_file                = /var/run/sphinx/searchd.pid
        seamless_rotate         = 1
        preopen_indexes         = 1
        unlink_old              = 1
        workers                 = threads # for RT to work
        binlog_path             = /var/lib/sphinx/
}

3. Создадим индекс используя конфигурационный файл
# indexer –-all
Вывод будет следующий:
Sphinx 2.2.11-id64-release (95ae9a6)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinx/sphinx.conf'...
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.041 sec, 4682 bytes/sec, 97.04 docs/sec
total 4 reads, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg
total 12 writes, 0.000 sec, 0.1 kb/call avg, 0.0 msec/call avg

4. Запуск демона sphinx
# systemctl start searchd
Добавление в автозагрузку
# systemctl enable searchd
Проверка статуса:
# systemctl status searchd

5. Подключиться к серверу sphinx используя клиент MySQL
# mysql -h0 -P9306
Получим приглашение
MySQL [(none)]>
Проверка поиска по тестовой базе. Найдем фразу 'test document'
MySQL [(none)]> SELECT * FROM test1 WHERE MATCH('test document');
+------+----------+------------+
| id   | group_id | date_added |
+------+----------+------------+
|    1 |        1 | 1507959119 |
|    2 |        1 | 1507959119 |
+------+----------+------------+
2 rows in set (0.00 sec)
Проверка поиска по ключевым словам в тестовой базе
MySQL [(none)]> CALL KEYWORDS ('test one three', 'test1', 1);
+------+-----------+------------+------+------+
| qpos | tokenized | normalized | docs | hits |
+------+-----------+------------+------+------+
| 1    | test      | test       | 3    | 5    |
| 2    | one       | one        | 1    | 2    |
| 3    | three     | three      | 0    | 0    |
+------+-----------+------------+------+------+
3 rows in set (0.00 sec)
Видно, что индекс построился правильно. Поиск работает. Обращаясь к сервису, мы можем получить ID записи в базе.

Настройка Sphinx для работы с источником данных xml

1. Для того, чтобы сервер успешно создал индекс, необходимо подготовить правильную структуру данных. Пример структуры данных разместим в /mnt/base.xml
<?xml version="1.0" encoding="utf-8"?>
<sphinx:docset xmlns:sphinx="http://sphinxsearch.com/">

  <sphinx:schema>
    <sphinx:field name="name" attr="string" />
  </sphinx:schema>

  <sphinx:document id="800">
    <name>
    ip address
    </name>
  </sphinx:document>

  <sphinx:document id="801">
    <name>MAC address</name>
  </sphinx:document>

  <sphinx:document id="802">
    <name>get post html</name>
  </sphinx:document>

  <sphinx:document id="803">
    <name>Мой документ</name>
  </sphinx:document>

</sphinx:docset>

2. Настройка конфигурации для парсинга xml документа будет такой:
# nano /etc/sphinx/sphinx.conf
Раздел source:
source basexml
{
    type                 = xmlpipe2
    xmlpipe_command      = /usr/bin/cat /mnt/base.xml
}
Главное здесь – это команда, которая будет читать данные и выводить в стандартный вывод linux. В нашем случае – это /usr/bin/cat /mnt/base.xml
Раздел index
index knowledgebase
{
    source       = knowledgebase
    path         = /var/lib/sphinx/knowledgebase
    # Минимальная длина слова
    min_word_len = 2
    min_prefix_len = 3
    html_strip = 1
    # Позволяет использовать звездочки в запросах, к примеру
    # по запросу *пр* будут найдены проспект, привет и пр.
    enable_star = 1
    # Автоматически расширяет поисковый запрос до трех запросов
    # running -> ( running | *running* | =running )
    expand_keywords = 1
    index_exact_words = 1
    morphology = stem_enru
}

3. Перезапуск процесса построения индексов выполняет так
# indexer --all --rotate
Sphinx 2.2.11-id64-release (95ae9a6)
Copyright (c) 2001-2016, Andrew Aksyonoff
Copyright (c) 2008-2016, Sphinx Technologies Inc (http://sphinxsearch.com)
using config file '/etc/sphinx/sphinx.conf'...
indexing index 'basexml'...
collected 3 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 3 docs, 38 bytes
total 0.005 sec, 7165 bytes/sec, 565.71 docs/sec
indexing index 'test1'...
collected 4 docs, 0.0 MB
sorted 0.0 Mhits, 100.0% done
total 4 docs, 193 bytes
total 0.003 sec, 57134 bytes/sec, 1184.13 docs/sec
total 13 reads, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
total 24 writes, 0.000 sec, 0.0 kb/call avg, 0.0 msec/call avg
rotating indices: successfully sent SIGHUP to searchd (pid=2372).

4. Поиск по индексу basexml слова ‘post’ выполняется так же:
# mysql -h0 -P9306
MySQL [(none)]> SELECT * FROM basexml WHERE MATCH('post');
+------+---------------+
| id   | name          |
+------+---------------+
|  802 | get post html |
+------+---------------+
1 row in set (0.00 sec)

5. Для того что бы сделать периодическую ротацию индексов, в cron помещаем задание, которое будет выполняться к примеру дву раза в день:
/usr/bin/indexer --rotate --config /etc/sphinx/sphinx.conf --all > /dev/null

Использование PHP для работы с сервером Sphinx.

Для работы в PHP с сервером sphinx можно использовать два подхода:
1) Sphinx API 
2) SphinxQL
Будем использовать второй способ, как наиболее простой. Этот способ позволяет обращаться к серверу через клиент MySQL и работать с SQL подобным языком запросов. В PHP необходимо использовать PDO для подключения к серверу.
Пример кода:
$db = new PDO('mysql:host=127.0.0.1;port=9306;charset=utf8', '', '');
$q = "SELECT id FROM knowledgebase WHERE MATCH('".$what_sphinx."');";
$stmt = $db->query($q);
if($stmt->rowCount() > 0) {
   foreach ($stmt->fetchAll() as $row) {
        $arr_sphinx_rez[] = $row['id'];
   }
}
В переменной $what_sphinx можно писать просто слово, так и использовать выражения OR (|) или AND (&)