====== 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}}