Bitrix, CentOS и разные версии PHP
Переносил несколько сайтов на Битриксе, приключилась небольшая проблема: часть сайтов старая, обновления давно не устанавливались и работать умеют максимум с PHP 5.6. Другая же часть сайтов обновлены до последних версий и вполне могут крутиться на PHP 7.x. Сервер один на все про все, панели управления и т.д. нет - в общем, надо врукопашную все сделать.
Исходные данные, на момент начала работы на сервере установлено:
- CentOS 7
- Bitrix + веб-окружение (которое установило Nginx, Apache2, PHP 7.0, MySQL 5.5)
Решение
Почитав про всякие suPHP, FastCGI и прочие извращения стало понятно что надо сделать как-то проще. Ну и появилось сильное желание заменить MySQL 5.5 на MariaDB 10 (т.к. некоторые модули в Битриксе уже сильно хотят версию 5.6 или выше).
Заменяем MySQL на MariaDB
Взято тут: https://www.tecmint.com/upgrade-mariadb-5-5-to-10-centos-rhel-debian-ubuntu/
Делаем бэкап (если нужно):
# mysqldump -u root -ppassword --all-databases > /tmp/all-database.sql
Останавливаем сервис:
# systemctl stop mysql
Делаем копию папки mysql на всякий случай:
# cp -a /var/lib/mysql/ /var/lib/mysql.bak
Создаем новый репозиторий:
# touch /etc/yum.repos.d/MariaDB10.repo
и вставляем туда:
# MariaDB 10.1 CentOS repository list - created 2016-01-18 09:58 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.1/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Удаляем старую версию:
# yum remove mariadb-server mariadb mariadb-libs
Или так, если был установлен пакет mysql:
# yum remove mysql-server
Чистим кэш:
# yum clean all
Устанавливаем новую версию:
# yum -y install MariaDB-server MariaDB-client
Включаем в автозагрузку и запускаем сервис:
# systemctl enable mariadb # systemctl start mariadb
Запускаем обновление:
# mysql_upgrade
Проверяем и пробуем поключиться:
# mysql -V # mysql -h localhost -u root -p
PHP 5.6
Пришло время установить PHP 5.6 и php-fpm через который он будет работать.
Ставим вместе с необходимыми модулями:
# yum install php56-php-fpm.x86_64 php56-php-bcmath.x86_64 php56-php-gd.x86_64 php56-php-mbstring.x86_64 php56-php-mcrypt.x86_64 php56-php-mysqlnd.x86_64 php56-php-opcache.x86_64
В CentOS 7 разные версии ставятся в /opt/remi - об этом необходимо помнить, т.к. все файлы конфигурации берутся именно оттуда.
Далее необходимо настраить конфигурацию php-fpm в файлах.
Файл /opr/remi/php56/root/etc/php-fpm.d/www.conf
[www] user = bitrix group = bitrix listen = /var/run/php-fpm/php-fpm56.sock listen.owner = nobody listen.group = nobody listen.mode = 0666 listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 slowlog = /opt/remi/php56/root/var/log/php-fpm/www-slow.log env[TMP] = /home/bitrix/tmp env[TMPDIR] = /home/bitrix/tmp env[TEMP] = /home/bitrix/tmp php_admin_value[error_log] = /opt/remi/php56/root/var/log/php-fpm/www-error.log php_admin_flag[log_errors] = on php_value[session.save_handler] = files php_value[session.save_path] = /home/bitrix/tmp php_value[soap.wsdl_cache_dir] = /opt/remi/php56/root/var/lib/php/wsdlcache
Основная идея - все папки для временных файлов положить поближе к папке с сайтом и дать права
# chown bitrix:bitrix /home/bitrix/tmp # chmod 770 /home/bitrix/tmp
Файл /opr/remi/php56/root/etc/php.ini
sys_temp_dir = "/home/bitrix/tmp"
Подкладываем в /opr/remi/php56/root/etc/php.d/ файл bitrixenv.ini
; Set parameters required for proper Bitrix engine functioning. ; You can redefine parameters specified in this file ; by editing /etc/php.d/z_bx_custom_settings.ini ; Configure error processing display_errors = On error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING ; Set some more PHP parameters enable_dl = Off short_open_tag = On allow_url_fopen = On ; Change default values of important constants max_input_vars = 10000 max_file_uploads = 100 max_execution_time = 300 post_max_size = 1024M upload_max_filesize = 1024M pcre.backtrack_limit = 1000000 pcre.recursion_limit = 14000 realpath_cache_size = 4096k mysql.default_socket = /var/lib/mysqld/mysqld.sock mysqli.default_socket = /var/lib/mysqld/mysqld.sock ; Utf-8 support mbstring.func_overload = 2 ;mbstring.internal_encoding = UTF-8 mbstring.internal_encoding = cp1251 ; Configure PHP sessions session.entropy_length = 128 session.entropy_file = /dev/urandom session.save_path = "/home/bitrix/tmp/php_sessions/www" session.cookie_httponly = On ; Set directory for temporary files upload_tmp_dir = "/home/bitrix/tmp/php_upload/www" sendmail_path = sendmail -t -i date.timezone = Europe/Moscow memory_limit = 256M
В этой же папке /opr/remi/php56/root/etc/php.d/ отключить ненужные модули и включить mysqli для Битрикса
Настроить связку Битрикса и PHP-FPM, как описано здесь: Битрикс на CentOS 7
В принципе все, можно тестировать: запустить все сервисы, зайти в панель управления Битрикса и проверить настройки системы: Настройки → Инструменты → Проверка системы