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/
В настройках виртуального хоста добавить строчку:
<VirtualHost 127.0.0.1:8888> ... RUidGid myuser mygroup ...
В файле mod_ruid2.conf можно найти полное описание директив и настроек.
Перезапускаем httpd, проверяем все ли работает - для этого создаем файл ruid2.php и открываем его в браузере
<?php print `id`; ?>
Должна открыться страничка с примерно такимответом:
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 строки
<IfModule itk.c> LoadModule php5_module modules/libphp5.so </IfModule>
Добавляем в файл /etc/httpd/conf/httpd.conf строки (кол-во запускаемых серверов и обслуживаемых клиентов зависит от конкретного сервера, необходимо подбирать самостоятельно):
<IfModule itk.c> StartServers 1 MinSpareServers 1 MaxSpareServers 20 ServerLimit 50 MaxClients 100 MaxRequestsPerChild 4000 </IfModule>
Запрещаем 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