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 или выше).

Взято тут: 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-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

В принципе все, можно тестировать: запустить все сервисы, зайти в панель управления Битрикса и проверить настройки системы: Настройки → Инструменты → Проверка системы

  • software/bitrix/bitrix-multiple-php-version.txt
  • Последнее изменение: 2017/05/17 01:40
  • 127.0.0.1