====== Bitrix Enviroment и CentOS 6 ====== Итак, имеем чистую установленную CentOS 6 Обновляем систему, подключаем репозиторий EPEL, ставим минимально необходимый набор ПО: # yum update # yum install epel-release # yum install mc bash-completion wget Создаем пользователя с полными правами: # useradd -m myadmin # passwd myadmin # vi /etc/sudoers и добавляем строку чтобы получилось root ALL=(ALL) ALL myadmin ALL=(ALL) ALL ===== Установка при помощи Bitrix Enviroment ===== Для CentOS 6 есть удобная штука Bitrix Enviroment - скрипт, который разворачивает весь набор ПО для Битрикса. # cd /root # mkdir bitrix # cd bitrix # wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh # chmod +x bitrix-env.sh # ./bitrix-env.sh После запуска необходимо подождать какое-то время пока все требуемое не будет загружено и установлено. ===== Дополнительная настройка ===== У Bitrix Enviroment есть одно неудобство: все настроено для работы с 1 сайтом, а если на сервере необходимо развернуть несколько инсталляций Битрикса и иных CMS - необходимо поработать руками. ===== Установка Apache mod_ruid2 ===== Необходимо для работы каждого виртуального хоста под своими учетными данными Ставим: # yum install mod_ruid2 Необходимо подключить данный модуль, например скопировав его: # cp /etc/httpd/conf.d/mod_ruid2.conf /etc/httpd/bx/conf/ В настройках виртуального хоста добавить строчку: ... RUidGid myuser mygroup ... В файле mod_ruid2.conf можно найти полное описание директив и настроек. Перезапускаем httpd, проверяем все ли работает - для этого создаем файл ruid2.php и открываем его в браузере Должна открыться страничка с примерно такимответом: uid=1002(myuser) gid=1000(mygroup) groups=1000(mygroup),33(bitrix) ==== Установка Apache MPM-ITK (опционально) ==== Необходимо для работы каждого виртуального хоста под своими учетными данными Apache mpm-itk значительно медленнее prefork и event, поэтому на высокую оценку Битрикса рассчитывать не стоит (в меню Настройки -> Производительность -> Панель производительности плохие показатели будут в подсистемах "Среднее время отклика", "Файловая система" и как следствие "Конфигурация"). Лучше использовать вышеописанный mod_ruid2 # yum install httpd-itk.x86_64 Запускаем Apache в режиме mpm-itk: добавляем в /etc/sysconfig/httpd строку HTTPD=/usr/sbin/httpd.itk Правим настройки PHP: добавляем в файлы /etc/httpd/bx/conf/php.conf и /etc/httpd/conf.d/php.conf строки LoadModule php5_module modules/libphp5.so Добавляем в файл /etc/httpd/conf/httpd.conf строки (кол-во запускаемых серверов и обслуживаемых клиентов зависит от конкретного сервера, необходимо подбирать самостоятельно): StartServers 1 MinSpareServers 1 MaxSpareServers 20 ServerLimit 50 MaxClients 100 MaxRequestsPerChild 4000 ==== Запрещаем Apache сообщать свою версию ==== В файле /etc/httpd/conf/httpd.conf заменяем строку ServerTokens OS на ServerTokens Prod ==== Настраиваем nginx ==== Необходимо удостовериться что у пользователя под которым работает nginx есть права на чтение папок www В файле /etc/nginx/nginx.conf настраиваем: Корректируем число процессов под свою систему: worker_processes 2; Скрываем версию: server_tokens off; ===== Допиливания напильником настроек Битрикса ===== ==== Fatal error: Call to undefined function mysqli_init() in /home/MYSITE/www/bitrix/modules/main/lib/db/mysqliconnection.php on line 48 ==== Необходимо включить расширение PHP для работы с MySQL - оно называется mysqli. Опять же - если его включить ДО восстановления сайта из резервной копии то на третьем шагу восстановления (а именно базы данных) - получим симпатишный белый экран. # cd /etc/php.d # mv 30-mysql.ini 30-mysql.ini.disabled # cp 30-mysqli.ini.disabled 30-mysqli.ini # service httpd restart Альтернативный вариант заключается в отключении использования mysqli Битриксом: в файле bitrix/php_interface/dbconn.php исправляем строку define("BX_USE_MYSQLI", true); на define("BX_USE_MYSQLI", false); И в файле bitrix/.settings.php поменять 'className' => '\\Bitrix\\Main\\DB\\MysqliConnection' на 'className' => '\\Bitrix\\Main\\DB\\MysqlConnection' чтобы получилось .... 'connections' => array ( 'value' => array ( 'default' => array ( 'className' => '\\Bitrix\\Main\\DB\\MysqlConnection', .... ==== Работа с сокетами Ошибка! Не работает ==== Добавляем в /etc/hosts запись 127.0.0.1 mydomain.ru ==== Размер стека и pcre.recursion_limit Замечание. Возможны проблемы в работе с длинными строками из-за системных ограничений ==== В файле /etc/php.d/bitrixenv.ini меняем pcre.recursion_limit = 14000 на pcre.recursion_limit = 100000 В скрипте запуска сервера HTTP Apache /etc/rc.d/init.d/httpd изменить функцию "start()", добавив в нее одну строку (ulimit -s unlimited): start() { echo -n $"Starting $prog: " ulimit -s unlimited LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL } и перезапускаем httpd # service httpd restart === Решение для CentOS 7 === Отсюда: http://host-consult.ru/pcre-recursion_limit-bitrix-centos7/ Создаем папку для дополнительного конфигурационного файла сервиса httpd: # mkdir /etc/systemd/system/httpd.service.d Внутри создаем файл, например recursion_limit.conf и в него пишем: [Service] LimitSTACK=infinity Перегружаем демона и сервис: # systemctl daemon-reload # systemctl restart httpd Существенное замечание Снять ограничение на лимит стека, это рекомендация Битрикс. Скажем прямо не самая удачная, т.к. вы можете решив одну проблему заполучить проблему с постоянной нехваткой ОЗУ. И apache будет падать уже по этой причине. Поэтому лучше подобрать верхнее граничное решение, которое будет устраивать Битрикс. Вычислить его достаточно просто: Обычно кэш равен 8 Мбайт, убедимся: # ulimit -s 8192 Соответственно, нам нужно немного больше, пусть это будет 9 Мбайт: 1024*1024*9 = 9 437 184 байт пишем в наш файл: [Service] LimitSTACK=9437184 ==== Отправка почты Ошибка! Не работает ==== В файле /etc/php.d/bitrixenv.ini меняем sendmail_path = msmtp -t -i на sendmail_path = sendmail -t -i ==== Время на БД и веб-сервере Ошибка! Время отличается на 14400 секунд ==== В файле /etc/php.d/bitrixenv.ini меняем date.timezone = Europe/Moscow на свою, например date.timezone = Asia/Krasnoyarsk ==== Сохранение сессии без UserAgent Ошибка! Не работает ==== Есть две причины для данной ошибки: === Хост не может разыменовать свое доменное имя === Добавляем в файл /etc/hosts строку 127.0.0.1 mydomain.ru === Веб-сервер не может сохранить файлы сессии === Путь в файловой системе куда сохраняются сессии прописан в файле /etc/php.d/bitrixenv.ini и по умолчанию там прописано следующее значение: session.save_path = "/tmp/php_sessions/www" Таким образом нужно удостовериться что данная папка существует, внутри нее так же есть еще две папки: www и www_ext и права установлены следующим образом: # cd /tmp # ls -l drwxrwx--- 4 bitrix bitrix 4096 Sep 14 13:44 php_sessions # cd php_sessions # ls -l drwxrwx--- 2 bitrix bitrix 4096 Sep 14 13:44 ext_www drwxrwx--- 2 bitrix bitrix 4096 Sep 14 13:45 www ==== Порты для работы Bitrix ==== * 25 bitrix smtp сервер * 80 http * 443 https * 5222 bitrix xmpp сервер * 5223 bitrix xmpp сервер (ssl) * 8090 ntlm авторизация * 8891 ntlm авторизация (ssl) firewall-cmd --zone=public --add-port=25/tcp --permanent firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=443/tcp --permanent firewall-cmd --zone=public --add-port=5222/tcp --permanent firewall-cmd --zone=public --add-port=5223/tcp --permanent firewall-cmd --zone=public --add-port=8890/tcp --permanent firewall-cmd --zone=public --add-port=8891/tcp --permanent firewall-cmd --zone=public --add-port=8893/tcp --permanent firewall-cmd --zone=public --add-port=8894/tcp --permanent firewall-cmd --reload {{tag>битрикс установка развертывание bitrix_enviroment httpd mpm-itk nginx mysql}}