====== 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, как описано здесь: [[software:bitrix:bitrix-centos7|Битрикс на CentOS 7]]
В принципе все, можно тестировать: запустить все сервисы, зайти в панель управления Битрикса и проверить настройки системы: Настройки -> Инструменты -> Проверка системы
{{tag>bitrix multiple_php multiple_php_version php_version nginx apache http php-fpm битрикс несколько_версий_php}}