Релиз [Мануал] Установка Bitrix на php7

Тема в разделе "Битрикс", создана пользователем virus555, 7 окт 2016.

Модераторы: mrLom, wpt
  1. virus555

    virus555 Постоялец

    Регистр.:
    22 дек 2013
    Сообщения:
    103
    Симпатии:
    165
    Устанавливать будем так называемый LEMP стек (Linux, Nginx, MySQL, PHP)
    А если быть точнее, то CentOS 7, Nginx, MariaDB, PHP 7

    Инструкция была составлена из десятка разных источников, но основное взято из этих:
    - http://pilezkiy.com/blog/vds-bitrix-centos-nginx-phpfpm-mariadb/
    - https://www.digitalocean.com/commun...-linux-nginx-mysql-php-lemp-stack-on-centos-7
    - http://dev.1c-bitrix.ru/community/webdev/user/5427/blog/bitrix-nginx-phpfpm/?commentId=22761


    Предполагается, что у вас уже установлена CentOS 7 minimal, настроена сеть и вы зашли под рутом. Cоветую ставить CentOS в файловой системе ext4, т.к. производительность немного выше чем у xfs (ссылка на мануал внизу).
    И так поехали (осторожно - много букаф)
    Красным поотмечал, что вам нужно изменить под себя

    yum update


    УСТАНАВЛИВАЕМ NGINX
    Добавляем репозиторий / устанавливаем nginx / запускаем и добавляем в автозагрузку
    rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    yum install nginx -y
    systemctl start nginx && systemctl enable nginx


    УСТАНАВЛИВАЕМ PHP7 + МОДУЛИ
    rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
    yum install php70w php70w-mysql php70w-fpm php70w-mcrypt php70w-mbstring php70w-gd php70w-devel php70w-opcache -y

    правим файл /etc/php-fpm.d/www.conf
    user = nginx
    group = nginx
    listen.owner = nobody
    listen.group = nobody
    listen.mode = 0666
    listen = /var/run/php-fpm/php-fpm.sock

    запускаем и добавляем в автозагрузку
    systemctl start php-fpm && systemctl enable php-fpm
    это создаст нужный нам php-fpm.sock файл, зададим ему права и владельца
    chmod 666 /run/php-fpm/php-fpm.sock
    chown nginx:nginx /run/php-fpm/php-fpm.sock

    в /etc/php.ini меняем:
    ---------

    cgi.fix_pathinfo=0
    short_open_tag=on
    mbstring.func_overload=2
    mbstring.internal_encoding=UTF-8
    date.timezone = Europe/Kiev
    max_input_vars = 10000
    post_max_size = 20M
    upload_max_filesize = 20M
    realpath_cache_size = 4096k
    display_errors = On
    memory_limit = 256M

    в /etc/php.d/opcache.ini меняем:
    opcache.revalidate_freq=0
    opcache.max_accelerated_files = 100000

    СТАВИМ БАЗУ ДАННЫХ:
    yum -y install mariadb-server mariadb
    systemctl start mariadb && systemctl enable mariadb
    ---------
    Затем запускаем скрипт первоначальной установки настроек безопасности:
    /usr/bin/mysql_secure_installation
    При запуске этого скрипта будет запрошен пароль для root пользователя и будут заданы другие вопросы безопасности на которые нужно отвечать Y или N.
    ---------
    После этого запускаем входим в консоль mysql под root-пользователем:

    mysql -uroot -p
    (вводим пароль указанный в скрипте mysql_secure_installation)
    Создаем базу данных для Битрикс-сайта:

    CREATE DATABASE `site_db` CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    CREATE USER 'site_db_user'@'localhost' IDENTIFIED BY 'site_db_password';
    GRANT ALL PRIVILEGES ON site_db.* TO 'site_db_user'@'localhost';
    Этим мы создали базу данных site_db в кодировке UTF-8 с пользователем site_db_user и паролем site_db_password
    ---------
    Если планируется использование движка InnoDB, то нужно в файле /etc/my.cnf
    прописать настройку в секцию [mysqld] + небольшой тюнинг:

    innodb_flush_log_at_trx_commit=2
    query_cache_size = 20mb
    query_cache_limit=20mb
    thread_cache_size=4
    innodb_flush_method=O_DIRECT
    transaction-isolation=READ-COMMITTED
    ---------
    Отключаем SELinux — в файле /etc/sysconfig/selinux присваиваем параметру SELINUX флаг disabled:
    SELINUX=disabled
    перегружаемся
    reboot


    ДОБАВЛЯЕМ ХОСТ
    mkdir -p /home/www/example
    chown -R nginx:nginx /home/www/example
    chmod -R 755 /home/www/example

    Создаём файл настроек виртуалхоста /etc/nginx/conf.d/example.conf
    Среди кучи примеров конфигов - вот единственный который корректно работает с битриксом. Копируем текст из файла и не забываем поменять example на свои данные. Example.conf - https://yadi.sk/i/a9Au_A_QwdDbw

    Проверяем конфигурацию nginx

    nginx -t
    Должно выдаться что-то типа "syntax is ok". Перезапускаем сервис

    systemctl restart nginx

    Меняем права на директорию сессий

    chown -R nginx:nginx /var/lib/php/session


    Вот как бы и все!

    Теперь можно зайти в папку нашего созданного хоста /home/www/example и закачать пару битриксовских скриптов:
    0. yum install wget -y
    1. wget http://dev.1c-bitrix.ru/download/scripts/bitrix_server_test.php

    Проверяем что все в нашем сервере подходит для битрикса
    И запускаем в браузере: http://наш-сайт.com/bitrix_server_test.php
    Может ругаться на "Обработка .htaccess" - это нормально nginx по сути не работает с этими файлами
    Также у меня скрипт ругался на отсутствие функций MySQL, но при установке все было норм.

    Качаем файл установки новых решений (2) или востановления из бекапа (3)
    2. wget http://www.1c-bitrix.ru/download/scripts/bitrixsetup.php
    3. wget http://dev.1c-bitrix.ru/download/scripts/restore.php

    Для чего все это? - Чтобы добиться высокой производительности - https://www.nulled.in/threads/279193/page-4#post-2629290
    Не претендую на то, что данный мануал является 100% верным. Хотелось бы услышать советы более опытных, что еще не учтено.


    Доп. материалы:
    Установка memcached - https://www.nulled.in/threads/280488/#post-2630224
    Установка CentOS в ФС ext4 - https://www.nulled.in/threads/280488/page-2#post-2631168
    Переводим агентов на cron - https://www.nulled.in/threads/280488/page-8#post-2691422

    UPD: Заменена репа для nginx на официальную (thx Maybe)
    UPD2: Мелкие дополнения в php.ini (thx rtzra)
    UPD3: Небольшое ускорение SQL
     
    Последнее редактирование: 11 мар 2017
    Rust aka -=S.V.D=-, ZeusUA, rtzra и 6 другим нравится это.
  2. Supramati

    Supramati Постоялец

    Регистр.:
    22 апр 2015
    Сообщения:
    50
    Симпатии:
    10
    Не запускается так((
    Логи молчат
    а на самом сайте выдает следующее:
    The script encountered an error and will be aborted. To view extended error messages, enable this feature in .settings.php.
     
  3. Maybe

    Maybe

    Moderator
    Регистр.:
    7 июл 2008
    Сообщения:
    1.172
    Симпатии:
    1.199
    mrLom и virus555 нравится это.
  4. virus555

    virus555 Постоялец

    Регистр.:
    22 дек 2013
    Сообщения:
    103
    Симпатии:
    165
    Текст, что ниже пришлось вынести в этот пост, т.к. по размеру в первый не влазит:
    P.S.: Для тех, кто хочет еще установить memcached (хотя у меня из-за него упала производительность)
    Сразу хотелось бы определиться с понятиями:
    Для меня на днях стало открытием, что memcache и memcached это не разные сервисы кеширования и даже не опечатка :). На самом деле существует только сервис кеширования под названием memcached.

    Memcache, как оказалось, это название php-расширения для работы с сервисом кеширования memcached. Но все не так просто :cool: Существует еще одно (а может и не одно) php-расширение для работы сервисом кеширования memcached с названием memcached. o_0

    Итого имеется:
    • один сервис кеширования memcached
    • два php-расширения для работы с указанным выше сервисом кеширования:
    Источник: http://dmitriy.britan.name/2011/06/memcache-and-memcached-who-is-who/

    Устанавливаем необходимое доп. ПО и сам сервер кеширования memcached
    yum install gcc zlib-devel -y
    yum install memcached -y
    запускаем и добавляем в автозагрузку
    systemctl start memcached && systemctl enable memcached

    Собираем и устанавливаем php-расширение memcache
    wget https://github.com/websupport-sk/pecl-memcache/archive/NON_BLOCKING_IO_php7.zip
    unzip NON_BLOCKING_IO_php7.zip
    cd pecl-memcache-NON_BLOCKING_IO_php7
    /usr/bin/phpize && ./configure --enable-memcache --with-php-config=/usr/bin/php-config && make
    cp modules/memcache.so /usr/lib64/php/modules/
    echo 'extension=memcache.so' >/etc/php.d/memcached.ini

    В файле /etc/sysconfig/memcached заменяем строку OPTIONS на:
    OPTIONS="-l 127.0.0.1"

    Теперь осталось добавить эти строки в файл /bitrix/.settings.php
    Например сюда - http://prntscr.com/cquttc

    PHP:
    'cache' => array(
    'value' => array (
    'type' => 'memcache',
    'memcache' => array(
    'host' => '127.0.0.1',
    'port' => '11211',
    'sid' => $_SERVER["DOCUMENT_ROOT"]."#site01",
    ),
    ),
    'readonly' => false,
    ),
     
    shake1 нравится это.
  5. shake1

    shake1

    Регистр.:
    16 янв 2013
    Сообщения:
    520
    Симпатии:
    558
    С redis погонять тоже интересно.
    Зимой собирал ubuntu+php7+redis.
    Тестил с WP.
    Запросы к базе редис кеширует вообще замечательно.
    В картинках:
    Ubuntu-Wordpress.jpg
    Слева на право: общее время загрузки страницы, используемая память, время обращения к базе, количество запросов к базе.
    Как видно редис в 6(!) раз сократил количество запросов к базе.
    ----------------------
    Сравнение производительности Redis и Memcached:
    Redis
    запись: 9.36961с
    чтение: 9.03с

    Memcached
    запись: 10.28c
    чтение: 31.23с

    Люди уже подключали для битрикс с PHP7.
    Кэширование данных с помощью Redis:
    https://dev.1c-bitrix.ru/community/webdev/user/60615/blog/18137/
     
    Renny и mrLom нравится это.
  6. mrLom

    mrLom ♒︎

    Moderator
    Регистр.:
    24 дек 2014
    Сообщения:
    936
    Симпатии:
    1.833
    Добавлю пару слов на счет nginx.
    Из реп можно ставить, но есть пара приятных оговорок!
    nginx-push-stream-module
    SPDY


    Все находится в и собирается по RTFM nginx+nginx-push-stream-module+SPDY — очень рекомендую.
     
  7. rtzra

    rtzra Создатель

    Регистр.:
    14 апр 2013
    Сообщения:
    38
    Симпатии:
    7
    Подскажите кто пробовал - на PHP 7 как насчет решений с Маркетплейса - есть ли косяки?
     
  8. shake1

    shake1

    Регистр.:
    16 янв 2013
    Сообщения:
    520
    Симпатии:
    558
    mrLom нравится это.
  9. nononameman

    nononameman

    Регистр.:
    3 мар 2014
    Сообщения:
    331
    Симпатии:
    219
    Все решения не попробовать. Если разработчик внимательный и внес необходимые правки, то не будет касяков, если нет то будут, тут однозначно никак не ответить.
     
  10. prefer

    prefer

    Регистр.:
    12 май 2016
    Сообщения:
    412
    Симпатии:
    86
    Да но данный параметр улучшился незначительно.
     
    Последнее редактирование: 8 окт 2016