1С-Битрикс: Управление сайтом Курс для хостеров Полная версия Содержание Введение 4 Глава 1. Bitrix Framework и хостинг ....................................................................... 5 СКРИПТ BITRIX_SERVER_TEST ...................................................................................................6 Глава 2. Основные сведения .................................................................................. 8 ОСНОВНЫЕ ПОНЯТИЯ ............................................................................................................. 13 Глава 3. Установка и настройка ............................................................................ 19 КАРТА УСТАНОВКИ .................................................................................................................. 19 СИСТЕМНЫЕ ТРЕБОВАНИЯ ...................................................................................................... 20 Требования к серверному программному обеспечению ................................................................21 Стандарты и технологии. Требования к клиентскому программному обеспечению....................24 УСТАНОВКА ПРОДУКТА «1С-БИТРИКС: УПРАВЛЕНИЕ САЙТОМ» ................................................. 25 Предварительные операции .............................................................................................................25 Мастер установки «1C-Битрикс: Управление сайтом» ...................................................................26 Установка демо-сайта для разработчиков .......................................................................................40 Установка решения «1C-Битрикс: Управление сайтом» ................................................................45 Установка стороннего решения из Marketplace ...............................................................................55 Установка продукта с помощью BitrixSetup .....................................................................................65 Регистрация продукта ........................................................................................................................67 СИСТЕМА ОБНОВЛЕНИЙ .......................................................................................................... 71 Общие сведения .................................................................................................................................71 Настройка системы обновлений .......................................................................................................74 Обновление ядра продукта ...............................................................................................................76 Просмотр и загрузка языковых файлов ...........................................................................................77 Загрузка исходных текстов ................................................................................................................78 Активация купона ...............................................................................................................................79 Типичные ошибки ...............................................................................................................................80 ДОПОЛНИТЕЛЬНЫЕ МОМЕНТЫ ................................................................................................. 81 Необходимый уровень прав на сервере ..........................................................................................81 Использование файлов .htaccess .....................................................................................................85 Ошибки подключения к БД ................................................................................................................88 Ошибки запросов к БД .......................................................................................................................89 500 - Internal Server Error ...................................................................................................................92 ВИРТУАЛЬНАЯ МАШИНА .......................................................................................................... 93 Введение .............................................................................................................................................94 Запуск виртуальной машины BitrixVM ..............................................................................................95 Настройка почтового сервера ...........................................................................................................99 Глава 4. Перенос продукта .................................................................................. 102 ВОЗМОЖНЫЕ ОШИБКИ ПРИ ПЕРЕНОСЕ САЙТА ........................................................................ 105 Глава 5. Монитор производительности ............................................................ 110 НАСТРОЙКИ МОДУЛЯ............................................................................................................. 110 ПУБЛИЧНАЯ ЧАСТЬ МОДУЛЯ .................................................................................................. 111 Информация о запросах ..................................................................................................................114 АДМИНИСТРАТИВНЫЕ СТРАНИЦЫ МОДУЛЯ............................................................................. 115 Страницы ..........................................................................................................................................115 Хиты ...................................................................................................................................................116 Компоненты .......................................................................................................................................119 SQL запросы .....................................................................................................................................120 Таблицы в базе данных ...................................................................................................................122 Настройки PHP .................................................................................................................................126 2 Сервер БД .........................................................................................................................................127 Ошибки PHP......................................................................................................................................128 ПОИСК "УЗКИХ" МЕСТ САЙТА ................................................................................................. 128 Закладка «Конфигурация» ..............................................................................................................129 Закладка «Битрикс» .........................................................................................................................131 Закладка «Разработка» ...................................................................................................................132 Закладка «Масштабируемость»......................................................................................................136 ПРИМЕР НАХОЖДЕНИЯ МЕЛКИХ ОШИБОК В ПРОИЗВОДИТЕЛЬНОСТИ ........................................ 137 Глава 6. Конфигурирование веб-систем для оптимальной работы ............ 140 ОСОБЕННОСТИ ВЕБ-ПРИЛОЖЕНИЙ ........................................................................................ 140 PHP-приложения ..............................................................................................................................141 Базы данных .....................................................................................................................................142 Какие проекты можно назвать большими? ....................................................................................144 ПОЧЕМУ УМИРАЮТ САЙТЫ? .................................................................................................. 145 Передача данных клиенту ...............................................................................................................146 Производительность PHP, базы данных и статика .......................................................................148 Причины "умирания" сайтов ............................................................................................................148 ДВУХУРОВНЕВАЯ КОНФИГУРАЦИЯ ВЕБ-СЕРВЕРА FRONT-END И BACK-END .............................. 150 Front-end ............................................................................................................................................150 Back-end и порядок взаимодействия ..............................................................................................152 Стабилизируем Back-end по расходу оперативной памяти .........................................................154 Производительность PHP................................................................................................................157 Сжатие страниц ................................................................................................................................159 Дополнительные рекомендации для двухуровневой конфигурации ...........................................160 Достигнутые результаты ..................................................................................................................161 ПРИМЕР НАСТРОЙКИ ДВУХУРОВНЕВОЙ АРХИТЕКТУРЫ ............................................................ 162 Настройка веб-сервера Apache ......................................................................................................162 Пример: число процессов веб-сервера ..........................................................................................163 Настройка Front-end NGINX ............................................................................................................164 Отдача графики напрямую NGINX .................................................................................................171 ОПТИМИЗАЦИЯ БАЗЫ ДАННЫХ ............................................................................................... 171 Основные принципы .........................................................................................................................172 Постоянное соединение с базой данных .......................................................................................172 Настройка базы данных MySQL ......................................................................................................173 Настройка базы данных Oracle .......................................................................................................177 Пример-упражнение .........................................................................................................................179 3 Введение Курс предназначен для организаций, предоставляющих услуги хостинга и желающих получить компетенцию Рекомендуемый хостинг. В курсе рассматриваются требования платформы Bitrix Framework к хостингу, вопросы установки, настройки продукта. Для хостеров не является обязательным, но рекомендуется изучение курсов Контентменеджер и Администратор. Базовый для получения более полного представления о возможностях системы и способах работы с ней. Рекомендуется ознакомиться с опытом настройки и тестирования серверов в блогах Александра Демидова и Дениса Шаромова, а так же с отзывами клиентов о хостингах в группе Черный и белый список хостингов социальной сети компании "1С-Битрикс". Если ваш хостинг на Windows, то вам может быть полезна группа 1С-Битрикс на платформе Windows Server 2008 в социальной сети сайта "1С-Битрикс". В ней пользователи делятся опытом работы системы на IIS 7. 4 Глава 1. Bitrix Framework и хостинг Обладая большим арсеналом возможностей и наличием готовых компонент почти под любую задачу, продукты на основе Bitrix Framework занимают на диске от 100 Мб и больше. Сложная структура страницы требует для ее обработки определенного объема памяти. Однако, благодаря своей архитектуре платформа Bitrix Framework позволяет легче переносить большие нагрузки, а для малых нагрузок достаточно самого обычного хостинга (в варианте «виртуальный сервер»), не загруженного другими клиентами «под завязку». Bitrix Framework имеет свои особенности в плане хостинга: Наличие достаточного места на диске для создания большого количества файлов. Сегодня минимальное требование для проекта с большим числом картинок — от 300 Mбайт. (Важно помнить, что каждая картинка также занимает место на диске, а в большом проекте таких картинок может быть очень много.) Bitrix Framework содержит очень большое число файлов, распределенных в основном по модулям, компонентам и шаблонам. Кроме того, встроенный механизм кэширования создает на диске сервера как минимум один файл на каждую страницу или виртуальную страницу - например, на новость или элемент каталога. Естественно, что это требует ресурсов. Наличие необходимых ресурсов на сервере — памяти, выделяемой скриптом, наличие акселератора PHP и некоторых других настроек. Необходимо как минимум 128 Мбайт памяти, выделяемой для PHP, чтобы могли работать серьезные проекты (например, интернет-магазины). Она расходуется на построение структуры данных и выполнение кода при вызове каждой страницы сайта. Желательность двухуровневой архитектуры для работы сайтов с высокой посещаемостью или серверов с высокой загрузкой. Для этого устанавливается дополнительный веб-сервер (обычно NGINX), который принимает все запросы. Это позволяет стабилизировать использование памяти за счет ограничения числа процессов Apache и получить отказоустойчивую систему. Достаточно быстрый сервер баз данных. Для работы сайтов необходимо, чтобы сервер баз данных успевал обрабатывать запросы за короткое время. Желательность работы PHP и FTP/SSH от одного и того же пользователя. При разработке сайта обычно работают с файлами по FTP/SFTP-протоколу. Вместе с тем при работе в самой системе она создает файлы от имени того пользователя, под которым работает PHP. При несовпадении этих пользователей могут возникнуть серьезные проблемы в работе сайта или в возможностях его модификации. Во многом соответствие сервера требованиям системы можно протестировать модулем Монитор производительности. Для успешной установки и полноценной работы продукта необходимы следующее: 5 Установка может быть сделана только в корневую папку веб сервера. Необходимо использовать веб сервер Apache 1.3.0 и выше. Хостер должен разрешать использование .htaccess. Необходимо использовать PHP 5. safe_mode должен быть отключен (инсталлятор блокирует установку продукта в этом режиме). short_open_tag включён. memory_limit не ниже 32 Мб для редакции "Старт", не менее 64 Мб для редакции "Бизнес". Наличие функций работы с сокетами для обновления продукта. Наличие библиотек: Zlib (компрессия - для модуля компрессии и ускорения загрузки обновлений), GD lib (отображение графиков), Free Type (работа CAPTCHA). Версия MySQL сервера: 4.1.11, рекомендуется 5.0 и выше, Oracle 10g и выше или MSSQL 9.0 (2005) и выше. Для установки Oracle-версии продукта удостоверьтесь в наличии клиентской части Oracle 10g (или выше) и создайте нового пользователя. Крайне рекомендуется наличие акселератора PHP (APC, eAccelerator или любого другого). Самый быстрый - Zend optimizer+ из пакета Zend server. режим работы PHP как модуля Apache предпочтительнее (CGI настоятельно не рекомендуется, так как он не поддерживает работу акселератора. Лучше использовать FastCGI.) Примечание: не рекомендуется использовать модуль suhosin или mod_security т.к. в ряде случаев эти модули препятствуют нормальной работе продуктов. Продукты Bitrix Framework поставляются в исходных кодах. Поэтому нет необходимости в модулях zend optimizer или zend guard loader. Скрипт bitrix_server_test Компания "1С-Битрикс" рекомендует клиентам и разработчикам потенциальный хостинг специальным скриптом bitrix_server_test. проверять Хостерам так же рекомендуется периодически скачивать обновленную версию теста и проверять свои сервера по тестируемым параметрам. Скрипт постоянно обновляется под выявляемые проблемы и обновления системы: 6 7 Глава 2. Основные сведения Продукт «1C-Битрикс: Управление сайтом» представляет собой программное ядро для всестороннего управления веб-проектами любой сложности. Система «1C-Битрикс: Управление сайтом» устанавливается в корневой каталог сайта на удаленном сервере. Доступ к управлению сайтами осуществляется посредством веб-браузера. Возможна установка и на локальный компьютер для ознакомления с системой. Программный продукт «1C-Битрикс: Управление сайтом» имеет модульную структуру. Каждый модуль отвечает за управление определенными элементами и параметрами сайта: информационным наполнением и структурой сайта, форумами, рекламой, рассылкой, распределением прав между группами пользователей, сбором статистики посещений, оценкой эффективности рекламных кампаний и т.д. Примечание: Общие возможности модулей описаны на сайте компании «1CБитрикс» в разделе Возможности. Подробная информация и работа с ними представлена в учебных курсах. Количество модулей в устанавливаемой системе зависит от редакции продукта. Перечень редакций и их описание доступны на сайте компании «1C-Битрикс» в разделе Редакции. Примечание: Наглядно сравнить состав каждой редакции вы можете с помощью таблицы сравнения редакций, представленной также на сайте компании «1CБитрикс». Модули системы, главным образом, работают независимо друг от друга. Однако в целом ряде случаев функционал одних модулей основан на возможностях других. Например: Модуль Торговый каталог расширяет возможности модуля Информационные блоки и позволяет выполнять настройку цен товара в зависимости от различных условий, применять к товарам наценку и скидки и т.п. Модуль Документооборот позволяет организовать последовательную коллективную работу с содержимым модулей Информационные блоки и Управление структурой. После установки системы список используемых модулей можно просмотреть на странице Управление модулями (Настройки > Настройки продукта > Модули) в административном разделе системы: 8 Данная таблица содержит название и описание модулей, информацию о версии и дате последнего обновления, а также текущий статус в системе: Установлен – модуль и его элементы доступны для использования в системе; Не установлен – модуль не доступен для использования в системе. Для экономии дискового пространства неиспользуемые модули рекомендуется удалить, при этом дистрибутив модуля остается в системе, и он в любое время может быть снова установлен. Для установки и удаления модуля служат кнопки Установить и Удалить соответственно. Обратите внимание, что при деинсталляции некоторых модулей система предлагает сохранить накопленные модулем данные (таблицы модуля). Если вы в дальнейшем планируете использовать эти данные, то при удалении модуля необходимо отметить соответствующую опцию. Ссылки на функционал установленных модулей добавляются в соответствующие секции административного меню системы. 9 Для некоторых модулей данные в меню загружаются динамически. Например: для модуля Информационные блоки выполняется динамическая загрузка списка типов инфоблоков; для модуля Веб-формы выполняется динамическая загрузка списка веб-форм; для модуля Управления структурой выполняется динамическая загрузка файловой структуры. В зависимости от прав пользователя на доступ к модулям системы ему может быть доступен либо недоступен тот или иной функционал. Управление уровнем прав пользователей на доступ к модулям системы осуществляется отдельно для каждого модуля на странице его настроек. 10 Страница настроек модуля может иметь различное число вкладок и полей, в зависимости от функционала модуля. Перейти к ней можно следующими способами: с помощью административного меню: Настройки > Настройки продукта > Настройки модулей > имя_модуля; с помощью кнопки Настройки , расположенной на административной панели. Данная кнопка позволяет перейти к настройкам модуля, страницы (формы) которого открыты в текущей момент в основной рабочей области. На странице настроек также выполняется управление общими параметрами работы модулей. Для всех модулей продукта доступна система помощи, отображающая информацию по текущей странице или форме модуля, которая вызывается при нажатии на кнопку Помощь административной панели. При этом откроется соответствующая страница документации с сайта компании «1С-Битрикс». 11 Примечание. Полный перечень документации Справочная информация курса Контент-менеджер. 12 представлен на странице Основные понятия На представленном ниже рисунке вы можете ознакомиться с общей схемой работы продукта. Ниже приводятся определения основных понятий, используемых при работе с системой: Экземпляр программы - копия продукта «1C-Битрикс: Управление сайтом», включающая в себя исходный текст продукта и только одну копию структуры и таблиц базы данных, входящих в состав продукта, а также любую документацию по использованию продукта. 13 Сайт – совокупность данных одного экземпляра программы с уникальным идентификатором, с помощью которого группируются объекты программы (информационные блоки, веб-формы, форумы, шаблоны, шаблоны писем и другие) для их совместного отображения и использования, обычно в одном внешнем виде, языке интерфейса, доменном имени или каталоге. Каждому сайту соответствует запись на странице административного раздела Список сайтов (Настройки > Настройки продукта > Сайты > Список сайтов). Шаблон сайта — это внешний вид сайта, в котором определяется расположение различных элементов на сайте, художественный стиль и способ отображения страниц. Включает в себя программный HTML-код, графические элементы, таблицы стилей, дополнительные файлы для отображения контента. Может также включать в себя шаблоны компонентов, шаблоны готовых страниц и сниппеты. Публичный раздел – информация, доступная для отображения посетителям сайта. 14 Административный раздел - раздел сайта, содержащий интерфейс для управления модулями системы, структурой, содержанием, посетителями и другими составляющими сайта. API (SDK) – каждый модуль системы содержит набор высокоуровневых функций для выборки данных в публичном разделе сайта и набор классов с низкоуровневыми методами для более специализированной работы с данными модуля. Подробная информация по API каждого модуля представлена в документации для разработчиков. Визуальные компоненты – часто используемые области на сайте могут быть оформлены как программные компоненты. Каждый компонент представляет собой логически завершенный программный скрипт, в котором выделены отдельные переменные для внешнего управления через визуальный интерфейс. Использование визуальных компонентов является наиболее предпочтительным способом организации вывода информации как в публичной, так и в административной частях. 15 Система обновлений - уникальная технология SiteUpdate позволяет: скачивать обновления продукта; загружать новые модули и обновления для имеющихся модулей расширяющие их функциональные возможности; загружать языковые файлы устанавливать новые языки; выполнять регистрацию дополнительные сайты. лицензий и на Данные загружаются с сайта компании «1СБитрикс» через веб-интерфейс административного раздела продукта. В процессе обновления выполняется модификация только ядра продукта (файлы папок /bitrix/modules/, /bitrix/tools/, /bitrix/admin/ и /bitrix/components/bitrix/). Обновление не затрагивает публичную часть сайта, полностью исключая возможность потери данных. Обновление системы осуществляется в несколько шагов: система обновлений автоматически запрашивает лицензионный ключ продукта; затем выполняется проверка доступных обновлений; далее пользователю предлагается выбрать обновления для загрузки; после этого происходит выбранных обновлений. наличия загрузка Все обновления и новые модули сначала компрессируются, а затем загружаются на сайт владельца. Компрессия данных в несколько раз увеличивает скорость загрузки обновлений продукта. 16 Многоязычный интерфейс - система «1C- Битрикс: Управление сайтом» поддерживает многоязычный интерфейс. Данная возможность реализуется за счет использования языковых файлов, хранящих перевод фраз на соответствующие языки для: административного раздела; сообщений об ошибках; визуальных компонентов; соответствующих областей в шаблоне сайта; и т.д. В соответствии с текущим языком интерфейса выполняется подключение необходимых языковых файлов. В результате сообщения отображаются пользователю на выбранном им языке. Переключение между языками административного интерфейса осуществляется с помощью соответствующих кнопок на административной панели. Пользователь – посетитель сайта, относящийся к определенной группе (группам) и осуществляющий доступ к ресурсам сайта в соответствии с настройкой прав данной группы. Управление пользователями осуществляется на странице Список пользователей (Настройки > Пользователи > Список пользователей) в административном разделе. 17 Группа пользователей – совокупность пользователей сайта, обладающих определенными правами на доступ и управление ресурсами сайта (например, пользователи группы Модераторы обладают правом на чтение и редактирование сообщений форума). Управление группами пользователей осуществляется на странице Группы пользователей в административном разделе (Настройки > Пользователи > Группы пользователей). Регистрация – указание посетителем сайта необходимой информации с целью заведения учетной записи пользователя. Регистрационные данные (логин и пароль), указанные пользователем при регистрации либо полученные им автоматически (например, при использовании упрощенной процедуры оформления заказа), в дальнейшем могут использоваться для авторизации в системе. В результате регистрации пользователь привязывается к определенной группе и получает право на доступ к ресурсам сайта в соответствии с правами данной группы. Авторизация – ввод посетителем сайта личных регистрационных данных (логина и пароля) в специальную форму. Авторизация в системе открывает пользователю доступ к ресурсам сайта в соответствии с правами группы, к которой он относится. 18 Глава 3. Установка и настройка Раздел Установка и настройка описывает процедуры: установки ознакомительной и коммерческой версии продукта; процесс регистрации продукта на сайте компании "1С-Битрикс" и загрузки исходных текстов для получения полнофункциональной системы с открытыми текстами; установка системы на виртуальную машину; другие вопросы, связанные с установкой системы. Для специалистов, выполняющих настройку веб-серверов (Apache, IIS) самостоятельно, рекомендуется дополнительно изучить документацию по настройке соответствующего программного обеспечения. Карта установки Продукт «1C-Битрикс: Управление сайтом» имеет много способов и вариантов установки. Конкретный способ зависит от целей установки, имеющегося на компьютере ПО, выбранного решения. Карта установки позволит вам выбрать для себя оптимальный вариант установки из множества возможных. Ознакомление с продуктом на локальном компьютере Для ознакомления с продуктом на локальном компьютере можно использовать Windows-инсталлятор продукта, либо установку на Виртуальную машину (рекомендуется). (Установка с помощью Windows-инсталлятора в данном курсе не рассматривается.) 19 Установка на удаленный сервер Для установки на удаленный сервер мы рекомендуем использовать скрипт BitrixSetup. Также в этой ситуации можно воспользоваться установкой продукта с помощью архива .tar.gz или .zip. Перенос сайта между разными площадками Для копирования сайта с локального компьютера на удаленный сервер или наоборот, а также для переезда с одного сервера на другой, воспользуйтесь уроком Перенос продукта. Системные требования В силу больших возможностей системы и наличия готовых компонентов почти для любой задачи «1С-Битрикс:Управление сайтом» занимает на диске от 100 Мбайт и больше, а сложная структура страницы может потребовать для ее обработки определенного объема памяти. Но благодаря своей архитектуре, платформа Bitrix Framework позволяет серверу легче переносить большие нагрузки. 20 В главе указываются основные технические требования к серверному программному обеспечению, сведения о поддержке стандартов и технологий, а также требования к программному обеспечению пользователя продуктом «1C-Битрикс: Управление сайтом». Современное аппаратное обеспечение перекрывает потребности системы практически в любом случае. Требования к серверному программному обеспечению Веб-сервер, который может выполнять PHP приложения Apache (рекомендуется) разработка продукта выполнена для Apache версии 1.3.х. Однако система также успешно работает на Apache 2.x. IIS (Internet Information Server)(возможна установка) – работа продукта возможна с IIS 5, IIS 6 и IIS 7 и 7,5. Требуется дополнительная настройка для корректной работы с продуктом. Eserv (возможна установка) – продукт тестировался для совместной работы с вебсервером. PHP Для работы продукта требуется наличие PHP версии не ниже 5.x.х. Выбор PHP-версии зависит от требований, предъявляемых вашим хостинг-провайдером, либо от установленной версии PHP на локальном компьютере. Рекомендуется использовать самую последнюю стабильную версию PHP, чтобы исключить возможность появления ошибок, связанных с PHP, а также для большей безопасности проекта на сервере. Для корректной работы продукта требуется наличие следующих расширений PHP: GD – библиотека для работы с изображениями, требуется для построения графиков и диаграмм для модулей статистики, рекламы, техподдержки. Используется для работы механизма CAPTCHA. PHP XML – используется для работы системы обновлений. Библиотека по умолчанию включена в стандартной установке PHP. Для версии под Windows поддержка встроенная. FreeType – библиотека необходима для корректной работы механизма CAPTCHA. Поддержка регулярных выражений (POSIX и Perl-compatible) – необходима для корректной работы внутренних механизмов продукта. Zlib compression – библиотека компрессии используется для работы модуля Компрессии и при работе системы обновлений для уменьшения количества передаваемых данных от сервера к клиенту. 21 Поддержка серверов баз данных MySQL – минимальным техническим требованием является использование версии MySQL 4.1.11 и выше. Для работы с СУБД MySQL требуется установленная поддержка MySQL для PHP. Oracle и Oracle XE – продукт поставляется с поддержкой СУБД Oracle. Для корректной работы продукта необходимо наличие установленной версии Oracle 10g и выше или стабильной версии Oracle XE. В процессе установки система не проверяет, какая версия Oracle используется, полная или XE. Однако такая проверка выполняется в процессе работы системы обновлений. В случае использования версии Oracle, которая не соответствует лицензионному ключу, обновление продукта будет невозможно. выданному Для работы с СУБД Oracle требуется установленная поддержка Oracle для PHP. Для этого требуется, чтобы в PHP было подключено расширение для работы с указанной СУБД: php_oci8.dll. Обратите внимание! Если расширение php_oci8.dll не установлено (отсутствует соответствующая библиотека или закомментировано ее использование в файле php.ini), то при установке программного продукта на сервере с использованием мастера установки, будет недоступен выбор СУБД Oracle. MSSQL - продукт поставляется с поддержкой СУБД MSSQL. Для корректной работы продукта необходимо наличие установленной СУБД MSSQL 9.0 (2005) и выше или MSSQL 2005 XE. В процессе установки система не проверяет, какая версия MSSQL используется, полная или XE. Однако такая проверка выполняется в процессе работы системы обновлений. В случае использования версии MSSQL, которая не соответствует выданному лицензионному ключу, обновление продукта будет невозможно. Важно! Для работы продукта с СУБД MSSQL требуется поддержка ODBC или Native Client. Рекомендуется использовать Native Client как более быстрый и не провоцирующий "повисание" PHP. Если такая поддержка отсутствует, выбор СУБД MSSQL при установке продукта будет недоступен. В дистрибутивах продукта нет различий по используемой базе данных. Если редакция продукта позволяет выбирать БД, то в дистрибутив включена поддержка всех баз данных. Настройки PHP Для корректной работы продукта необходимо установить следующие параметры PHP: 22 1. memory_limit = 64M; Максимальный объем памяти в байтах, который разрешается использовать для работы PHP ядру продукта (в данном случае - 64 Мб). Обратите внимание: указанный параметр может быть изменен непосредственно в файле php.ini; из скрипта с помощью функции: ini_set("memory_limit", "64M"); Примечание: такая строка добавляется в файле /bitrix/php_interface/dbconn.php в момент установки, значение задается пользователем; в файле .htaccess memory_limit 64M с использованием директивы: в файле httpd.conf с использованием директивы: php_admin_value memory_limit 64M php_value Обратите внимание: установка параметров PHP из .htaccess возможна только при выполнении следующих условий: 2. используется веб-сервер Apache или совместимый с ним; файлы .htaccess обрабатываются веб-сервером, т.е. в настройках веб-сервера (httpd.conf) установлена директива: AllowOverride All или другое значение, отличное от None; PHP установлен как модуль Apache (в случае, если PHP работает как CGI, все необходимые значения следует учесть и установить при сборке PHP) file_uploads = On; Параметр определяет возможность загрузки на сервер файлов. Дополнительно к указанному параметру устанавливаются значения следующих параметров: upload_tmp_dir = <имя каталога> Обратите внимание! Необходимо, чтобы указанный каталог существовал и на него были права на запись для пользователя, под которым работает веб-сервер. 3. upload_max_filesize = <достаточный размер> Необходимо, чтобы была корректно настроена работа с сессиями в PHP. Рекомендуется проверить наличие пути для сохранения файлов сессий. 23 Обратите внимание, если параметр session.save_path не настроен в файле php.ini, то по умолчанию будет использовано значение /tmp. В случае, если в параметрах URL на сервере появляется PHPSESSID=..., отключить его можно следующим образом: В файле php.ini установить: session.use_trans_sid = 0 В файле .htaccess установить: php_flag session.use_trans_sid off Для демонстрационного сайта, строка включена в указанный файл, требуется только раскомментировать ее. Примечание C целью безопасности необходимо обязательно отдельную папку хранения сессий для каждого пользователя хостинга. Стандарты и обеспечению технологии. Требования к клиентскому указывать программному Система «1С-Битрикс: Управление сайтом» разработана с использованием и поддержкой следующих технологий: HTML/XHTML – система не накладывает ограничений на использование шаблонов, разработанных с использованием HTML/XHTML. JavaScript – система не накладывает ограничений на использование JavaScript в шаблонах сайта, шаблонах меню и на страницах сайта. AJAX – технология используется в публичном интерфейсе продукта, компонентах 2.0, административной панели управления для ускорения работы с информацией сайта и уменьшения количества передаваемых данных от сервера к клиенту. Система не накладывает ограничений на использование технологии AJAX в публичных разделах сайта. CSS – система предполагает использование различных таблиц каскадных стилей для каждого шаблона сайта. Отдельные таблицы стилей могут быть использованы для настройки представления публичных компонентов и шаблонов отдельных модулей (например, модули форума, техподдержки, опросов). Административная панель управления разработана с учетом возможности создания своих «визуальных тем», которые основаны на разработке отдельных таблиц стилей. Flash – система ограниченно поддерживает технологию Macromedia (ныне Adobe) Flash. Элементы Flash могут быть использованы: в качестве элементов оформления в шаблонах сайтов; 24 в качестве загруженных в систему рекламных баннеров; как интерактивные элементы, взаимодействующие с системой; RSS – продукт поддерживает стандарт RSS версий 0.92 и 2.0. RSS используется для организации обмена информацией между модулями Информационные блоки, Блоги и Форум. CommerceML – система реализована с поддержкой стандарта CommerceML версии 1.0. Поддержка стандарта позволяет обеспечить обмен информацией между «1C-Битрикс: Управление сайтом» и системой программ «1C: Предприятие» версий 7.7 и 8.х. CSV – система использует стандарт CSV для организации обмена данными модуля информационных блоков с другими системами. Поддержка браузеров – программный продукт разработан с учетом поддержки наиболее распространенных браузеров. Административная часть оптимизирована для работы с ними. Показ публичной части сайта не зависит от типа браузера. Известные проблемы: Работа визуального редактора может функционально использовании браузеров различных типов. некоторые функции API могут производить HTML код, не соответствующий стандарту XHTML, и не полностью проходить проверку соответствия стандарту, указанному в объявлении типа документа <!DOCTYPE>. отличаться при Установка продукта «1С-Битрикс: Управление сайтом» В главе описаны предварительные шаги для установки продукта, шаги мастера установки, а также выбор и первоначальная настройка решений для быстрого развертывания своего проекта. Решения — это дистрибутивы, потребности пользователей. адаптированные под различные типовые Предварительные операции Продукт «1С-Битрикс: Управление сайтом» поставляется в виде архивов .zip и .tar.gz для версий PHP 5. Для начала установки загрузите архивные файлы продукта «1C-Битрикс: Управление сайтом» на сервер (или локальный компьютер). Распакуйте архив в корневой каталог вашего сайта. Для распакованных файлов продукта вам потребуется примерно 60-120 Мб свободного дискового 25 пространства в зависимости от редакции продукта. Для оценки полного размера необходимо дополнительно прибавить размер самого архива. Внимание! Установка и дальнейшая корректная работа продукта возможна только в корневой папке вашего сайта на хостинге. Для начала процесса установки продукта выполните следующее: Откройте страницу http://<ваш_сайт>/index.php в браузере, заменив фразу <ваш_сайт> на реальный адрес вашего сайта. Следуйте инструкциям Мастера установки. Мастер установки «1C-Битрикс: Управление сайтом» Рассмотрим подробно по шагам процесс установки продукта «1С-Битрикс: Управление сайтом», а также установку решения на примере «»Интернет-магазина. Примечание: Количество шагов в Мастере установки продукта может отличаться в зависимости от вариантов установки. Первый шаг установки (начало установки) Первое окно Мастера установки информирует о начале процесса инсталляции и выводит основную информацию о продукте. Для продолжения установки нажмите кнопку Далее. Второй шаг установки (лицензионное соглашение) 26 Внимательно ознакомьтесь с текстом Лицензионного соглашения. Если вы согласны с его условиями, то установите флаг в поле Я принимаю лицензионное соглашение. Для продолжения установки нажмите кнопку Далее. Третий шаг установки (ввод лицензионного ключа) На данном шаге выполняется ввод лицензионного ключа, а также выбирается база данных, поддержка которой будет осуществляться в системе. 27 В поле Лицензионный ключ введите полученный при покупке лицензионный ключ продукта. Примечание: При установке демонстрационной версии продукта будет доступна опция Я хочу зарегистрировать свою копию продукта и получать обновления, при включении которой будет предложено зарегистрировать свою копию для получения обновлений продукта. Заполнив регистрационные поля, пользователь получает право на обновление продукта в течение демо-периода: В противном случае продукт будет установлен, но обновления будут недоступны. 28 В поле База данных выберите базу данных, поддержка которой будет осуществляться в системе. Важно! Базы данных Oracle и MSSQL доступны только в редакциях Вебкластер и Бизнес веб-кластер. При установке младших редакций чекбоксы выбора баз данных будут неактивны. Важно! При установке продукта обратите внимание на то, что база данных MSSQL будет доступна для выбора в том случае, если в системе настроена поддержка ODBC. Для выбора базы данных Oracle необходимо наличие библиотеки OCI8 (а точнее файла php_oci8.dll). Если система не соответствует указанным требованиям, то базы данных MSSQL и Oracle будут недоступны. Перед установкой продукта на базу данных MSSQL необходимо убедиться в наличии установленного ПО Microsoft SQL Server Native Client. Для баз данных Oracle и MySQL доступна кодировка UTF-8. Для ее подключения установите флажок в поле Установить в кодировке UTF-8. Для корректной поддержки кодировки UTF необходимо проверить, установлен ли в PHP модуль mbstring. Для этого в настройках PHP, в файле php.ini, должно быть: mbstring.func_overload=2 mbstring.internal_encoding=UTF-8 Кодировка сайта Установкой соответствующего флажка можно установить продукт с использованием кодировки UTF-8. UTF-8 (от англ. Unicode Transformation Format — формат преобразования Юникода) — распространенная кодировка, реализующая представление Юникода, совместимое с 8-битным кодированием текста. На данный момент выбор для кодировки HTML-документа стоит между WIN-1251 и UTF-8. Использование кодировки WIN-1251 целесообразно со старыми версиями MySQL (до версии 4.х), которые некорректно работали с UTF-8. Эти недостатки отсутствуют в современных версиях СУБД MySQL. Преимуществом UTF-8 является наличие в ней большого количества спецсимволов, типографских знаков и символов национальных алфавитов. UTF-8 поддерживается всеми современными браузерами, начиная с Internet Explorer 4. Для достижения наибольшей универсальности и полноты использования существующих символов рекомендуется использовать кодировку UTF-8. 29 Для продолжения установки нажмите кнопку Далее. Четвертый шаг установки (предварительная проверка) Выполняется проверка системы на соответствие минимальным техническим требованиям продукта, права доступа к диску, а также даются рекомендации по настройке системы для оптимальной работы сайта. Если ваша система не соответствует минимальным техническим требованиям, то наверху экрана появится красная надпись, описывающая несоответствие. Более подробное описание несоответствия находится в теле страницы. Вы не сможете продолжить установку продукта до устранения несовместимости. Внимание! При установке продукта в кодировке UTF-8 значение параметра mbstring.func_overload должно быть равно 2. Другие значения для данной кодировки неприемлемы. Если при установке продукта в кодировке UTF-8 на этапе предварительной проверки красным отобразятся параметры mbstring.func_overload и mbstring.internal_encoding, 30 то для исправления необходимо в файле php.ini, расположенном в корне сайта, раскомментировать строки: mbstring.func_overload mbstring.internal_encoding UTF-8 2 Если на хостинге используется версия PHP до 5.2.8, то возможно определение параметра overload в файле .htaccess. Примечание. Возможна установка сайта в кодировке cp-1251, если необходимо чтобы значение overload оставалось равным 2. Для этого достаточно использовать значение cp1251 для параметра encoding. Если ваша система не соответствует рекомендованным настройкам системы, то дальнейшая инсталляция возможна. Список таких несоответствий отобразится в теле страницы. Однако после установки рекомендуется привести систему в соответствие с рекомендованными настройками (в дальнейшем, проверить настройки системы можно в форме Проверка сайта административного раздела). Для продолжения установки нажмите кнопку Далее. 31 Пятый шаг установки (создание базы данных) На данном этапе выполняется создание конфигурационного файла соединения с базой данных и загрузка данных в базу. В зависимости от выбранного типа базы данных поля в группе Параметры базы данных будут отличаться. Неизменными будут поля секции Дополнительные параметры. Параметры базы данных для MySQL: На данном шаге устанавливаются параметры связи с базой данных. Заполните поля: Сервер: укажите сервер, на котором работает система управления базами данных (СУБД). Пользователь базы данных: переключатель определяет, создавать ли нового пользователя базы данных в процессе установки или использовать данные существующего пользователя. Имя пользователя: имя (логин) пользователя СУБД для доступа к базе данных. Пароль: пароль пользователя для доступа к базе данных. База данных: переключатель определяет: создавать ли новую базу данных в процессе установки или использовать существующую. Имя базы данных: имя базы данных, в которую будет установлен продукт. Тип таблиц базы данных: выбор между различными типами таблиц для базы данных. 32 Внимание! В большинстве случаев подойдет стандартный тип таблиц. Для сайтов с повышенными требованиями к нагрузке, например, интернет-магазинам, для базы данных MySQL предпочтительнее тип InnoDB. Внимание! Если в процессе установки необходимо создать нового пользователя или новую базу данных, то требуется ввести Логин и Пароль администратора базы данных. Если базы данных ранее не было создано, то обязательно необходимо выбрать новая в поле База Данных. Параметры базы данных для Oracle: Внимание: Перед началом установки нужно настроить окружение веб-сервера: переменная окружения NLS_LANG должна устанавливать кодировку CP1251 (например NLS_LANG=ENGLISH.CP1251) и разделитель десятичной части для чисел должен быть "." - NLS_NUMERIC_CHARACTERS=. Заполните поля: Строка соединения: в это поле нужно ввести либо имя локального экземпляра Oracle (instance), либо имя записи в файле tnsnames.ora, соединение с которой вы желаете установить. Пример имени локального экземпляра Oracle: 33 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 000.000.0.00)(PORT = 0000)))(CONNECT_DATA = (SERVICE_NAME = BX))). Пользователь базы данных: переключатель определяет, создавать ли нового пользователя базы данных в процессе установки или использовать данные существующего пользователя. Имя пользователя: имя пользователя базы данных СУБД Oracle. Пароль: Пароль пользователя для доступа к базе данных. Примечание. Если в процессе установки необходимо создать нового пользователя или новую базу данных, то требуется ввести Логин и Пароль администратора базы данных. Имя и пароль администратора для доступа к базе используются только в момент установки и создания базы данных и пользователя базы данных. Указанные параметры не сохраняются в системе. Внимание! на веб-сервер обязательно должен быть установлен полный клиент Oracle, а не версия клиента RunTime. Параметры базы данных для MSSQL: 34 Заполните поля: DSN: указывается строка соединения с сервером, на котором работает система управления базами данных (СУБД). Минимально в строке соединения можно указать параметры драйвера, который используется для подключения и имя сервера. Опционально можно включить в строку соединения имя пользователя, пароль и другие параметры. Примечание: При задании строки соединения вместо имени сервера иногда рекомендуется указывать имя пользовательского DSN (предварительно необходимо создать данное соединение). Для локального сервера (продукт устанавливается на тот же сервер, где расположена СУБД) параметр обычно имеет значение localhost. Пользователь базы данных: переключатель определяет, создавать ли нового пользователя базы данных в процессе установки или использовать данные существующего пользователя. Имя пользователя: имя (логин) пользователя СУБД для доступа к базе данных. Пароль: пароль пользователя для доступа к базе данных; База данных: переключатель определяет, создавать ли новую базу данных в процессе установки или использовать существующую. Имя базы данных: имя базы данных, в которую будет установлен продукт. Примечание. Если в процессе установки необходимо создать нового пользователя или новую базу данных, то требуется ввести Логин и Пароль администратора базы данных. Имя и пароль администратора для доступа к базе используются только в момент установки и создания базы данных и пользователя базы данных. Указанные параметры не сохраняются в системе. Дополнительные параметры: Эти параметры определяют права доступа к файлам сайта (для всех типов баз данных). 35 Заполните поля: Права на доступ к файлам сайта: права, с которыми будут создаваться файлы. Права должны быть достаточными для доступа веб-сервера на запись. По умолчанию имеет значение 0644; Права на доступ к папкам сайта: права, с которыми будут создаваться каталоги. Права должны быть достаточными для доступа веб-сервера на запись. По умолчанию имеет значение 0755. Примечание: Ручную установку параметров соединения с базой данных (в том числе и максимальный объем памяти для выполнения скрипта) вы можете выполнить в файле /bitrix/php_interface/dbconn.php. Файл будет создан после завершения установки. Для продолжения установки нажмите кнопку Далее. Шестой шаг установки (установка продукта) Автоматический шаг, когда выполняется создание таблиц в базе данных и установка файлов системы. Отслеживание процесса можно вести по графическому индикатору. После завершения процесса создания базы данных система автоматически перейдет к следующему шагу. Седьмой шаг установки (создание администратора) На данном этапе производится настройка сайта и создается учетная запись (бюджет) администратора сайта, которому будут доступны все функции настройки и управления сайтом. После установки системы администратор при необходимости может создать дополнительные учетные записи пользователей с меньшим количеством прав. 36 Поля, отмеченные *, обязательны для заполнения. Логин: логин (имя) администратора сайта для входа в административный раздел сайта. Логин должен быть не короче трех символов. Используйте в логине только латинские буквы и цифры. Пароль: пароль администратора сайта для входа в административный раздел сайта. Используйте в пароле только латинские буквы и цифры. Важно! Для администратора сайта настоятельно рекомендуется использовать сложный пароль длиной более 6 символов. Подтверждение пароля: пароль вводится еще раз для проверки правильности набора. E-Mail: адрес электронной почты администратора сайта (e-mail). Имя: имя администратора сайта. Фамилия: фамилия администратора сайта. Примечание: Введенные пароль и логин в дальнейшем будут использоваться администратором для авторизации при входе в систему. Для продолжения установки нажмите кнопку Далее. 37 Восьмой шаг установки (выбор решения для установки) 38 Выберите подходящее вам решение. Будет запущен один из мастеров для создания сайта в зависимости от выбора решения: Демо-сайт для разработчиков. 1С-Битрикс: Сайт сообщества - это решение для тех, кто создает сайт социального сообщества: клуб любителей кофе, рыбалки, велотуризма и т.д. Корпоративный сайт производственной компании на примере сайта мебельного производства - решение для производственных организаций и компаний для создания корпоративного проекта. Корпоративный сайт услуг на примере сайта банка - решение для организаций и компаний в сфере услуг для создания корпоративного проекта. Информационный портал – решение для тех, кто создает сайт СМИ со своей социальной сетью и сообществами. 1С-Битрикс: Персональный сайт - сайт для пользователя, который хочет создать свое виртуальное представительство в сети. Интернет-магазин - это решение для тех, кто создает свою торговую площадку в Интернете. если выбрать Загрузить из Marketplace, то будет осуществлен переход к девятому шагу Выбор модуля Мастера установки. Девятый шаг установки (выбор модуля) Примечание: Переход к странице выбора модулей осуществляется, если на восьмом шаге установки былo выбрано решение Загрузить из Marketplace. Выберите необходимый сторонний модуль (мастер создания сайта) для загрузки из Marketplace. Нажмите кнопку Далее. 39 Десятый шаг установки (загрузка модуля) Примечание: Переход на этот шаг осуществляется только если былo выбрано решение Загрузить из Marketplace на восьмом шаге установки. Автоматический шаг, на котором происходит загрузка выбранного вами решения (мастера). Отслеживание процесса можно вести по графическому индикатору После завершения процесса система автоматически перейдет к Мастеру создания сайта выбранного решения. Установка демо-сайта для разработчиков Примечание: Переход к этому мастеру осуществляется только если былo выбрано решение Демо-сайт для разработчиков на восьмом шаге установки. 40 Выбор кнопки Далее запустит Мастер создания демо-сайта для разработчиков. Примечание: В случае выбора кнопки Отмена продукт будет установлен в "чистом" виде, без демо-данных. То есть, будет выведена страница с приветственным текстом. Эта функция предназначена для разработчиков проектов. Если цель – ознакомление с продуктом, то пользоваться этой кнопкой не рекомендуется. Первый шаг мастера создания сайта На первом шаге выбирается шаблон дизайна для сайта. Шаблоны отличаются внешним оформлением, представленной информацией на главной странице сайта, а также базовыми настройками. Поставьте флажок у выбранного типа шаблона. Нажмите кнопку Далее. Второй шаг мастера создания сайта На втором шаге работы мастера выбирается цветовая схема для выбранного на первом шаге шаблона дизайна сайта. Для разных типов шаблонов предлагаются разные цветовые схемы. 41 Выберите подходящую вам цветовую схему. Для перехода к следующему шагу нажмите кнопку Далее. Третий шаг мастера создания сайта На данном этапе задаются название вашего сайта, слоган и логотип. 42 Заполните поля Название компании и Слоган компании. Примечание: Если использование названия и слогана компании не предполагается, то эти поля можно оставить пустыми. С помощью кнопки Обзор можно выбрать логотип компании для загрузки на сайт. Внимание! Размер загружаемого файла логотипа не должен превышать 1,5 Мб, формат файлов должен быть: GIF, JPG, PNG. Для перехода к следующему шагу нажмите кнопку Далее. Четвертый шаг мастера создания сайта На данном этапе выбираются сервисы, которые необходимы для создаваемого сайта. После выбора модулей можно приступать к установке сайта. Снимите флажки с сервисов, которые вы не хотите устанавливать. Примечание. Если снять флажки со всех сервисов, то будет установлена только Главная страница, страница авторизации и поиск. Впоследствии через Административную панель можно запустить Мастер повторно и установить нужные сервисы, а также сменить шаблон сайта. 43 Для изменения настроек предназначена кнопка Назад, для запуска процесса установки - кнопка Установить. Ход установки отображается с помощью графического индикатора. Окончание работы мастера После завершения установки выводится информация об успешном завершении работы Мастера создания сайта. Для выхода из мастера нажмите кнопку Перейти на сайт. Откроется публичный раздел созданного демо-сайта. Установка продукта завершена. При необходимости проводится дополнительная настройка системы. Для модуля веб-аналитики производится загрузка CSV файла с данными по привязке IP к странам. Это можно сделать на странице настроек модуля вебаналитики в закладке Страна и город (Настройки > Настройки продукта > Настройки модулей > Веб-аналитика). Чтобы отключить подстановку идентификатора сессии в ссылки на сайте, необходимо добавить в находящийся в корне сайта файл .htaccess директиву php_flag session.use_trans_sid off. Установка этой директивы может не поддерживаться установленной текущей версией Apache. 44 Чтобы включить кеширование изображений, необходимо находящийся в корне сайта файл .htaccess директивы: добавить в ExpiresActive on ExpiresByType image/jpeg "access plus 3 day" ExpiresByType image/gif "access plus 3 day" Установка этих директив может не поддерживаться установленной текущей версией Apache. Примечание: Включение кеширования изображений рекомендуется производить уже после всех отладочных работ на сайте. Установка решения «1C-Битрикс: Управление сайтом» В качестве примера установки любого из решений «1C-Битрикс: Управление сайтом» рассмотрим создание сайта онлайн-магазина (решение Интернет-магазин). Примечание: Переход к этому мастеру осуществляется только если былo выбрано решение Интернет-магазин на восьмом шаге установки. Первый шаг мастера (выбор шаблона) Первое окно информирует о начале работы мастера. На данном шаге выбирается шаблон дизайна для вашего сайта. Шаблоны отличаются внешним оформлением, а также базовыми настройками. Выберите 45 подходящий шаблон сайта. Нажмите кнопку Далее. Второй шаг мастера (выбор темы) На этом шаге работы мастера выбирается цветовая тема для выбранного на первом шаге шаблона дизайна сайта. Для разных шаблонов предлагаются разные цветовые схемы. Выберите подходящую цветовую тему. Для перехода к следующему шагу нажмите кнопку Далее. 46 Третий шаг мастера (информация о сайте) На данном этапе задаются данные о компании. Выберите Логотип сайта, заполните поля Телефон для обратной связи, Время работы, Подпись сайта, Описание сайта, Ключевые слова. Для перехода к следующему шагу нажмите кнопку Далее. 47 Четвертый шаг мастера (информация о магазине) На данном этапе задаются служебные данные о компании. Заполните поля E-mail, Название фирмы, Местоположение фирмы, Адрес фирмы и Банковские реквизиты. 48 Для перехода к следующему шагу нажмите кнопку Далее. Пятый шаг мастера (типы плательщиков) На данном этапе задаются типы плательщиков магазина. Выберите Типы плательщиков, которые будут использоваться на сайте. Для перехода к следующему шагу нажмите кнопку Далее. 49 Шестой шаг мастера (оплата и доставка) На данном этапе задаются способы оплаты и доставки товара. Выберите Способы оплаты и Способы доставки товара, которые будут использоваться на сайте. Для перехода к следующему шагу нажмите кнопку Далее. 50 Седьмой шаг мастера (установка решения) Автоматический шаг, на котором устанавливаются все настройки решения. Отслеживание процесса можно вести по графическому индикатору. После завершения процесса установки система автоматически перейдет к следующему шагу. 51 Восьмой шаг мастера (завершение установки) Установка и настройка решения завершена Нажмите кнопку Перейти на сайт для перехода на главную страницу сайта. Нажмите кнопку Создать мобильный магазин для перехода к мастеру создания интернет-магазина для мобильных устройств. Мастер создания мобильного магазина 1. Выбор сайта. На данном этапе указывается директория размещения мобильного интернет-магазина. 52 2. Информация о сайте. Указывается информация о мобильном интернет-магазине - контакты, логотип, название. 53 3. Установка решения: копирование и установка мобильного магазина. 4. Завершение настройки. Кнопка Перейти на сайт служит для перехода на главную страницу мобильного магазина. 54 Установка стороннего решения из Marketplace Установка стороннего решения из MarketPlace может быть осуществлена как на этапе установки продукта «1C-Битрикс: Управление сайтом», так и после запуска проекта. До установки продукта В качестве примера установки любого стороннего решения из Marketplace рассмотрим создание типового сайта лечебных учреждений, клиник (решение Сайт медицинской клиники). Примечание: Переход на этот шаг осуществляется, только если былo выбрано решение Загрузить из Marketplace на восьмом шаге установки. 55 Первый шаг мастера (выбор шаблона) Первое окно информирует о начале работы мастера. На данном шаге выбирается шаблон дизайна для вашего сайта. Шаблоны отличаются внешним оформлением, а также базовыми настройками. Выберите подходящий шаблон сайта. Нажмите кнопку Далее. 56 Второй шаг мастера (выбор темы) На этом шаге работы мастера выбирается цветовая тема для выбранного на первом шаге шаблона дизайна сайта. Для разных шаблонов предлагаются разные цветовые схемы. Выберите подходящую цветовую тему. Для перехода к следующему шагу нажмите кнопку Далее. 57 Третий шаг мастера (настройка решения) На данном этапе задаются данные о компании. Заполните необходимые данные в соответствующих полях. Для перехода к следующему шагу нажмите кнопку Далее. 58 Четвертый шаг мастера (установка решения) Автоматический шаг, на котором устанавливаются все настройки решения. После завершения процесса установки система автоматически перейдет к следующему шагу. Пятый шаг мастера (завершение установки) Нажмите кнопку Перейти на сайт для перехода на главную страницу сайта. 59 После установки Установка стороннего решения из Marketplace после установки продукта «1C-Битрикс: Управление сайтом» возможно двумя способами: 1. в публичной части нажатием кнопки Протестировать новое решение, расположенной на панели управления: Далее действия аналогичны описанным в уроке по установке стороннего решения до установки продукта. 2. в административной части в Каталоге решений (Настройки > Marketplace > Каталог решений): Выбрав подходящее решение из списка в Marketplace, вы перейдете на страницу этого продукта: 60 На странице решения выбираются необходимые действия: Купить - товар добавится в Корзину на сайте Marketplace, и вы перейдете к выбору оплаты и покупки данного решения; Демо-версия - вы перейдете в демо-раздел на сайте разработчика, чтобы в реальном времени попробовать в действии данное решение; Попробовать - вы перейдете в раздел обновлений Marketplace для скачивания и установки демо-версии на ваш сайт. Установить - вы перейдете в раздел обновлений Marketplace для скачивания и установки решения на ваш сайт (этот вариант доступен при бесплатном распространении решения). После выбора вариантов Попробовать или Установить вы перейдете в раздел Обновление решений (Настройки > Marketplace > Обновление решений). Нажав кнопку Загрузить, необходимо принять лицензионное соглашение, далее начнется загрузка: 61 После загрузки решения нажмите кнопку Установить для установки модуля решения. Далее необходимо перейти в раздел Список мастеров (Настройки > Настройки продукта > Список мастеров), выбрать в меню действий пункт Установить нужного мастера установки решения. 62 Дальнейшие шаги работы мастера установки решения аналогичны описанным в уроке по установке стороннего решения до установки продукта. Обновление стороннего решения из Marketplace Для обновления стороннего решения необходимо перейти на страницу Установка обновлений (Настройки > Marketplace > Обновление решений): 63 По ссылке Посмотреть список обновлений осуществляется переход на закладку Список обновлений, где указывается какое решение можно обновить: Активация купона стороннего решения из Marketplace Купон - это своего рода лицензионный ключ, позволяющий легально использовать стороннее коммерческое решение, но при этом не спрашивать у него код ключа самого продукта «1C-Битрикс». На закладке Активация купона осуществляется регистрация стороннего решения с помощью ввода кода купона: Обратите внимание, купон нельзя активировать на демо-версии продукта. 64 Установка продукта с помощью BitrixSetup Установка «1С-Битрикс: Управление сайтом» на удаленный сервер возможна посредством загрузки дистрибутива по протоколу FTP или с помощью скрипта BitrixSetup. Для загрузки по FTP достаточно скачать и распаковать на локальном компьютере коммерческую или пробную версию. Затем с помощью любого FTP-клиента загрузить дистрибутив в корневую папку веб-сервера, либо закачать архив на удаленный сервер и распаковывать уже там. Во избежание возможных ошибок при загрузке, а так же частой проблемы с различием прав доступа пользователя FTP и пользователя сервера Apache настоятельно рекомендуется использовать специально созданный скрипт BitrixSetup. С помощью скрипта BitrixSetup вы сможете загрузить дистрибутив пробной или коммерческой версии продукта с сайта www.1c-bitrix.ru непосредственно на ваш сайт, минуя промежуточную загрузку дистрибутива на локальный компьютер. Кроме того, скрипт позволяет автоматически распаковать дистрибутив при отсутствии возможности доступа к сайту по SSH или с помощью внешних программ. Перейдите по ссылке http://www.1c-bitrix.ru/download/cms.php на страницу с дистрибутивами продукта. Перейдите на закладку BitrixSetup. Нажмите ссылку Скачать. В открывшемся диалоговом окне выберите вариант Сохранить. Сохраните загружаемый файл с именем bitrixsetup.php. Установите FTP соединение с сервером, на котором планируется размещение сайта. Загрузите сохраненный на локальном компьютере файл bitrixsetup.php в корневую директорию вашего сайта на сервере. Внимание! Установка и дальнейшая корректная работа продукта возможна только в корневой папке сайта на сервере. Откройте страницу http://<ваш сайт>/bitrixsetup.php в браузере, заменив строку <ваш сайт> на реальный адрес вашего сайта. В браузере отобразится страница загрузки дистрибутива. 65 Внимание! Убедитесь, что веб-сервер обладает достаточными правами для создания и записи файлов на хостинге. В поле Выбор дистрибутива выберите Управление сайтом и с помощью выпадающего списка укажите редакцию продукта, которую вы хотите установить. Укажите версию продукта, которая вам необходима: демонстрационная или коммерческая. Если вы выбрали коммерческую версию, то введите лицензионный ключ в поле Лицензионный ключ. Примечание: Установка коммерческой версии без лицензионного ключа невозможна. Установка демоверсии возможна как с демонстрационным ключом, полученным на сайте компании «1С-Битрикс», так и без ключа вообще. Нажмите кнопку Загрузить. Начнется процесс загрузки дистрибутива на сайт. 66 С помощью скрипта BitrixSetup будет установлено соединение вашего сервера непосредственно с сервером компании «1C-Битрикс». Дистрибутив выбранной редакции продукта будет скопирован в корневую директорию сайта на сервере, автоматически распакован, а затем в браузере откроется окно Мастера установки продукта. С помощью кнопки Назад можно вернуться в раздел Выбор дистрибутива, чтобы изменить значения параметров загрузки (например, редакцию дистрибутива). Важно! В целях безопасности скрипт bitrixsetup.php из корневого каталога сайта автоматически удаляется после распаковки дистрибутива. Регистрация продукта С самого начала все коммерческие версии продуктов «1C-Битрикс» поставлялись в исходных текстах. Таким образом, предоставляется клиентам уверенность и контроль над продуктом. Даже лицензия предусматривает право на изменение исходных текстов. Но все пробные версии продуктов «1C-Битрикс» поставлялись закодированные с помощью Zend Optimizer, и для работы пробной версии продукта требовалось установить Zend Optimizer на сервер. Это создавало проблемы при развертывании продукта и при установке пробных версий продукта на хостинге, пробные версии работали существенно медленнее, чем коммерческие версии в исходных текстах, закодированный код не компилировался оптимизаторами PHP кода. Внимание! Начиная с версии 9.1 в продуктах «1C-Битрикс» для обеспечения 30тидневного периода демо-версий и защиты решений партнеров используется собственный обфускатор PHP кода, который защищает несколько важных системных файлов в пробных версиях продуктов «1C-Битрикс», а также автоматически защищает решения партнеров. В коммерческих версиях по-прежнему все файлы остались в свободном исходном коде. Перед началом использования коммерческой произвести активацию лицензионного ключа. версии системы вам необходимо Лицензионный ключ - специальный ключ (последовательность символов), который подтверждает право на использование копии продукта. Для демо-версии этот шаг не обязателен, но рекомендуется. Внимание! С использованием одного и того же лицензионного ключа продукт «1CБитрикс» можно установить не более двух раз. Продукт «1C-Битрикс» может быть временно установлен на дополнительный компьютер (ЭВМ) с целью использования исключительно для работ по разработке, тестированию и/или наполнению сайта при условии отсутствия любого «внешнего» доступа к ней (в том числе из сети 67 Интернет или извне локальной сети пользователя). Указанная копия продукта «1CБитрикс» должна быть немедленно удалена после завершения вышеперечисленных работ. При получении ошибки о превышении допустимого количества установок продукта необходимо обратиться в Техподдержку «1C-Битрикс». Регистрация коммерческого продукта Выполнив операцию регистрации продукта, вы получите доступ к бесплатным последним обновлениям системы, а также к службе Технической поддержки компании «1СБитрикс» сроком на 1 год, где вы сможете получить консультацию по вопросам, связанным с функциональными возможностями, настройкой и работой системы. Кроме того, вы также получите доступ к закрытому форуму компании, где можно принять участие в обсуждении интересующей темы, а также вынести на обсуждение возникший вопрос. Для регистрации продукта: Перейдите в Панель управления. Перейдите на страницу Настройки > Обновления. Откроется форма для получения обновлений. В этой форме вы увидите сообщение об ошибке: Нажмите кнопку Активировать ключ. Откроется форма следующего вида: 68 Поля, отмеченные *, обязательны для заполнения. Заполните поля: Полное юридическое название компании-владельца продукта или ФИО частного лица: укажите название организации, которая является владельцем ключа. В случае если владельцем ключа является частное лицо, в данном поле указывается его имя. Список адресов, включая тестовые, по которым будет доступна данная копия продукта "1С-Битрикс: Управление сайтом": укажите адреса сайтов, управление которыми будет осуществляться с помощью системы с данным лицензионным ключом. Телефон владельца данной копии продукта: укажите номер контактного телефона вместе с кодом города владельца продукта. E-mail владельца для связи по вопросам лицензирования и использования программного продукта: укажите адрес электронной почты, по которому, в случае необходимости, сотрудники компании «1СБитрикс» смогут связаться с вами. Контактное лицо, ответственное за использование данной копии программного продукта: укажите ФИО ответственного контактного лица. E-mail контактного лица: укажите адрес электронной почты контактного лица. Телефон контактного лица: укажите телефон контактного лица. Прочая контактная информация: в данном поле вы можете указать дополнительную контактную информацию: адреса электронной почты, почтовый адрес, номера контактных телефонов и т.д. 69 У меня нет аккаунта на сайте www.1с-bitrix.ru, я хочу создать новый: если вы не являетесь зарегистрированным пользователем на сайте компании «1С-Битрикс», то установите флаг в данное поле. После активации лицензионного ключа вы будете зарегистрированы на сайте компании с указанными в нижеследующих полях регистрационными данными. Используя указанные регистрационные данные, вы можете обратиться в службу Технической поддержки компании «1С-Битрикс», а также получить доступ к закрытому форуму на сайте компании. Я зарегистрирован на сайте…: отметьте эту опцию, если вы зарегистрированы на сайте www.1с-bitrix.ru и укажите ваш логин. Нажмите Активировать ключ. Лицензия активируется, вы можете приступать к работе с вашим сайтом. Примечание: Если по каким-либо причинам лицензионный ключ уже был ранее активирован, то вам предложат только зарегистрировать продукт в системе обновлений. Регистрация демо-версии коммерческим ключом После ознакомления с демо-версией продукта вы можете зарегистрировать ее и перевести в разряд коммерческих. Для этого необходимо после приобретения лицензии ввести лицензионный ключ одним из двух способов: на закладке Установка обновлений (Настройки > Обновления), нажав на кнопку Ввести лицензионный ключ 70 на закладке Система обновлений страницы настроек Главного модуля (Настройки > Настройки продукта > Настройки модулей > Главный модуль) в поле Лицензионный ключ После этого необходимо провести активацию ключа, как это было описано в главе Регистрация коммерческого продукта. После коммерческой регистрации станет возможным загрузка исходных кодов, таким образом вы получите полнофункциональный продукт. Система обновлений Система обновлений, как и техподдержка, осуществляется в течение года после регистрации приобретенной лицензии. Для получения в дальнейшем права на обновления необходимо оформить продление техподдержки и обновлений. Общие сведения Система обновлений служит для осуществления взаимодействия между копией продукта (клиент) и сервером обновлений. Основными видами взаимодействия являются: обновление модулей продукта до последней версии (это позволяет расширить функциональные возможности модулей и исправить обнаруженные в них ошибки); 71 загрузка новых модулей, которые доступны в соответствии с лицензией; загрузка языковых файлов (файлов языкозависимых сообщений продукта на разных языках); загрузка системы помощи на разных языках; регистрация копии продукта с помощью лицензионного ключа; загрузка исходных текстов скриптов модулей продукта; добавление купонов на дополнительные сайты. Установка обновлений выполняется со страницы Обновления (Настройки > Marketplace > Обновление платформы). Некоторые термины системы обновлений Ядро продукта - каталог /bitrix/modules/ (пути везде задаются относительно корневой папки, если явно не указано противное). Часто в понятие ядра продукта включается также структура базы данных продукта. Служебная область - все подкаталоги каталога /bitrix/, за исключением каталогов /bitrix/modules/ (т.е. ядра продукта) и /bitrix/updates/. Часто в понятие служебной области включаются так же данные служебных таблиц базы данных (например, записи таблицы b_event_type). Каталог системы обновлений - каталог /bitrix/updates/. Этот каталог предназначен исключительно для работы системы обновлений и не может использоваться в других целях. Публичная часть - все каталоги, относящиеся к данной копии продукта, за исключением ядра продукта, служебной области и каталога системы обновлений. Часто в понятие публичной части включаются все данные базы данных, за исключением данных служебных таблиц. Регистрация копии продукта - снятие с данной копии продукта ограничений, которые имеет демонстрационная версия (например, ограничение по времени работы). Лицензионный ключ - специальный ключ (последовательность символов), который подтверждает право на использование копии продукта. Купон на дополнительный сайт - специальный ключ (последовательность символов), который подтверждает право на создание одного дополнительного сайта в рамках данной копии продукта. Сервер обновлений - сервер, который отдает обновления продукта системе обновлений. Адрес сервера обновлений задается на странице глобальных настроек главного модуля (должен иметь значение www.1c-bitrix.ru или www.bitrixsoft.com). 72 Важные замечания по работе системы обновлений Система обновлений не изменяет публичную часть. Служебная область изменяется только в рамках необходимости, при этом существующие файлы и записи не изменяются (т.к. они уже могли быть изменены владельцем копии продукта под свои нужды). Ядро продукта может быть изменено системой обновлений сколь угодно сильно (при этом, конечно, обеспечивается обратная совместимость). Важно! Если вы самостоятельно изменили хотя бы один файл ядра продукта или структуру базы данных, то автоматическая установка обновления может иметь непредсказуемый результат. Система обновлений не собирает и не передает никаких конфиденциальных данных копии продукта, на которой она работает. Система обновлений обменивается с сервером обновлений исключительно техническими данными, напрямую необходимыми для корректной работы системы обновлений (например, текущие версии модулей или дата последнего обновления системы помощи). Система обновлений производит технически сложную серьезную модификацию ядра продукта. Если эта модификация будет произведена с ошибками, то сайты, работающие на этом ядре, могут оказаться неработоспособными. Перед установкой обновлений рекомендуется убедиться в наличии резервной копии как базы данных, так и скриптов ядра продукта и служебной области. Рекомендуется для проведения процедуры обновления выбирать время, когда нагрузка на сервер минимальна. При возникновении проблем с установкой обновления вам необходимо незамедлительно обратиться в службу технической поддержки компании «1С-Битрикс». Страница системы обновлений После выбора в левом меню административной части сайта пункта Обновления вы попадаете на страницу системы обновлений. Если на странице системы обновлений выводится сообщение о том, что лицензионный ключ не верен (или лицензия не найдена), то возможны следующие ситуации: если у вас уже есть лицензионный ключ, то этот ключ необходимо ввести в соответствующее поле на странице системы обновлений или в соответствующее поле на странице глобальных настроек главного модуля; если у вас нет лицензионного ключа, то вы можете запросить пробный лицензионный ключ. Для этого воспользуйтесь соответствующей ссылкой на странице системы обновлений. Полученный лицензионный ключ нужно ввести в соответствующее поле на странице системы обновлений или в соответствующее поле на странице глобальных настроек главного модуля. Если на главной странице системы обновлений выводится сообщение о том, что лицензионный ключ не активирован, то вам необходимо нажать кнопку Активировать ключ и заполнить все поля открывшейся формы. После этого лицензионный ключ будет активирован. 73 Если на странице системы обновлений выводится сообщение о том, что доступно обновление самой системы обновлений, то необходимо установить это обновление. До установки этого обновления остальной функционал системы будет недоступен. Если в систему введен валидный активный лицензионный ключ и установлено последнее обновление самой системы обновлений, то на странице системы обновлений вы можете выполнить следующие действия: Просмотреть и загрузить обновления модулей системы. Просмотреть и загрузить языковые файлы. Выполнить загрузку исходных текстов продукта, если позволяет лицензия. Перед загрузкой исходных текстов ядро продукта должно быть обновлено до последней версии (т.е. никакие обновления ядра продукта не должны быть доступны). Обратите внимание, что в случае медленного канала или большой загрузки сервера загрузка исходных текстов может занять некоторое время. Выполнить активацию купона на продление технической поддержки, на добавление дополнительных сайтов или на переход на другую редакцию. Включить или отключить установку бета-версий обновлений модулей. Просмотреть журнал установки обновлений. Журнал содержит информацию о 20 последних установленных обновлениях, включая информацию по статусам и ошибкам установки. Настройка системы обновлений Настройки системы обновлений осуществляются на закладке Система обновлений страницы настроек Главного модуля (Настройки > Настройки продукта > Настройки модулей > Главный модуль). 74 Лицензионный ключ - указывается лицензионный ключ продукта. Если коммерческая версия была уже зарегистрирована, то в этом поле будет уже указан лицензионный ключ. Имя сервера, содержащего обновления - указывается адрес сервера обновлений. По умолчанию в этом поле уже указан сервер обновлений. Для настройки обновления продукта через прокси-сервер необходимо заполнить соответствующие поля: Адрес прокси для системы обновлений; Порт прокси для системы обновлений; Имя пользователя прокси; Пароль прокси. Усиленная проверка корректности установки обновлений - включение данной опции дает возможность контролировать корректность установки обновлений. Использование этой функции системы несколько замедляет процесс установки обновления, но позволяет получить информацию об успешности копирования тех или иных файлов. В случае некорректной установки будет выведено сообщение с описанием ошибки. 75 Загружать только стабильные обновления - некоторые обновления модулей системы доступны уже на стадии бета-тестирования. Эта опция соответствует пункту Включить/Выключить установку бета-версий на закладке Дополнительно страницы Системы обновлений (Настройки > Marketplace > Обновление платформы). Автоматически проверять наличие обновлений - система может автоматически проверять выход новых обновлений. Периодичность проверки можно указать в выпадающем списке: Не проверять, Каждый день, Раз в неделю и Раз в месяц. Остановить автоматическую проверку при возникновении ошибок - при отмеченной опции при возникновении ошибок автоматическая проверка обновлений будет остановлена. Не использовать архиватор - при отмеченной опции файлы с обновлениями архивироваться не будут. Продолжительность шага пошаговой загрузки обновления (сек) указывается продолжительность шага загрузки в секундах для пошаговой загрузки файлов обновления. Обновление ядра продукта Система обновлений производит технически сложную серьезную модификацию ядра продукта. Если эта модификация будет произведена с ошибками, то сайты, работающие на этом ядре, могут оказаться неработоспособными. При возникновении проблем с установкой обновления вам необходимо незамедлительно обратиться в службу технической поддержки компании «1С-Битрикс». Важно! Перед установкой обновлений рекомендуется убедиться в наличии резервной копии как базы данных, так и скриптов ядра продукта и служебной области. Рекомендуется для проведения процедуры обновления выбирать время, когда нагрузка на сервер минимальна. Для загрузки обновлений модулей системы выполните следующие действия: С помощью кнопки , расположенной на административной панели, перейдите на страницу Обновления. 76 Для установки всех обновлений модулей системы нажмите кнопку Установить рекомендуемые обновления. Если вы не хотите устанавливать все обновления сразу, то на закладке Список обновлений отметьте только необходимые для установки обновления и нажмите кнопку Установить обновления. При необходимости процесс обновлений можно остановить, нажав кнопку Остановить установку. При этом система не прервет обновление сразу и полностью, а завершит загрузку модуля, который обновлялся в момент нажатия этой кнопки. Если в ходе установки произошел сбой, то система обновлений уведомит вас об этом и нужно будет просто повторить процесс. Если вы выполняете обновление модулей поочередно, а не всех сразу, то после установки каждой «порции» модулей вам необходимо воспользоваться кнопкой Проверить обновления и затем установить выбранные модули. Важно! В случае наличия связанных обновлений, должны быть выбраны все связанные обновления, либо не выбрано ни одно из них. Примечание. Внимательно прочитайте описания обновлений модулей. Они содержат важную информацию по установке обновления, кроме того могут содержать предупреждения о возможных проблемах в работе. Просмотр и загрузка языковых файлов С помощью системы обновлений вы можете установить дополнительные языковые файлы интерфейса. Для этого выполните следующее: 77 Перейдите на закладку Список обновлений. В секции опциональных обновлений отметьте необходимые языковые файлы. Нажмите кнопку Установить обновления. Контролировать процесс установки вы сможете по полосе прогресса. В результате будет выведено сообщение об успешной установке либо о возникших ошибках. Примечание: Подробнее про установку и загрузку языков в систему смотрите в уроке Управление языками курса Администратор Базовый. Загрузка исходных текстов После регистрации демо-версии коммерческим ключом и полного обновления системы до последней версии станет доступна функция загрузки исходных текстов. 78 Нажмите кнопку Загрузить исходные тексты, расположенную на странице Система обновлений (Настройки > Marketplace > Обновление платформы). Система произведет загрузку текстов с сайта компании «1С-Битрикс». Выполнив загрузку исходных текстов, вы получите полнофункциональную копию продукта с открытыми текстами. Внимание! При установке коммерческой версии продукта и использовании коммерческого ключа, пункт загрузки исходных текстов будет отсутствовать, так как коммерческая версия продукта поставляется сразу в исходных кодах. Активация купона Система «1С-Битрикс: Управление сайтом» позволяет создавать несколько сайтов с применением одной копии (лицензии) продукта, размещая ядро и базу данных системы в единственном экземпляре на сервере. Максимальное количество сайтов на одной копии продукта ограничено лицензией. Если необходимо создать дополнительные сайты сверх текущего максимального количества, то следует приобрести лицензии на дополнительные сайты. При приобретении лицензий на дополнительные сайты вам выдаются купоны на дополнительные сайты (один купон - одна дополнительная лицензия). Дополнительные лицензии (и купоны соответственно) зависят от редакции продукта. Например, для создания дополнительного сайта в продукте редакции Эксперт необходимо приобрести лицензию (купон) на дополнительный сайт для редакции Эксперт. Чтобы всегда иметь доступ к последним обновлениям продукта и технической поддержке, необходимо по окончании периода активности обновлений приобрести купон на продление технической поддержки и получение обновлений. Если вы уже используете «Старт», «Стандарт» или другую редакцию продукта, то вы можете расширить возможности вашего сайта, осуществив переход на более высокую редакцию продукта. Для этого вам необходимо приобрести купон для перехода на нужную вам редакцию. После получения купона вам необходимо его активировать, для этого: Откройте страницу Обновления (Настройки > Marketplace > Обновление платформы). Перейдите на закладку Активация купона. 79 Введите купон в соответствующее поле и нажмите кнопку Активировать купон. Типичные ошибки При попытке обновления выдаётся ошибка "Ошибка соединения с сервером обновлений: [110] Connection timed out." Ошибка свидетельствует о том, что скрипт обновления не может подключиться к серверу обновлений www.bitrixsoft.ru на порт 80. Причины могут быть следующие: не доступны функции работы с сокетами, в частности, fsockopen(); на сервере запрещены исходящие соединения к 80 порту; недостаточный объем памяти на сервере. Часто проявляется на VPS с виртуализацией OpenVZ и 256 Мб RAM. проблема в работе сети. Вам необходимо обратиться к администратору сервера, предоставив описание ошибки. Ошибка при обновлении: [SITE_LICENSE_VIOLATION] Превышено количество лицензированных сайтов Эта ошибка свидетельствует о том, что в системе либо не зарегистрировано ни одного сайта, либо все сайты деактивированы, либо превышено количество активных сайтов, разрешенных текущей лицензией. Для решения проблемы и получения возможности загрузки и установки обновлений, необходимо или зарегистрировать в системе хотя бы один сайт, или активировать существующий из раздела, или деактивировать сайты до количества, разрешенных текущей лицензией: Рабочий стол > Настройки > Настройки продукта > Сайты > Список сайтов. 80 Ошибка при обновлении [ERROR_WRONG_CODE] Система обновлений продукта привязывается к конкретной установке и "запоминает" состояние системы после очередного обновления. Ошибка возникает в том случае, если текущее состояние не соответствует тому, которое было на момент последнего обновления. Этот механизм призван пресечь попытки обновления на одном лицензионном ключе неограниченное количество установок продукта. Согласно лицензионному соглашению, на каждый лицензионный ключ допускается две установки системы: одна публичная и одна локальная (для разработчика), но недоступная из Интернета. С учетом этого система настроена так, что сохраняет данные о двух установках. При этом, если не переносить копию с локальной машины на сервер и назад - можно обновлять независимо обе копии, проблем не возникнет. Если же вам необходимо переносить продукт на локальную машину, то следует обновлять только одну копию из двух: либо на сервере, либо локальную (зависит от ваших предпочтений). Аналогичным образом следует поступать при переносе сайта на новый сервер: скопировать структуру файлов и БД на новый сервер, после этого, не обновляя продукт на старом, удалить его сразу после обновления DNS. Дополнительные моменты В главе рассказывается о различных моментах в работе продукта: от настройки сервера до ошибок, возникающих при работе пользователей и функционировании баз данных. Удаление приложения Удаление приложения на удаленном компьютере состоит в удалении базы данных и всех файлов и папок из корневой папки вашего веб-сервера. Необходимый уровень прав на сервере Настройка прав на сервере хостинг-провайдера может быть индивидуальна, но прежде всего должны быть установлены права на чтение/запись из скрипта для пользователя, под которым запущен веб-сервер Apache. При этом на разделяемом хостинге другие пользователи на этой же машине не должны иметь права на чтение/запись в ваши файлы через свои скрипты. Также желательно, чтобы пользователь по FTP мог перезаписывать эти файлы, и в то же время файлы, закаченные по FTP, могли быть перезаписаны из скрипта. Проблема в том, что у каждого хостинг-провайдера своя политика безопасности и свои настройки. 81 На некоторых хостингах процесс сервера запускается по умолчанию под пользователем nobody:группа. Файлы, которые пользователь хостинга хранит на своей машине, должны быть доступны Apache. Это означает, что они либо имеют атрибут чтение для всех, либо же пользователь-владелец файлов обязан принадлежать к той же самой группе, что и сервер. В последнем случае файлы должны быть доступны для чтения членами группы (именно такие права для них устанавливают по умолчанию FTP-серверы). При таком подходе страдает безопасность: раз все пользователи принадлежат к одной и той же группе, то они могут читать файлы друг друга. Представим, что пользователь открыл в браузере страницу, запустившую CGI-скрипт. Так как скрипт в действительности запустил сервер Apache, запущенный под nobody, то он будет выполняться с правами этого пользователя. Следовательно, для того чтобы скрипт смог записать какой-нибудь файл в директорию хостинг-клиента, для нее должен стоять атрибут записи для членов группы. Мы видим, что при таком подходе хостингпользователи также могут и изменять файлы друг друга. «1С-Битрикс: Управление сайтом» работает с любым уровнем прав, который вы указали ему при настройке (установке). Чтобы продукт корректно работал с папками и файлами с заданным CHMOD (писал и создавал), вам нужно установить в /bitrix/php_interface/dbconn.php следующие константы: define("BX_FILE_PERMISSIONS", 0644); define("BX_DIR_PERMISSIONS", 0755); Это типовые настройки прав на большинстве хостингов. Если возникают какие-то проблемы с работой, то обращайтесь в техническую поддержку вашего хостинга. Самостоятельно установить нужный уровень прав можно, используя команду CHMOD в консольном режиме. Следующий вызов устанавливает уровень прав доступа и для файлов, и для папок: chmod -R 644 * Для установки прав только на папки можно использовать следующий код: find . -type d -exec chmod 0755 {} ';' Если надо установить разные права на папки и файлы, то выполните следующий скрипт: <?php define("BX_FILE_PERMISSIONS", 0644); define("BX_DIR_PERMISSIONS", 0755); 82 function chmod_R($path) { $handle = opendir($path); while ( false !== ($file = readdir($handle)) ) { if ( ($file !== ".") && ($file !== "..") ) { if ( is_file($path."/".$file) ) { chmod($path . "/" . $file, BX_FILE_PERMISSIONS); } else { chmod($path . "/" . $file, BX_DIR_PERMISSIONS); chmod_R($path . "/" . $file); } } } closedir($handle); } $path=dirname(__FILE__); umask(0); chmod_R($path); echo $path; ?> Для установки рекурсивно прав раздельно на файлы и папки можно использовать некоторые программы FTP клиентов. Например, FlashFXP версии 3.хх. FlashFXP позволяет также разделять права для файлов и папок, но выполняет смену прав медленнее. Обратите внимание на установки соответствующих флагов: 83 Separately set File and права на файлы и папки); Folder attributes (Раздельно устанавливать Apply changes to all subfolders and files (Рекурсивная установка прав на подпапки и файлы) Для каждой из установок настраивается свой уровень: Установка прав на папки Установка прав на файлы Обратите внимание! Модуль Управление структурой позволяет просмотреть права на доступ к файлам и папкам, установленные на уровне системы. 84 При просмотре файловой структуры в Менеджере файлов в столбце Права на доступ отображается уровень прав на доступ к файлам и папкам, информация о владельце и группе пользователей (для *NIX). Использование файлов .htaccess .htaccess (от англ. hypertext access) - файл дополнительной конфигурации вебсервера Apache. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельном каталоге без изменения главного конфигурационного файла httd.conf. Файл .htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Файл .htaccess может быть размещен в любом каталоге. Директивы этого файла действуют на все файлы в текущем каталоге и во всех его подкаталогах, если только эти директивы не переопределены директивами нижележащих файлов .htaccess. Для того, чтобы файлы .htaccess можно было использовать, необходимы соответствующие настройки главного конфигурационного файла httpd.conf (значение директивы AllowOverride должно быть установлено как All). Пути к файлам и каталогам должны указываться от корня сервера. При внесении изменений в файл .htaccess нет необходимости перезапускать сервер. Файл .htaccess проверяется при каждом обращении к серверу, так что изменения вступают в силу сразу после их внесения. Так как файл является служебным, он не доступен пользователям из веб-браузера. Обратите внимание! При установке на шаге предварительной проверки производится проверка обработки файлов .htaccess. В демонстрационном сайте файл .htaccess по умолчанию содержит следующие директивы: Options -Indexes ErrorDocument 404 /404.php #php_flag allow_call_time_pass_reference 1 #php_flag session.use_trans_sid off #php_value display_errors 1 php_value mbstring.func_overload 2 85 php_value mbstring.internal_encoding UTF-8 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] AddType application/x-httpd-php .ico DirectoryIndex index.php index.html ExpiresActive on ExpiresByType image/jpeg "access plus 3 day" ExpiresByType image/gif "access plus 3 day" Внимание! Для активизации закомментированных PHP директив необходимо снять знак комментария (#) в начале строки. Если на вашем сервере Apache не установлено разрешение на использование PHP-флагов, выполнение данных директив приведет к возникновению внутренней ошибки (500). В случае возникновения ошибки необходимо снова закомментировать директивы, поместив в начало каждой знак #. Для остальных PHP директив, не обозначенных знаком комментария (#), добавлена проверка на наличие необходимых модулей Apache в системе. Выполнение данных директив не приведет к возникновению ошибки в системе. 1. PHP директива php_flag session.use_trans_sid off производит отключение подстановки идентификатора сессии в ссылке на сайте. 2. Значение PHP флага php_value display_errors 1, указывает на то, что включено разрешение на вывод сообщений о возникновении ошибок. Директива php_value error_reporting определяет уровень ошибок, при возникновении которых будет выводиться сообщение. С помощью указанных директив можно настроить режим вывода интерпретатором PHP сообщений об ошибках. 86 3. Директивы php_value mbstring.func_overload 2 и mbstring.internal_encoding UTF-8 управляют настройкой mbstring. 4. Блок директив mod_rewrite. 5. Директива AddType application/x-httpd-php .ico определяет обработку расширения ico как php-файлов. 6. Директива ExpiresActive on включает кеширование изображений, позволяющее ускорить их загрузку при повторном обращении к страницам сайта. Директивы ExpiresByType image/jpeg "access plus 3 day" и ExpiresByType image/gif "access plus 3 day", в свою очередь, определяют формат изображений и срок, на который будет произведено кеширование. По умолчанию, выполняется кеширование изображений формата .jpeg и .gif сроком на 3 дня. IfModule mod_rewrite.c - это настройка php_value библиотеки правил для Внимание! После внесения изменений, файл .htaccess должен быть сохранен в UNIX-формате (для оболочки FAR опция Сохранить как UNIX-текст). Авторизация в режиме CGI В некоторых случаях может не работать авторизация при обмене данными с 1С. Часто проблема возникает в результате работы php в режиме CGI. В этом режиме есть проблемы с передачей данных авторизации HTTP в php. Можно это проверить, посмотрев phpinfo() в разделе Server API: CGI. Можно обойти проблему, но необходимо чтобы на сервере была включена обработка .htaccess и поддержка mod_rewrite. Для этого выполните следующие действия: В корне сайта в файл .htaccess добавьте строки: RewriteEngine on RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] Закоментируйте следующие строки в файле bitrix/admin/.htaccess, которые отключают mod_rewrite: #<ifmodule mod_rewrite.c=""> # RewriteEngine Off #</ifmodule> В файл bitrix/php_interface/dbconn.php добавьте строки: $remote_user = $_SERVER["REMOTE_USER"] 87 ? $_SERVER["REMOTE_USER"] $_SERVER["REDIRECT_REMOTE_USER"]; : $strTmp = base64_decode(substr($remote_user,6)); if ($strTmp) list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', $strTmp); Для проверки работоспособности HTTP-авторизации воспользуйтесь скриптом. Внимание! Данный вариант обхода не всегда может решить проблему. Если при выполнении всех рекомендаций HTTP-авторизация не заработала, то следует детально разбираться с проблемой. Ошибки подключения к БД При возникновении ошибки подключения к базе данных на экран выдается сообщение вида: Для решения проблемы следует: проверить параметры подключения /bitrix/php_interface/dbconn.php); проверить доступность базы данных. к базе данных Внешний вид сообщения об ошибке определяется /bitrix/modules/main/include/dbconn_error.php: в (файл файле <br> <table cellpadding="1" cellspacing="0" width="35%" bgcolor="#9C9A9C"> <tr> <td><table cellpadding="5" cellspacing="0" width="100%"> <tr> <td bgcolor="#FFFFFF" align="center"><FONT face="Verdana, Arial, Helvetica, sans-serif" size="-1"> 88 <font color="#FF0000"><b><?echo "Error connecting to database."?></b></font><br>Please try again.</font></td> </tr> </table></td> </tr> </table> Для проверки доступности базы данных можно использовать, в частности, MySQLGUI интерфейс управления для Windows, доступный для скачивания на странице http://www.mysql.ru/download/. Ошибки запросов к БД При возникновении ошибок запросов к базе данных на экран выдается сообщение вида: Стандартный вид данного сообщения /bitrix/php_interface/dbquery_error.php. определяется в файле Иногда возникает ситуация, когда сайт перестает отвечать, и посетителям отображается пустая страница. В этом случае рекомендуется открыть файл bitrix/php_interface/dbconn.php, содержащий параметры соединения с базой данных, и установить значение параметра $DBDebug = true; <? define("DBPersistent", true); $DBType = "mysql"; $DBHost = "localhost:31006"; $DBLogin = "root"; $DBPassword = ""; $DBName = "bsm_demo"; $DBDebug = true; 89 $DBDebugToFile = false; set_time_limit(60); define("BX_FILE_PERMISSIONS", 0644); define("BX_DIR_PERMISSIONS", 0755); @ini_set("memory_limit", "64M"); ?> В результате будет получен код ошибки, содержащий, как правило, названия поврежденных таблиц базы данных. Запуск утилиты perror.exe с кодом ошибки (файл perror.exe хранится в каталоге mysql/bin) позволяет получить описание ошибки по ее коду: Примечание: Для ошибки с кодом 28 выводится следующее описание: Данное сообщение означает, что недостаточно места для ее работы. на диске, где установлена база данных, Если речь идет о повреждении базы данных, то рекомендуется воспользоваться встроенным инструментом системы для проверки и восстановления базы данных. Использование скрипта проверки и восстановления базы данных позволит оперативно восстановить работу сайта. 90 Обратите внимание на следующее: Скрипт проверки и восстановления базы данных может быть использован только для MySQL с типом таблиц MyISAM. Скрипт проверки запускается из административного Настройки > Инструменты > Проверка БД: раздела сайта В случае, если повреждены таблицы статистики и нет возможности перейти в административный раздел, сбор статистики может быть временно отключен с помощью параметра ?no_keep_statistic_LICENSEKEY=Y. В параметре указывается лицензионный ключ сайта. Существует возможность использования скрипта проверки восстановления базы данных без перехода в административный раздел. и Для этого при обращении к странице восстановления необходимо указать два параметра: имя (login) и пароль (password) на доступ к базе данных. Например: http://www.mysite.ru/bitrix/admin/repair_db.php?login=DB_Login&password=DB_Pas sword. По умолчанию значения данных параметров хранятся в файле /bitrix/php_interface/dbconn.php. Проблема: на экран выводится ошибка: MySQL Query Error: ….. [Out of memory restart server and try again (needed 65528 bytes)] Решение: необходимо увеличить объем памяти в настройках MySQL. Рекомендуется использовать следующие конфигурационном файле MySQL my.cnf: 91 параметры MySQL, задавая их в key_buffer = 128K max_allowed_packet = 16M table_cache = 4 sort_buffer_size = 128K read_buffer_size = 128K read_rnd_buffer_size = 128K net_buffer_length = 128K thread_stack = 128K После изменения параметров необходимо будет перезагрузить MySQL. 500 - Internal Server Error Ошибка сервера может быть вызвана различными причинами, поэтому ее диагностика достаточно сложна и трудоемка. Это не является ошибкой «1С-Битрикс: Управление сайтом». Она часто возникает на разделяемом хостинге из-за ограничения ресурсов системы. При возникновении ошибки сервера в первую очередь необходимо просмотреть файл сервера error.log. В этом файле может содержаться строка с кодом ошибки. Типичным примером причины возникновения ошибки сервера может быть превышение разрешенных прав на хостинге. Например, происходит попытка выполнить файл с атрибутами, не разрешёнными для запуска на сервере (например, файл имеет атрибуты 0755, а допускается 0711). Также возможной причиной может быть наличие лимита по времени на исполнение php-скриптов; Или у системы нет прав на запись или чтение файла и др. Другой распространенной причиной возникновения внутренней ошибки сервера является нарушение конфигурации сервера или попытка использования неразрешенных инструкций, например, в файле .htaccess. В этом случае необходимо закомментировать либо удалить строку, содержащую неразрешенную директиву, в соответствующем файле (например, .htaccess). Обратите внимание, если PHP работает как CGI, то 500 ошибка на сервере может быть вызвана фатальной ошибкой PHP. В этом случае рекомендуется выполнить проверку программного кода и диагностировать ошибку. 92 Внутренняя ошибка сервера может возникнуть при запуске из-под Apache CGIскрипта, время исполнения которого превышает время, отведенное на выполнение скрипта в настройках сервера. Таким образом, всё зависит от конфигурации сервера. Важно понимать, указанные ограничения не настраиваются через настройки PHP в php.ini. В нормальной ситуации такая ошибка и её причина фиксируется в логах сервера. В этом случае пользователю рекомендуется обратиться к хостеру с просьбой указать, что является причиной возникновения ошибки и попросить её устранить (например, увеличить ресурсы). Если хостер не смог найти решение - обратитесь в техподдержку компании «1С-Битрикс» с точным указанием того, как ошибка происходит и какие причины указал хостер. Без указания причины ошибки техподдержка помочь вам не сможет. Виртуальная машина «1C-Битрикс: Виртуальная машина» - бесплатный программный продукт, готовый к немедленному использованию виртуальный сервер, полностью настроенный, протестированный и адаптированный для оптимальной работы как с продуктами «1С-Битрикс», так и с любыми PHP-приложениями. Имеется в версии для Windows и для Unix систем. Виртуальная машина сэкономит вам время и силы на правильное развертывание и администрирование вашего сайта или внутреннего информационного ресурса на базе продуктов «1С-Битрикс». Глава предназначена для администраторов и пользователей продуктов «1С-Битрикс», устанавливающих для ознакомления либо переносящих готовые проекты на виртуальную машину BitrixVM. Аналогичным способом можно переносить проекты с удаленного сайта на виртуальную машину, между виртуальными машинами и т.д. В документе рассматриваются процедуры установки всех необходимых приложений для работы продукта на виртуальной машине BitrixVM. Описание установки VMWare Player не входит в данное руководство. По всем вопросам установки этой программы обращайтесь к документации VMWare. Если у вас возникнут вопросы по процессу установки продуктов компании «1С-Битрикс», вы можете обратиться в службу Технической поддержки. Обсуждение работы BitrixVM доступно на специализированном форуме или в группе Виртуальные машины Битрикс социальной сети компании "1С-Битрикс" 93 Введение «1C-Битрикс: Виртуальная машина» разворачивается за минуты и сразу же готова к работе. На неё можно не только установить ознакомительные версии продуктов «1СБитрикс», но и перенести свои, уже готовые проекты. Перенос сайта возможен напрямую с сервера на машину. «1C-Битрикс: Виртуальная машина» подготовлена с использованием VMWare Studio в формате VMWare Virtual Appliance и совместима со следующими продуктами BitrixVM: VMWare Server 1.0 и выше; VMWare ESX 3.0 и выше; VMWare ESXi 3.5 и выше; VMWare Workstation 6.0 и выше; VMWare Player 2.0 и выше; VMWare Fusion 1.1 и выше. «1С-Битрикс: Виртуальная машина» эмулирует работу реального компьютера. Продукт включает в себя сконфигурированную операционную систему, веб-сервер, базу данных, firewall, почтовый сервер, а также большое число настроек, от которых зависит надежность, производительность и безопасность веб-проекта. Параметры конфигурации описаны в уроке Пример настройки двухуровневой архитектуры. BitrixVM постоянно совершенствуется и обновляется. О текущем составе машины смотрите на соответствующих страницах сайта компании "1С-Битрикс". По умолчанию для суперпользователя root установлен пароль bitrix, для пользователя bitrix - bitrix. Важно! Обязательно смените пароли при первом запуске виртуальной машины. Технические требования для запуска VMBitrix с использованием VMWare Player Для работы с виртуальной машиной система должна соответствовать следующим техническим требованиям: ОС: Windows XP, Vista, 7, Server 2003, Server 2008 (x86/x64); Linux (x86/x64); VMWare Player; Минимальное место на диске: 2 Гб; Минимально допустимый размер оперативной памяти: 160 Мб; Рекомендованный размер оперативной памяти: 256 Мб и выше. 94 Запуск виртуальной машины BitrixVM Скачайте и установите VMWare Player - бесплатный продукт, работающий под ОС Windows или Linux. Примечание: Описание установки VMWare Player не входит в данное руководство. По всем вопросам установки этой программы обращайтесь к документации VMWare. Загрузите дистрибутив настроенной виртуальной машины BitrixVM. Скачанный архив распакуйте С:\VMBitrix\BitrixVM\. Запустите VMWare Player. Нажмите кнопку Open a Virtual Machine и укажите путь к файлу BitrixVM.vmx, который был распакован в каталог С:\VMBitrix\BitrixVM\. Виртуальная машина появится в списке добавленных. Выберите в списке нужную виртуальную машину и нажмите кнопку Play Virtual Machine: Начнется процесс загрузки операционной системы, виртуальной машине. В конце загрузки откроется окно: 95 в любую папку, например, установленной на В данном окне вы можете: войти в систему с помощью команды Login; изменить конфигурацию сети с помощью команды Configure Network; изменить временную зону, если это необходимо, с помощью команды Set Timezone. Выберите команду Login. Примечание: Для суперпользователя root по умолчанию задан пароль bitrix. Сменить пароль необходимо при первом запуске виртуальной машины. Чтобы сменить пароль выполните следующее: 96 В строках localhost.localdom login и Password укажите текущий логин и пароль (root и bitrix соответственно) и нажмите Enter. В строке (current) UNIX password укажите текущий пароль (bitrix) и нажмите Enter. Введите новый пароль в строке Enter new UNIX password и нажмите Enter. Повторите ввод нового пароля в строке Retype new UNIX password и нажмите Enter. Примечание: Cменить пароль также можно с помощью команды Change root password в панели управления виртуальным сервером. В результате виртуальный сервер готов для использования: Основные функции администрирования перечислены в списке Available actions: 0. Virtual appliance information - выводит информацию о текущих настройках виртуальной машины; 1. Mail sending system parameters - настройка параметров интегрированного почтового сервера; 2. Disable/Enable HTTP access (HTTPS only) - выключение/включение доступа к сайту только через HTTPS; 3. Enable/Disable ZendServerCE control panel - включение/выключение панели управления ZendServerCE; 4. Change root password - смена пароля суперпользователя; 5. Change bitrix password - смена пароля пользователя bitrix; 6. Virtual server reboot - перезагрузка виртуального сервера; 7. Virtual server shutdown - перезагрузка виртуального сервера; 97 8. Set PHP timezone from Operating System setting - установка часового пояса в виртуальной машине из настроек операционной системы; 9. Create master mode - создание мастера для веб-кластера; 10. Add slave node - добавление слэйва к мастеру (доступно при заходе на машину-мастер); 11. Make slave node a master node - переключение слейва в режим мастера (доступно при заходе на машину-слэйв); 12. Add additional site - добавление сайта в режиме многосайтовости на разных доменах; 13. NTLM authentication - включение NTLM авторизации; Для перехода к выполнению любого действия введите число (от 0 до 13) и нажмите Enter. Например, для выключения виртуального сервера в строке наберите 7 (Virtual server shutdown) и нажмите Enter. Примечание: При возникновении проблем с сетевым адаптером VMWare Player необходимо перейти в настройки сетевого адаптера (Virtual Machine > Removable Devices > Network Adapter > Settings...), выбрать один из режимов (Bridged, NAT, Hostonly): и перезапустить виртуальный сервер, указав команду 6 и нажав Enter. Чтобы вернуться в вашу ОС, нажмите Ctrl+Alt. 98 Для продолжения необходимо набрать полученный IP-адрес в браузере (в нашем примере это http://192.168.0.175 или https://192.168.0.175). Откроется страница с выбором варианта работы: Для продолжения необходимо выбрать один из вариантов: 1. Новая установка - в этом случае будет запущен мастер, который позволяет скачать, установить и создать новый сайт средствами продуктов компании «1CБитрикс». Шаги этого варианта аналогичны шагам, рассмотренным в главе Установка продукта с помощью BitrixSetup. 2. Восстановить проект - в этом случае будет запущен мастер, с помощью которого можно будет перенести существующий проект (восстановить проект из резервной копии). Шаги этого варианта аналогичны шагам, рассмотренным в главе Перенос продукта. Настройка почтового сервера Для настройки интегрированного почтового сервера выполните следующее: В строке Type a number and press ENTER наберите команду 1 (Mail sending system parameters) и нажмите Enter: 99 В строке ниже отобразится диалог Mail sending subsystem settings, в котором укажите следующее: SMTP server name - имя почтового сервера. SMTP port - порт сервера. Порт зависит от типа соединения, 25 - для обычного и 465 - для зашифрованного (с использованием SSL). Если нажать Enter, то будет использован порт по умолчанию (25). Default sender address - адрес SMTP-сервера на который будет осуществляться пересылка. Если необходима SMTP авторизация, то в строке SMTP authorization required наберите Yes, в противном случае - No. После завершения настройки все указанные параметры будут отображены в списке ниже: 100 Для сохранения параметров в строке Save changes укажите Yes. 101 Глава 4. Перенос продукта Для переноса сайта на удаленный сервер (равно как и с удаленного сервера на локальную машину) можно воспользоваться специальным механизмом резервного копирования, который предоставляет следующие возможности: выбор подходящего сценария для архивации в зависимости от технических возможностей сервера; создание архивной версии файлов сайта (формат .tar.gz); включение или исключение из архива папки, содержащей ядро продукта; включение или исключение из архива публичной части; исключение из архива файлов, размер которых превышает некоторое заданное значение; создание дампа базы данных (формат .tar.gz); исключение из дампа базы данных таблиц статистики и поискового индекса; задание длительности шага архивации и интервала между ними; отключение компрессии архива для снижения нагрузки на сервер; проведение проверки целостности архива после завершения. Обратите внимание! Механизм резервного использован только для базы данных MySQL. копирования может быть Для переноса сайта с локальной машины на удаленный хостинг или с одного удаленного хостинга на другой при помощи встроенной функции резервного копирования и специального скрипта restore.php, необходимо предварительно: Проверить: соответствие удаленного требованиям продукта; хостинга минимальным техническим наличие прав не ниже (0644 – для файлов и 0744 для папок) на все файлы в корне сайта у пользователя, под которым работает Apache (PHP). При наличии активной лицензии настоятельно рекомендуется обновить исходную копию продукта до последней версии. Следующий шаг - создание архива сайта. Выполнить действия по созданию архива можно на странице Резервное копирование (Настройки > Инструменты > Резервное копирование). Подробнее о создании архива сайта см. в уроке Резервное копирование курса Администратор. Базовый. После этого можно непосредственно приступать к переносу сайта. Выполните действия в следующем порядке: 102 Загрузите файл с архивом в корневую директорию сайта на удаленном сервере или на локальной машине в зависимости оттого, откуда и куда вы переносите сайт. Если исходный сайт доступен из интернета, то лучше скачивать архив с дальнего сервера. При этом скачиваются все части архива автоматически. При переносе с локального на хостинг надо будет вручную положить все части рядом с restore.php. Важно! Если файл архива содержит в себе полную копию сайта (и ядро, и публичную часть), то на сервере систему «1С-Битрикс: Управление сайтом» устанавливать не нужно. Скачайте скрипт restore.php, который доступен по ссылке вверху страницы резервного копирования. Загрузите скрипт на сервер в корень сайта. В адресной строке браузера наберите http://ваш_сайт/restore.php. Нажмите кнопку Далее. В открывшемся диалоговом окне выберите нужный вариант расположения файла с архивом и нажмите кнопку Далее. 103 После завершения распаковки файлов будет предложено указать настройки соединения с базой данных, если при создании резервной копии был создан дамп базы данных. Укажите необходимые параметры, нажмите кнопку Далее и ждите завершения работы сценария. После успешной распаковки в открывшемся диалоговом окне нажмите кнопку Удалить архив и служебные скрипты: 104 Во избежание повреждения сайта или утечки информации будут автоматически удалены файлы: /restore.php /файл резервной копии (файл с расширением .tar.gz) /bitrix/backup/дамп базы (файл с расширением .sql) После этого вы автоматически попадете в публичный раздел восстановленного сайта. Возможные ошибки при переносе сайта Перенос сайта нештатными средствами Перенос сайта на хостинг лучше всего выполнять встроенными в Bitrix Framework средствами резервного копирования/восстановления. Несмотря на то, что фактически сайт на "1С-Битрикс: Управление сайтом" представляет из себя набор файлов и базу данных, копирование файлов напрямую на удаленный сервер в большинстве случаев будет не верным решением. Из-за большого количества мелких файлов такое копирование может растянуться на несколько часов. Кроме того, использование стандартных механизмов позволяет избежать последующих возможных проблем с правами доступа к файлам сайта. Среди часто возникающих проблем: 105 1. Веб-сервер не может записать в нужную ему папку или удалить временные файлы. Возможные последствия: невозможность обновления продукта; невозможность редактировать сайт через веб-интерфейс; некорректная работа компонента кэширования; и другие проблемы. Примечание: Например, встречаются даже такая ситуация, когда система создавала временные файлы, но права хостинга не позволяли удалить их. В результате через день работы аккаунт был заблокирован за превышение дисковой квоты. Самым простым решением в этом случае будет установка прав на все файлы и папки 777 (для Unix платформы) либо любой другой способ дать PHP запись на эти файлы. 2. Нет возможности отредактировать через ftp/ssh файлы, созданные через вебинтерфейс. В этом случае многим веб-разработчикам будет сложно дорабатывать сайт. Одним из простых, но не всегда работающих решений, является установка параметров в файле dbconn.php, позволяющих всем редактировать создаваемые через Bitrix Framework файлы. define("BX_FILE_PERMISSIONS", 0666); define("BX_DIR_PERMISSIONS", 0777); Однако для файлов, созданных через ftp/ssh, вам придется периодически изменять права вручную. Либо, если хостинг это поддерживает, устанавливать параметр umask. Настройки PHP При переносе сайта на хостинг могут возникнуть различные нюансы из-за настроек PHP: Проблемы с несоответствием владельца файлов: на ряде хостингов PHP работает от имени одного пользователя, а доступ по ftp/ssh предоставлен другому. В этом случае файлы, созданные одним методом, могут быть недоступны для модификации, или вообще вызывать ошибку выполнения из-за нарушения параметров безопасности. Проблемы с настройками безопасности: возможны различные варианты подключения PHP к веб-серверу, и в некоторых из этих вариантов устанавливаются жесткие ограничения на владельца файла и права на файл. В этом случае возможны ошибки с кодом 500, и разобраться в проблеме вам поможет только журнал ошибок веб-сервера. 106 Пример: На многих хостингах, если PHP подключен как CGI, требуется соответствие владельца файла и прав на файл. Если владелец файла – не ваш аккаунт или права на файл допускают запись всем пользователям, PHP будет вызывать ошибку. В этом случае необходимо установить корректные права на файлы и папки, а также правильные параметры в dbconn.php. Ограничения на время выполнения скрипта или на другие выделяемые ресурсы. В этом случае сайт может вести себя странно – то открываться, то не открываться и показывать белый экран. Пример: особо чувствительны к размеру памяти и времени выполнения различные скрипты импорта-экспорта данных. Если у вас возникают ошибки – проверяйте доступность ресурсов на хостинге, в случае их нехватки смените хостера. Проблемы с использованием кодировки utf-8 на хостинге. Выясните, поддерживается ли она (необходимо наличие библиотеки mbstring и возможность установки параметра pgp: mbstring.func_overload=2). Другие проблемы, специфичные для вашего хостера. Для их устранения рекомендуем заранее протестировать работу сайта на выбранном вами хостинге и заручиться контактами специалистов службы поддержки провайдера. Возможные проблемы при работе с многосайтовостью в Bitrix Framework Проверьте, что ваш хостинг позволит огранизовать многосайтовость выбранным вами методом. Не все провайдеры позволяют корректно (для Bitrix Framework) создавать дополнительные сайты. Информацию об способах организации многосайтовости можно получить в учебном курсе Многосайтовость. Проблемы с почтой Некоторые хостинги не позволяют отправлять почту без авторизации. В этом случае для отправки письма с сайта вам необходимо будет переопределять функцию отправки почту в соответствии с документацией к продукту. Распакованный сайт недоступен После распаковки резервной копии на всём сайте отображается только форма авторизации. Возможные причины и решения: Некорректное значение поля Путь к корневой папке веб-сервера для этого сайта в настройках сайтов (Настройки > Настройки продукта > Сайты > Список сайтов). Решение: в настройках сайта изменить значение поля Путь к корневой папке веб-сервера для этого сайта на соответствующий путь на новом хостинге, нажав на ссылку Вставить текущий. Оставьте поле пустым, если все сайты работают на одном веб-сервере. 107 Если перенос осуществлялся простым копированием файлов (FTP/SSH), мог не скопироваться файл .access. В данном файле хранятся права доступа групп пользователей к сайту, если данного файла нет, то для всех пользователей устанавливается право Запрещено. Решение 1: в корень сайта положить файл .access с содержимым: <? $PERM["/"]["*"]="R"; ?> либо Решение 2: через файловый менеджер продукта в свойствах корневой папки сайта на вкладке Доступ установить для группы Все пользователи (в том числе неавторизованные) право Чтение. Не полный архив При просмотре архива, созданного штатной системой резервного копирования, через WinRar видно, что файлов в архиве гораздо меньше, чем на сайте. Причина: дело в том, что у формата tar есть несколько диалектов. Система пакует архив в формате GNU tar, как это делает по умолчанию tar в Linux. WinRar понимает tar, но конкретно этот диалект поддерживает не полностью. Резервный архив должен распаковываться системным restore.php, скачанным со страницы резервного копирования. Если и в этом случае часть файлов утеряна, проблему следует решать через техподдержку. Ошибка ERROR 1062 (23000) При распаковке резервной копии происходит ошибка: ERROR 1062 (23000) at line 1247: Duplicate entry '2-?' for key 2. Причина: Ошибка происходит, если кодировка, в которой сделан архив, отличается от используемой на новом сервере баз данных. Кодировка архива устанавливается в зависимости от содержимого файла /bitrix/php_interface/after_connect.php, например: <? $DB->Query("SET NAMES 'utf8'"); ?> т.е архив будет создаваться в кодировке utf8. Кодировку сервера баз данных можно увидеть character_set_server после выполнения SQL-запроса: в параметре show variables where Variable_name = 'character_set_server'; 108 Обойти или устранить эту ошибку можно двумя способами: В настройках нового сервера баз данных изменить кодировку в параметре character_set_server на ту, в которой сделан архив. Внимание! За выполнением этой обратиться к администратору сервера. операции возможно придется Можно открыть архив в текстовом редакторе и в самое начало вставить строку: SET NAMES `utf8`; Кодировка выбирается в зависимости от кодировки архива. Внимание! Этот способ работает только в случае небольших дампов (которые успевают импортировать за один шаг). 109 Глава 5. Монитор производительности Монитор производительности показывает скорость работы сайта на хостинге, выявляет узкие места (скрипты на сайте, которые потребляют наибольшее число системных ресурсов) и основные ошибки настройки сервера. Подробнее про оптимальную настройку сервера можно Конфигурирование веб-систем для оптимальной работы. посмотреть в главе Список ссылок по теме: Пользовательская документация по модулю "Монитор производительности" "Монитор производительности" в работе (Блог) Производительность сайта в картинках (Блог) График времени генерации страниц сайта (Блог) Модуль Производительности на практике. Оптимизация настроек сервера (Блог) Оптимизация времени генерации страницы (Блог) Настройки модуля Глобальные параметры модуля определяются на странице настроек Монитор производительности (Настройки > Настройки продукта > Настройки модулей > Монитор производительности). Для настройки модуля доступны следующие опции: 110 Максимальная длина URL при отображении - опция позволяет указать максимальное количество символов, которое будет использоваться для отображения URL'ов на административных страницах, относящихся к модулю. Вести журнал запросов - позволяет регистрировать в журнале SQL запросы. Просмотреть журнал запросов можно на странице SQL Запросы (Настройки > Производительность > SQL Запросы). Вести журнал предупреждений PHP - позволяет регистрировать ошибки PHP. Просмотреть журнал ошибок можно на странице Ошибки PHP (Настройки > Производительность > Ошибки PHP). Включить монитор - запускает монитор производительности на выбранное время. Действие аналогично опции Тестировать производительность на странице Панель производительности (Настройки > Производительность > Панель производительности). Если монитор включен, то в поле Активность монитора будет отображен статус Работает, при этом ниже будет выведена информация: До окончания активности осталось: (часов:минут:секунд). Удалить собранные ранее данные - позволяет удалить ранее собранные данные по производительности. Примечание: Настройка доступа производится типовым для Bitrix Framework способом. Публичная часть модуля Для оценки производительности в публичной части сайта используется кнопка Отладка , которая позволяет отображать статистику прямо на странице: 111 Примечание: Для административной части сайта также доступна Статистика SQL-запросов, Время исполнения страницы и Статистика компрессии. Отображение статистики включается с помощью меню кнопки Отладка в публичной части сайта. Меню кнопки Отладка позволяет выбрать тип отображаемой информации на странице: Суммарная статистика - статистика SQL-запросов, включаемых областей, времени исполнения; Статистика SQL-запросов - статистика всех SQL-запросов, исполняющихся на странице; Статистика включаемых областей статистика включаемых областей (время, запросы); Время исполнения страницы - время исполнения страницы; Статистика компрессии - статистика модуля компрессии. Информация для опций Время исполнения страницы и Статистика компрессии отображается внизу страницы: Информация для опции Статистика SQLзапросов отображается внизу страницы: Ссылка Всего SQL запросов позволяет отобразить более подробную информацию обо всех запросах на странице в специальной форме. При одновременно отмеченных опциях Время исполнения страницы и Статистика SQL-запросов внизу страницы будет доступна ссылка Время создания страницы: Эта ссылка позволит отобразить статистику страницы в специальной форме: 112 Примечание: При отмеченной опции Суммарная статистика по ссылке Время создания страницы будет доступна более подробная информация: 113 Ссылки в верхней части формы позволяют отобразить в нижней части формы список задействованных включаемых областей. Ссылки в нижней части формы позволяют отобразить информацию о запросах. Информация о запросах Для просмотра информации о запросах компонента, необходимо выбрать пункт меню Статистика включаемых областей и затем использовать ссылку вида Запросов: n, отображаемую в информационной области, которая расположена рядом с компонентом: Откроется форма, в которой будет отображена информация о запросах: Примечание: В нижней части формы отображается детальная информация о каждом запросе. Для отображения информации о другом запросе компонента необходимо использовать ссылку в верхней части формы. 114 Административные страницы модуля В административной части сайта к модулю Монитор производительности относятся следующие страницы, расположенные в разделе Производительность (Настройки > Производительность). Страницы На странице Монитор производительности: страницы (Настройки > Производительность > Страницы) можно просмотреть отчет по нагружаемости страниц: Переход по ссылке с названием страницы позволяет просмотреть все её хиты на странице Хиты. 115 Хиты На странице Монитор производительности: хиты (Настройки > Производительность > Хиты) можно просмотреть отчет по хитам: Переход по ссылке >> позволяет перейти на желаемую страницу в публичную часть сайта и просмотреть детальную статистику в следующей форме: 116 Примечание: Нажав кнопку Отладка или выбрав пункт меню Суммарная статистика (Отладка > Суммарная статистика) на Панели управления в публичной части сайта. А перейдя по ссылке >> со страницы Монитор производительности: хиты (Настройки > Производительность > Хиты), можно просмотреть более детальную статистику: 117 Переход по ссылке с названием страницы (или по ссылке в графе Запросы) позволяет просмотреть все SQL запросы хита на странице SQL Запросы. Переход по ссылке в графе Компоненты позволяет просмотреть отчет по используемым компонентам для хита на странице Компоненты. 118 Компоненты На странице Монитор производительности: компоненты (Настройки > Производительность > Компоненты) можно просмотреть отчет по используемым на страницах сайта компонентам или включаемым областям: Переход по ссылке в графе Запросы позволяет просмотреть все SQL Запросы компонента на странице SQL Запросы. 119 SQL запросы На странице Монитор производительности: запросы (Настройки Производительность > SQL запросы) можно просмотреть отчет по запросам SQL: > Примечание: Данная страница отображается, только если в настройках модуля Монитор производительности указана опция Вести журнал запросов. Двойной клик по строке таблицы с запросом или пункт меню действий План исполнения позволит просмотреть план исполнения запроса в новом окне: 120 121 Таблицы в базе данных На странице Таблицы в базе данных (Настройки > Производительность > Таблицы) можно просмотреть таблицы базы данных: При переходе по ссылке с именем таблицы позволяет просмотреть её содержимое. Примечание: Система запоминает просмотренные таблицы и для удобства, в режиме просмотра данных таблицы, на контекстной панели будет доступно меню Последние таблицы (n), которое позволяет быстро переключаться между последними таблицами. На странице Таблицы также будут отображены Последние просмотренные таблицы. Для таблиц доступны следующие групповые действия: 122 Аналогичные действия также доступны и в меню действий для отдельных таблиц. Начиная с 11 версии для таблиц модуля Поиск реализована выборка строк с фильтром по текущему значению в связанных таблицах. Если в меню действий выбрать какую-либо таблицу, например b_search_content_stem то произойдет выборка SEARCH_CONTENT_ID=381. строк по 123 таблице b_search_content_stem, где Для значений реализован вывод подсказок с информацией, полученной из связанной таблицы. 124 125 Настройки PHP На странице Монитор производительности: настройки PHP (Настройки > Производительность > PHP) отображается сводная таблица Параметры окружения с анализом параметров PHP. С помощью ссылки Настройки PHP можно перейти на страницу с подробной информацией о PHP (phpinfo). 126 Сервер БД На странице Монитор производительности: сервер Производительность > Сервер БД) отображается производительности сервера базы данных и рекомендации: 127 БД (Настройки > сводная статистика Ошибки PHP На странице Монитор производительности: журнал ошибок PHP (Настройки > Производительность > Ошибки PHP (N)) можно просмотреть журнал регистрации ошибок PHP, где N - общее количество ошибок. Примечание: Данная страница отображается, только если в настройках модуля Монитор производительности указана опция Вести журнал предупреждений PHP. Поиск "узких" мест сайта Для оценки производительности необходимо перейти в раздел производительности (Настройки > Производительность > производительности). Монитор Панель Нажатие кнопки Тестировать производительность позволит вам определить слабые места настройки хостинга. Важно понимать, что цифры в строке Конфигурация могут отличаться в разы при изменении нагрузки на сервер: если нагрузки нет, производительность может быть высокой, если есть – она сможет снизиться. Это связано с тем, что данные цифры показывают скорость открытия пустой страницы сайта и, естественно, зависят от общей загрузки сервера. 128 Модуль предназначен не только для проверки параметров хостинга. С его помощью можно найти "узкие" места сайта. Для этого требуется запустить тест производительности в течение некоторого времени – для малопосещаемых проектов – час, для посещаемых можно выбрать меньшее время. Система будет фиксировать посещения и собирать статистику о времени выполнения каждой страницы, числе SQL запросов и других параметров. В случае если сайт малопосещаемый, рекомендуется самому открывать страницы сайта для сбора статистики модуля. Показатель производительности - величина, обратная времени исполнения ядра продукта (среднему на 10 измерений). Т.е. в данном примере (Производительность = 19,54) можно сказать, что публичная страница сайта с пустым шаблоном (например, версия для печати), с пустой рабочей областью будет создаваться за 1/19,54 или 0,0512 сек. Если говорить проще, то сервер сгенерирует 19 (пустых, но с подключением ядра) страниц в секунду. Показатель производительности не вычисляется на основе производительности файловой системы, работы базы, сессий и почты. Эти цифры нужны для того, чтобы помочь системному администратору найти узкое место (если такое есть). Величина производительности всегда обратна величине среднего времени отклика. Закладка «Конфигурация» В этой закладке отображается текущие показатели производительности подсистем сервера и сравнение их с показателями эталонной системы. 129 Если какая-то подсистема не удовлетворяет оптимальным условиям, то будет выведена ссылка с рекомендациями по исправлению в колонке Примечание. Основные ошибки конфигурации: Не установлен акселератор php. Наличие акселератора php просто жизненно необходимо, в общем случае без дополнительных настроек страницы открываются в три раза быстрее, во столько же раз снижается нагрузка на процессор. Сегодня можно рекомендовать Zend Server CE - быстрее любого акселератора в два раза. К сожалению, на некоторых конфигурациях он работает нестабильно, тогда ставьте (в порядке приоритета) APC, EAccelerator, XCache. Включено ограничение open_basedir. На shared хостинге сложно отделить клиентов друг от друга, самый простой вариант, который обычно используют: включить open_basedir, тогда на все операции с файлами происходит дополнительная проверка пути. Что существенно снижает производительность. Решением будет использовать свой экземпляр apache для каждого пользователя или установка дополнительных модулей на сервер для ограничения доступа. В случае своего сервера или VPS ограничение open_basedir ставить не нужно! Доступ ограничивается системой для пользователя веб-сервера. Не установлен или не настроен nginx. Хоть это напрямую не влияет на оценку производительности, но чрезвычайно важно для нагруженных проектов: вся статика (картинки, стили, ява скрипты) должна отдаваться nginx и не обрабатываться apache. Посмотрите логи доступа apache: там не должно быть ни одного запроса к статике! Не настроена база данных. По возможности всегда используйте формат данных InnoDB, рекомендуемые настройки смотрите на странице монитора производительности Сервер БД. Очень полезно также протестировать базу скриптом mysqltuner.pl, который чрезвычайно прост в установке и полезен для оптимальной настройки СУБД MySQL. Стоят не оригинальные драйвера оборудования. Особенно актуально для RAID контроллеров: при установке на Linux система обычно предлагает к установке open source драйвера, которые не всегда достаточно эффективно работают с оборудованием. Всегда ставьте оригинальные драйвера с сайта разработчика. PHP как CGI. PHP, запускаемый как CGI (не FastCGI) – плохая схема. На каждое обращение к php-скрипту запускается новый процесс интерпретатора 130 PHP. Все это работает очень медленно, производительность сайта будет крайне низкой. Как читать оценку подсистем Монитор производительности не имеет прямого доступа к системным ресурсам, поэтому оценки, полученные средствами PHP, в большей степени отражают работу PHP, чем сервера. Конфигурация - собственно, оценка производительности. Среднее время отклика - цифра, обратная оценке производительности. Процессор (CPU). Делается большое число простых математических вычислений. Задача не распараллеливается, поэтому идет оценка работы одного ядра процессора. Когда сайт работает на VPS, здесь часто можно увидеть, что "зажат" процессор. Файловая система. Этот тест показывает не столько работу диска, сколько работу PHP с файлами: создается, исполняется, удаляется большое число простых файлов. Данный показатель зависит от производительности файловой системы и эффективности работы PHP акселератора. В целом хорошо показывает, как работает PHP на данной конфигурации (без учета работы базы). Почтовая система. Отправляется тестовое письмо на [email protected]. Содержимое письма: "This is test message. Delete it." Никакая служебная информация не передается! Если настроена отправка почты на cron, этот показатель можно игнорировать. Время старта сессии. Сессия стартует на каждый хит, поэтому это время будет прибавляться к работе каждой страницы. Проблемы обычно возникают, когда меняются настройки хранения сессий PHP так, что скапливаются сотни тысяч файлов сессий. База данных (чтение/запись/удаление). Отправляется большое число простых запросов в базу. Это очень утрированный тест: он не показывает, как база будет работать со сложными запросами на больших объемах данных. Очевидно, что для базы данных на локальной машине цифры будут выше, чем для базы на отдельном сервере. Это нормально. Закладка «Битрикс» В этой закладке отображаются текущие настройки продукта, непосредственно влияющие на производительность, с соответствующими рекомендациями для оптимальной настройки. 131 Закладка «Разработка» В этой закладке отображается список страниц сайта, среднего времени выполнения и предполагаемых ошибок разработчика. Например, ошибкой, которую предлагается исправить, является некэшированнное меню. Примечание: Для просмотра информации об ошибках используйте ссылку в колонке Ошибки разработки. Чтобы увидеть причину ошибки, нужно нажать на адрес страницы в колонке 20 самых нагружающих страниц. 132 Список адресов и статистики выполнения для страницы /catalog/furniture/index.php: Обратите внимание – на странице /catalog/furniture/index.php находится комплексный компонент Каталог с включенным ЧПУ, поэтому реальные URL для этой страницы – разные. Приведенная таблица отсортирована по уменьшению времени выполнения страницы, и хорошо видно, что если в первый раз страница /catalog/furniture/office открывалась 2 секунды, то в последующие разы – около 0,5 с. При этом наиболее существенно сработало кэширование компонентов, и, как следствие - уменьшение времени на выполнение SQL-запросов. Проверим, какие компоненты выполняются на этой странице. Для этого необходимо нажать на число в колонке Компоненты нужной страницы. Список компонентов и их характеристики для хита 17 по адресу /catalog/furniture/office. 133 Здесь мы видим список компонентов, подключаемых на странице, число SQL-запросов из них и тип кэширования. 17 компонент – как раз то некэшированное меню, о котором нам сообщал монитор производительности. Аналогичным образом мы можем посмотреть список SQL-запросов на этой странице (для данного хита). Однако, как же определить, какое из меню (на странице их 3) не кэшируется, а также причину медленной работы? Для этого вернитесь на страницу Монитор производительности: хиты и нажмите на ссылку >> перед адресом страницы. Вам откроется сводная статистика по странице. Здесь вы можете увидеть, на каком именно этапе построения страницы сайта затрачивается максимальное время: 134 Закрыв окно, нажмите на Панели управления кнопку Отладка (Отладка > Суммарная статистика), и вы увидите, что нижнее меню действительно не кэшируется. Кроме того, можно настроить его, выбрав нужный компонент из списка компонентов на странице. Как правило, компоненты расположены на странице в том же порядке, что и на странице диагностики: 135 Примечание: Подробнее про работу с монитором производительности в публичной части сайта смотрите в уроке Публичная часть модуля. Закладка «Масштабируемость» Начиная с версии 10.0 доступен встроенный инструмент тестирования нагрузки многопоточных и веб-кластерных систем. Примечание: Подробнее про инструмент тестирования можно посмотреть в курсе Администратор. Модули, урок Тест производительности. Что важно знать: 136 Оценка зависит от редакции продукта. Раз мы замеряем время работы ядра, очевидно, оно будет зависеть от размера ядра. Для редакции «Бизнес» со всеми включенными модулями оценка всегда будет ниже, чем на «Старте» на том же оборудовании. Эталонная оценка в Мониторе производительности продукта делалась на редакции «Бизнес». Результат зависит от /bitrix/php_interface/init.php. пользовательских функций в Указанный файл подключается на каждый хит, в том числе и при работе административной части. Файл /bitrix/php_interface/init.php не должен содержать запросы к БД и любые другие ресурсоемкие операции. Оценка будет меняться в зависимости от нагрузки. Чем больше нагружен сервер, тем ниже будет оценка. Но даже при пиковой нагрузке она не должна опускаться ниже приемлемого уровня, чтобы можно было говорить, что сервер справляется (например, не ниже 10 единиц, т.е. 0,1 сек. на страницу). Показатель производительности масштабирования системы. не показывает возможности Процесс веб-сервера работает на одном ядре, а значит, когда измеряется производительность без нагрузки, число ядер процессора не влияет на результат. Другое дело под нагрузкой: многоядерная система в состоянии сохранить высокие показатели. Для базы данных на отдельном сервере оценка производительности будет ниже. Когда речь идет о кластере, мы имеем масштабируемую систему: при увеличении нагрузки она должна сохранять хорошие показатели. Но при моментальном замере времени открытия страниц без нагрузки мы неизбежно увидим небольшое замедление за счет межсерверных коммуникаций. Пример нахождения мелких ошибок в производительности Перед сдачей проекта можно легко протестировать сайт и найти ошибки в верстке, неправильно настроенного кэширования и другие мелкие недочеты. Для этого протестируйте готовый сайт путем двух-трех кратного скачивания всех страниц на жесткий диск. Для этой цели хорошо подходит бесплатная программа wget, работающая под управлением Linux/Unix систем и встроенная в виртуальную машину VMBitrix. В случае, если вы разрабатываете сайт на этой же виртуальной машине, вы получите полноценное тестирование с минимальными сетевыми задержками. Запуск тестирования 137 несколько раз требуется для того, чтобы на каждой странице был создан кэш и повторный хит брался уже из кэша. Для тестирования включите режим тестирования производительности, затем перейдите в виртуальную машину и выполните такие команды: cd /tmp mkdir test1 cd test1 rm -rf localhost wget -m http://localhost rm -rf localhost wget -m http://localhost rm -rf localhost wget -m http://localhost Для повтора теста повторите 2 последние команды. Если тестирование затянулось, прервать его можно, нажав CTRL+C. Внимание! При большом числе обращений с одного адреса проактивная защита не позволит выполнить тестирование. Отключите контроль активности на странице Контроль активности (Настройки > Проактивная защита > Контроль активности). Вот как выглядит результат теста для стандарной поставки 1С-Битрикс командой wget: 138 Низкая скорость работы сайта и низкая оценка производительности В первую очередь необходимо проверить наличие акселератора php. Это специальный модуль, который выполняет прекомпиляцию php скриптов, что позволяет уменьшить время работы скриптов в среднем в три раза. Затем проверить, не включено ли расширение open_basedir. Медленное открытие страниц Наиболее просты в определении и легки для детектирования две проблемы: все или значительная часть страниц сайта открывается не очень быстро; некоторые разделы сайта почти не открываются или открываются очень медленно. Причины могут быть разные, но, пожалуй, одни из самых частых: Для первой проблемы. В коде страниц сайта имеются битые ссылки, которые переадресуются на индексную или на 404 страницу. Такие несуществующие адреса легко отлавливаются после получасового теста Монитора производительности. Для второй проблемы: после сбоя некоторые таблицы базы данных оказались повреждены. В результате нагрузка на MySQL возросла в сотни раз. 5-ти минутный тест Монитора производительности показал, что причина – в нескольких поврежденных таблицах в разделе Каталог. 139 Глава 6. работы Конфигурирование веб-систем для оптимальной Типовые настройки серверного программного обеспечения рассчитаны на минимальное оборудование и статические HTML-приложения. Внесение некоторых конфигурационных изменений в серверное ПО позволяет в несколько раз увеличить производительность системы в целом, сократить время генерации страниц, увеличить устойчивость системы к пиковым нагрузкам. В этой главе приведены рекомендации по настройке серверного ПО, которые выполняются сотрудниками компании «Битрикс» при конфигурировании проектов с посещаемостью более 3-10 тысяч уникальных пользователей в день, либо при недостаточности системных ресурсов для обработки меньшей нагрузки. Все рекомендации относятся в основном к UNIX-системам или Windows-системам, использующим веб-сервер Apache. Рекомендованные решения не являются единственными возможными. Предполагается, что данные инструкции послужат руководством для создания и доработки данных рекомендаций в соответствии с имеющимися ресурсами, оборудованием, конфигурациями из нескольких серверов. Внимание! Все рекомендации подразумевают, что выполнены все обязательные требования и, по возможности, рекомендуемые установки на странице Проверка сайта (Инструменты > Проверка сайта) в Административном разделе продукта. Примечание: Помимо изучения данной главы рекомендуем обратиться к опыту разработчиков сайтов на платформе Bitrix Framework. В частности можно использовать методики описанные в группе Оптимизация веб-проектов. Особенности веб-приложений Веб-приложения отличаются от программ, работающих под управлением операционной системы, например, Windows. Основное отличие – в задачах. Windows-приложение ожидает действий пользователя и работает постоянно, пока оно запущено. В случае веб-приложения посетитель сайта видит уже результат выполнения программы, которая, к этому времени, уже завершила свою работу и освободила ресурсы сервера для обслуживания других посетителей. При открытии другой (или этой же) страницы выполняется новый экземпляр программы, который, после выдачи данных пользователю, также завершается. Таким образом, в операционной системе вам принадлежат все ресурсы компьютера, и почти неограниченное время, а в Веб вам принадлежит лишь совсем чуть-чуть памяти 140 (обычно 32-256 мб) и немного времени (обычно не более 30-90 секунд). Кроме того, спецификой любого более-менее посещаемого проекта является необходимость обслуживать различное число посетителей в разное время суток, и простым увеличением ресурсов сервера добиться необходимого качества очень сложно. В связи с этим конфигурирование веб-систем для работы с проектами на платформе Bitrix Framework имеет свои особенности. PHP-приложения Раньше HTML-проекты представляли собой обычный статический документ, который содержал специальные теги разметки. С точки зрения администратора веб-сайта, данные документы считываются веб-сервером и передаются по TCP/IP протоколу. Не выполняется никаких дополнительных приложений, не потребляется дополнительная память, не используется база данных. Это очень просто и удобно, но этого уже недостаточно для современных проектов. Наличие программной среды в системе управления сайтом позволяет создавать динамические интернет-проекты, оперативно и легко управлять информацией, анализировать эффективность проектов, менять содержимое вашего сайта в зависимости от тех или иных потоков посетителей и многое другое. Можно сказать, что все современные веб-проекты создаются с использованием того или иного языка программирования. Программный продукт "1C-Битрикс: Управление сайтом" разработан на языке программирования PHP. На данный момент поддерживается PHP версии 5.0.0 и выше. PHP: (англ. PHP: Hypertext Preprocessor — «PHP: препроцессор гипертекста») — скриптовый язык программирования общего назначения с открытым исходным кодом, применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов. Обратите внимание на отличие PHP от скриптов, написанных на других языках, например, на Perl или C: вместо того, чтобы создавать программу, которая занимается формированием HTML-кода и содержит бесчисленное множество предназначенных для этого команд, создается HTML-код с несколькими внедренными командами PHP. Код PHP отделяется специальными начальным и конечным тегами, которые позволяют процессору PHP определять начало и конец участка HTML-кода, содержащего PHP-скрипт. Значительным отличием PHP от какого-либо кода, выполняющегося на стороне клиента, например, JavaScript, является то, что PHP-скрипты выполняются на сервере. Если бы у вас на сервере был размещен PHP-скрипт, клиент получил бы только результат выполнения скрипта, причем он не смог бы выяснить, какой именно код выполняется. Вы 141 даже можете сконфигурировать свой сервер таким образом, чтобы HTML-файлы обрабатывались процессором PHP, так что клиенты даже не смогут узнать, получают ли они обычный HTML-файл или результат выполнения скрипта. С точки зрения администратора, принципиально важен тот факт, что PHP исполняется на сервере и является интерпретируемым языком. Интерпретируемый язык - это значит, что сколько бы раз вы не запрашивали страницу на языке программирования PHP, она будет каждый раз обрабатываться на сервере специальным интерпретатором PHP, будет проверяться синтаксис языка, правильность конструкций и вызовы функций, и только после этого, код PHP будет исполняться. Таким образом, в отличие от обычных HTML-страниц, сайты на PHP потребляют больше оперативной памяти на один процесс веб-сервера. Веб-сервер может приступить к передаче страницы клиенту в большинстве случаев только после того, как страница готова и PHP выполнил свои инструкции. Это приводит к некоторому замедлению по сравнению с HTML-страницами в выдаче содержимого клиенту. Внимание! Задача администратора сервера – настроить программное обеспечение для минимизации нагрузки на сервер, организации стабильной работы сервера и ускорения работы сайтов. Базы данных Дополнительным фактором, влияющим на производительность системы, является правильное использование баз данных. Все современные проекты для отображения динамической информации (новостей, каталога товаров и др.) используют СУБД (системы управления базами данных), а СУБД, в свою очередь, требует правильной настройки своих параметров. Соединение с базой данных База данных представляет собой независимое клиент-серверное приложение, которое запускается и работает в операционной системе. Внешние приложения соединяются с базой данных через TCP/IP или внутренние потоки, направляют SQL-запросы и получают в ответ от базы данных необходимые данные. Возможно два типа соединения с базой данных для веб-приложения: обычное соединение; постоянное соединение (Persistent). Обычное соединение устанавливается каждый раз во время выполнения страницы при первом обращении к базе данных. Установленное соединение освобождается (в большинстве случаев и закрывается) после завершения страницы. 142 Постоянное соединение (функции PHP обычно называются *_pconnect) устанавливается один раз при первом обращении к базе данных и при повторных обращениях, даже из других страниц, используются уже открытые соединения к базе данных. Учитывая, что открытие соединения к базе данных - процесс относительно дорогой по ресурсам и времени (происходит установление TCP/IP соединения, выделяются буферы памяти, проводится проверка и авторизация, настраиваются перекодировщики и выполняется целый ряд других функций), использование постоянных соединений является предпочтительным, если это не приводит к превышению числа одновременных соединений с базой данных. Примечание: Устанавливая соединение с базой данных, при указании параметру server значения localhost или localhost:port, PHP в большинстве своем будет пытаться соединиться с локальным сокетом без использования TCP/IP. Если вы все же хотите использовать TCP/IP, используйте адрес 127.0.0.1 вместо localhost. Соединение без использования TCP/IP дает наивысшие результаты по производительности, особенно при передаче больших объемов информации из базы данных. Но если база данных расположена на другой машине и избежать соединения по TCP/IP не удается, использование постоянного соединения становится еще более выгодным. В большинстве случаев база данных работает на той же машине, что и PHP-приложение и веб-сервер. Но вполне возможна ситуация, когда база данных установлена на соседней машине или даже у другого провайдера. "1С-Битрикс: Управление сайтом" устанавливает соединение с сервером базы данных через стандартные библиотеки, которые идут в поставке языка программирования PHP. В "1С-Битрикс: Управление сайтом" тип соединения с базой данных устанавливается в файле: /bitrix/php_interface/dbconn.php. Пример содержимого файла: define("DBPersistent", true); $DBType = "mysql"; $DBHost = "localhost:31006"; $DBLogin = "root"; $DBPassword = ""; $DBName = "bsm_demo"; $DBDebug = false; $DBDebugToFile = false; 143 Используйте константу DBPersistent, чтобы установить тип соединения с базой данных. Для отключения постоянного соединения используйте: define("DBPersistent", false); Использование постоянных соединений может потребовать некоторой настройки Apache и MySQL. Убедитесь, что вы не превысите максимальное число дозволенных соединений. Читайте дополнительную информацию в документации PHP относительно используемой вами базы данных. Используемые базы данных "1С-Битрикс: Управление сайтом" поддерживает следующие типы баз данных: Бесплатные MySQL MSSQL Express 2005 OracleXE Коммерческие Oracle MSSQL 2005 Какие проекты можно назвать большими? Комплексное сочетание целого ряда факторов может привести к тому, что проект получает название «большой» и требует определенного конфигурирования и отношения: большая посещаемость проекта в среднесуточном выражении; высокие пиковые нагрузки; невозможность кэшировать страницы в силу сложной бизнес-логики; большие интерактивные проекты: форумы, блоги, журналы; индивидуальные страницы для отдельных пользователей; большие объемы данных; недостаточность аппаратных ресурсов по отношению к предыдущим факторам. Примечание: даже если у вас сравнительно небольшой проект, лучше настроить веб-сервер правильно, чтобы в случае неожиданного роста посещаемости, например, при рекламной кампании, сайт стабильно работал. 144 Почему умирают сайты? Прежде чем переходить к выбору рекомендаций по конфигурированию, необходимо внимательнее изучить основные причины, которые приводят к нестабильной работе вебсервера или даже к полному отказу в обслуживании. Четкое понимание причин позволит вам вдумчиво подходить к рекомендациям и максимально эффективно использовать все имеющиеся у вас аппаратные ресурсы. Как работает веб-сервер Рассмотрим типичную схему работы веб-сервера: При запросе страницы сайта происходит обращение к веб-серверу, который запускает интерпретатор PHP для выполнения скрипта. Далее программа выполняется, взаимодействует с СУБД и отдает результат выполнения клиенту. Кроме того, веб-сервер отдает клиенту сопутствующие файлы – картинки, документы, css файлы и другую статическую информацию. В современных сайтах при открытии каждой страницы клиенту отдается несколько десятков файлов – от действительно результата выполнения PHP программы до статических картинок. Важно отметить, что для отдачи каждого файла используется, как правило, отдельный процесс apache, который занимает память веб-сервера. В 2012 году средний размер процесса apache в памяти – от 64 до 500 мб, и очень легко занять всю оперативную память процессами веб-сервера. Узкие места Выделим несколько узких мест в приведенной схеме: 145 1. Передача данных клиенту. Решение проблем медленных каналов 2. Производительность PHP. Уменьшение времени выполнения скрипта. 3. Обмен с базой данных. 4. Настройка СУБД на максимальную производительность 5. Отдача статики. Решение проблемы медленных каналов. Передача данных клиенту Работа веб-сервера Apache организована таким образом, что процесс веб-сервера занимает память системы, пока полностью не завершит отдачу файла. Таким образом, в случае если у клиента медленный канал связи, то даже при быстром выполнении PHP скрипта сервер будет не справляться даже с маленькой нагрузкой. Дополнительно, при отдаче статических файлов с помощью Apache ценная память вебсервера используется расточительно – под выдачу статики, для обработки которой не требуется выполнять программы на PHP. В течение всего времени передачи страницы клиенту веб-сервер будет держать в памяти практически бездействующий процесс Apache, который будет только дожидаться завершения передачи данных, но не сможет высвободить память и высвободиться сам, чтобы обработать другой запрос. Очень часто администраторы не отдают себе отчет в том, насколько данный фактор влияет на стабильность системы и эффективное использование оперативной памяти. Давайте сделаем простой расчет. Рассмотрим две системы: А и Б. В системе А время генерации страниц составит 0.1 секунды, а время передачи страницы клиенту в среднем будет составлять всего 5 секунд (в реальной жизни среднее значение 146 окажется еще больше). В системе Б мы будем считать время генерации страниц равным 0.1, а время передачи страницы пользователю равным нулю. Предположим, что на каждый сайт поступает по 100 запросов в секунду. Система А Обработка 100 запросов в секунду потребует одновременной работы 500 самостоятельных процессов веб-сервера. "Почему?" - спросите вы. А как же иначе, если даже обработав запрос за 0.1 с., наши процессы, получается, еще не способны обрабатывать другие запросы, а будут висеть в памяти и просто дожидаться, пока пользователи в течение 5 секунд будут получать страницу. На четвертой секунде вебсервер получит еще 100 запросов и должен будет запустить еще 100 процессов. Соответственно, на пятой секунде в памяти должно находиться 500 процессов и только с этого момента процессы первой секунды начнут высвобождаться и обрабатывать новые запросы. Таким образом, система А для нормальной работы будет запускать порядка 500 процессов, что потребует от нас в лучшем случае 32 Гб оперативной памяти. Обратите внимание, что даже если бы время генерации страниц было равно 0.001 секунды, это бы не увеличило производительность системы, так как процессы ожидают передачи данных пользователям на медленных каналах, а не времени генерации страниц. Т.е. производительность системы А никак не связана с производительностью PHP и продукта. Система Б За первую секунду на сервер поступит 100 запросов. Для обработки 100 запросов нам потребуется всего 10 процессов. Один процесс обрабатывает один запрос за 0.1 секунды. Как мы договорились для системы Б, время передачи страницы пользователю будет равно нулю. Т.е. за 1 секунду, один процесс веб-сервера способен обработать 10 запросов пользователей! К завершению первой секунды, все запросы будут обработаны всего 10 процессами и ко второй секунде все эти процессы будут свободны и готовы обрабатывать следующие запросы. Так же случится и на третьей секунде, и через час. Таким образом, система Б для нормальной работы будет запускать всего 10 процессов, что потребует от нас порядка 640М оперативной памяти. И очень важно отметить, что уменьшение времени генерации страниц до 0.01 секунды позволит реально увеличить производительность системы в 10 раз, и нам будет достаточно уже только 1 процесса для обработки всех 100 запросов в секунду. Производительность системы Б зависит только от производительности PHP и продукта и не зависит от медленных каналов. Это очень наглядный пример, который демонстрирует, насколько велико влияние медленных каналов пользователей на общую производительность веб-системы. Вебсервер очень неэффективно расходует оперативную память на медленных каналах. 147 Немного забегая вперед отметим, что существуют методы, которые позволяют построить систему очень близкую к модели Б и полностью снять зависимость веб-системы от медленных каналов и увеличить производительность и устойчивость в несколько раз. Производительность PHP, базы данных и статика Рассмотрим остальные "узкие места". Производительность PHP. Уменьшение времени выполнения скрипта. До 60% рабочего времени веб-сервера тратят на повторную компиляцию PHP-кода перед исполнением. Ключевой способ снизить нагрузку на процессор – использовать прекомпиляторы PHP-кода, которые снижают нагрузку на систему за счет перевода PHP из интерпретируемого в частично компилируемый язык. Обмен с базой данных Если ваш проект работает на выделенном сервере, вы можете настроить взаимодействие с СУБД для уменьшения затрат времени на установку соединений. Для этого используется постоянные соединения с базой данных, что позволяет уменьшить общее время выполнения скрипта. Настройка СУБД на максимальную производительность Установки по умолчанию для большинства СУБД рассчитаны на некие средние величины. Для повышения производительности необходимо оптимизировать эти настройки. Отдача статики. Решение проблемы медленных каналов. Также как и при передаче данных клиенту, для повышения производительности хостинга необходимо решить вопрос с медленными каналами связи, но уже применительно к статической информации. Все сказанное для первого пункта применимо и для отдачи статики. Причины "умирания" сайтов Таким образом, при больших нагрузках функционирование по следующим причинам: проект может прекратить нормальное Нехватка оперативной памяти для нормальной одновременной работы процессов веб-сервера и базы данных. 148 В большинстве систем на каждый запрос к сайту открывается отдельный процесс веб-сервера. Обычный размер процесса Apache с подключенным PHPмодулем и работающим приложением может составить порядка 64-500 мегабайт. В результате пиковых нагрузок происходит одновременный запуск очень большого числа процессов (иногда больше нескольких сотен процессов). И как следствие, начинается свопирование процессов, а это неизбежно сказывается на производительности базы данных, и производительность всей системы в целом резко снижается. Нехватка процессорных ресурсов для одновременного выполнения процессов и обеспечения адекватного для пользователя времени реакции. Данная ситуация может возникнуть в том случае, если в результате большого числа запросов к вашему серверу число одновременно выполняемых запросов превысит процессорные мощности сервера. И даже если у вас достаточно оперативной памяти и первая проблема не проявила себя, вы можете обнаружить, что система перестала адекватно отвечать на запросы, время выполнения страниц увеличилось в несколько раз, база данных перегружена очень большим числом запросов. Все это может привести к тому, что все без исключения пользователи не смогут работать с сервером. Недостаточная производительность базы данных при одновременных конкурентных запросах, невозможность полностью использовать ресурсы сервера. Эта ситуация очень часто возникает при работе с MySQL. Надо отметить, что обычно MySQL использует формат таблиц MyISAM. Это очень простой и эффективный вариант работы, но, к сожалению, при большом числе одновременных запросов такая база данных становится критически узким местом в производительности системы в целом. Во время вставки данных, обновления и некоторых других запросах, происходит эксклюзивное блокирование таблиц и, как следствие, все запросы выполняются только последовательно, а не одновременно. В результате, при росте нагрузки, время генерации страниц возрастает необоснованно резко и в итоге становится неприемлемо большим. Менее всего подвержены подобным проблемам проекты, использующие Oracle или MSSQL, MySQL с форматом таблиц InnoDB. Общая несбалансированность веб-системы при пиковых нагрузках и быстрая регрессия производительности даже при незначительных стрессах. При пиковых нагрузках вся система испытывает перегрузки. В дополнение к перечисленным проблемам возможно возникновение проблем в дисковой подсистеме. В итоге, если под одной из составляющих начинается потеря производительности, то существенно падает производительность всей системы, начинается падение производительности в других частях и, в итоге, еще больше снижается работоспособность, производительность системы регрессирует и иногда наступает полная остановка в работе. 149 Двухуровневая конфигурация веб-сервера Front-End и Back-End Наилучшим способом для устранения перечисленных проблем является создание двухуровневой системы Front-End + Back-End для обработки запросов. Front-End – публичная часть проекта, обеспечивающая прием запросов от пользователей, трансляцию запросов к Back-End и выдачу непосредственного содержимого пользователю. Back-End – исполнительная часть системы, которая обеспечивает выполнение PHP-скриптов, формирование контентных страниц и работу бизнес-логики приложений. Рассмотрим пример конфигурации более детально. После применения оптимизации у нас должна получиться система примерно следующего вида: Front-end Начнем с построения Front-end системы и определения целей и задач, которые будет решать данная часть двухуровневой архитектуры. В качестве Front-End сервера можно использовать NGINX, SQUID, OOPS или любой аналогичный продукт. NGINX представляет собой очень компактный и быстрый веб-сервер (HTTP-сервер). Он потребляет очень мало оперативной памяти, умеет самостоятельно обслуживать статические запросы и выполнять акселерированное проксирование без кэширования статических объектов. Например, если запрашивается графический объект, NGINX самостоятельно выполняет считывание данных с диска и передает файл пользователю. SQUID и OOPS - это классические прокси-сервера, которые выполняют проксирование запросов и чаще всего кэшируют статические запросы, сохраняя в кеше или у себя на 150 диске копии статических запрашиваемых объектов в течение определенного интервала времени. Наилучшие практические результаты получены при использовании NGINX. Но использование кэширующих прокси-серверов также возможно с получением отличных результатов. Создавая двухуровневую архитектуру мы выставляем перед пользователем Front-end систему - легкий веб-сервер или прокси-сервер, который принимает все запросы от пользователей, исполняет все запросы, которые возможно обработать самостоятельно без обращения к Back-End. Если используется NGINX или аналогичный продукт, все статические объекты напрямую считываются с диска и передаются клиенту. Если используется кэширующий прокси-сервер, статические объекты, графические файлы и таблицы стилей запрашиваются с Back-end только при первом обращении к ним. После этого файлы хранятся в кэш Front-end в соответствии с политикой кэширования и отдаются пользователям без обращения к Back-end. Основные цели, которых мы добиваемся созданием первого Front-end уровня: минимизация числа запросов, поступающих к Back-end веб-серверу. Надо добиться ситуации, когда Front-end будет обращаться к Back-end процессам только для получения содержимого PHP-страницы. Все запросы к статическим объектам должны обрабатываться легкими процессами Front-end самостоятельно или при использовании кэширующего прокси-сервера на всех запросах, кроме первого. Совет: проверьте лог Back-end веб-сервера, чтобы убедиться, что вы настроили все правильно и действительно исключили лишние запросы. В логе должны быть представлены только страницы PHP, другие запросы не должны проходить к Back-end системе и не будут отражаться в лог файле. минимальное потребление оперативной памяти при обработке статических запросов. Число статических запросов существенно превосходит число запросов к PHP-страницам. Процессы Front-end потребляют в среднем 25М оперативной памяти и очень незначительно увеличиваются при обработке статических документов. Это позволяет в разы уменьшить потребление оперативной памяти всей системой в целом. защита системы от фактора медленных каналов. Как для статических запросов, так и для HTML-страниц, полученных от PHP-процессов Back-end веб-сервера, процессы Front-end могут передавать страницу пользователю достаточно долго, потребляя при этом очень мало оперативной памяти. Таким образом, Front-end, транслируя запрос к Back-end, получает ответ, высвобождает процессы Back-end для обработки других запросов, а сам передает страницу пользователю, снимая фактор медленных каналов. Система приближается к идеальной системе Б в примере, приведенном в уроке Передача данных клиенту. Внимание! Убедитесь, что буферы Front-end достаточны, чтобы без ожидания на передаче принять от Back-end всю страницу. Т.е. фактически 151 буфер в идеале должен быть равен размеру самой большой страницы у вас на сайте. механизм защиты Back-end от большого числа запросов за счет ожидания свободных процессов Back-end для продолжения работы. Проверьте и убедитесь, что Front-end будет ожидать 5-10-15 минут, пока не высвободятся процессы Back-end. Наличие такого механизма позволит нам настроить Backend так, чтобы полностью стабилизировать систему и подготовиться к стрессовым нагрузкам. Как вы видите, появление Front-end позволяет нам снять целую категорию рисков и подготовить систему к дальнейшей работе Внимание! Если вы используете кэширующий прокси-сервер в качестве Front-End, обязательно настраивайте время кэширование документов. Графические файлы и таблицы стилей, XML-файлы и другие статические объекты с веб-сервера должны запрашиваются только в соответствии с политикой кэширования. После этого файлы хранятся в прокси-сервере и отдаются пользователям без обращения к BackEnd и Apache. Рекомендуется настраивать время кэширования для графических файлов на 3-5 дней. Пример настройки кэширования через файл .htaccess в корне веб-сервера: ExpiresActive on ExpiresByType image/jpeg "access plus 3 day" ExpiresByType image/gif "access plus 3 day" Для работы этого примера необходимо, чтобы веб-сервер позволял переопределение переменных через файл .htaccess и модуль mod_expires был установлен. В некоторых случаях на Front-end политика кеширования настраивается независимо от настроек Back-end. Таким образом, Front-end будет кешировать все графические изображения. Запросы к контентным страницам не будут кешироваться и будут перенаправляться к Back-end. Back-end и порядок взаимодействия Back-end представляет собой обычный веб-сервер Apache, который исполняет PHPприложения. Back-end готов исполнять запросы на графические и статические документы, если вы используете кэширующий прокси-сервер для Front-end. Но очень важно, чтобы число запросов к статическим элементам через Back-end было минимальным и 99% запросов приходилось на выполнение именно PHP-страниц. Не забывайте, что использование Back-end для обработки статических запросов обходится очень дорого. 152 Конфигурируя Back-end, можно добиться значительного выигрыша в производительности и стабилизировать систему по расходу памяти. В большинстве случаев Back-end представляет собой обычный веб-сервер Apache, работающий на нестандартном порту, к примеру, на порту 88 и отвечающий только на запросы с localhost или IP адреса Frontend. Совет администратору: Лучше использовать несколько внутренних IP адресов типа 127.0.0.2, 127.0.0.3 и т.д. с 80-м портом, иначе возможны нежелательные редиректы на неработающий порт у Front-end. Процесс взаимодействия Рассмотрим процесс взаимодействия Front-End и Back-End при обработке запроса пользователя к обычной странице сайта. Запрос от пользователей принимается Front-end, например, по адресу http://www.1c-bitrix.ru/ на 80 порту. На нашем сайте мы используем NGINX в качестве Front-end. Запрос принимается и транслируется к Back-end (веб-сервер Apache с PHP), который обрабатывает запросы по адресу http://127.0.0.2:80/. Запрос исполняется Back-end веб-сервером, отрабатывает программный продукт на PHP и генерируется HTML-текст страницы для пользователя. Подготовленная HTML-страница от Back-end передается Front-end как ответ на запрос пользователя, соединение между Front-end и Back-end закрывается (желательно не использовать KeepAlive на Back-end), и процесс Back-end высвобождает оперативную память или начинает обработку другого запроса. Front-end передает готовую сформированную страницу посетителю столько времени, сколько требуется пользователю, даже если он работает на медленном канале. Потребление памяти Front-end для передачи страницы пользователю минимально. Получив страницу, браузер посетителя посылает последовательно серию запросов на графические элементы и таблицу стилей. Все запросы принимаются Front-end и обрабатываются без обращений к Back-end, т.е. все статически документы самостоятельно вычитываются с диска без использования медленных и дорогих процессов Back-end. Пример уменьшения объема памяти Пример уменьшения объема занимаемой оперативной памяти и числа процессов при подключении Front-end сервера (без настройки на отдачу статических файлов). В этом примере был подключен NGINX, который все запросы, в том числе и запросы к статике, передавал back-end (Apache). Никаких дополнительных настроек на Back-end не выполнялось. Время подключения NGINX – 12:50. Используемая веб-сервером память: 153 Число одновременно выполняемых процессов apache: Как показала практика, двухуровневая конфигурация Front-end + Back-end существенно разгружает машину, уменьшает объемы потребляемой памяти, значительно ускоряет время обработки запросов и позволяет больше памяти выделить для работы базы данных. Такая конфигурация также позволяет значительно разгрузить сервер при обработке большого числа статических файлов, например, музыки, дистрибутивов программных продуктов, презентаций и других схожих объектов. Например, простым подключением NGINX удалось снизить нагрузку на веб-сервер в 5 раз. Стабилизируем Back-end по расходу оперативной памяти Даже создав двухуровневую конфигурацию, очень важно стабилизировать системы по расходу памяти независимо от нагрузки и защитить сервер от перегрузки. Для стабилизации системы по расходу памяти и минимизации числа запущенных процессов Back-end мы рекомендуем в настройках сервера Apache установить параметр MaxClients в значении от 5 до 50, в зависимости от объема оперативной памяти. 154 Значение этого параметра не должно превышать 80% от объема доступной памяти сервера за вычетом памяти, выделенной под СУБД. Устанавливая MaxClients, вы ограничиваете возможное число одновременно запущенных процессов Back-end. Тем самым, удается поставить жесткий лимит по потреблению памяти и исключить выход машины из строя при стрессовых нагрузках. Пример поведения сервера при неправильно установленном MaxClients Зависание сервера при слишком большом значении MaxClients: На приведенном скриншоте произошло следующее: Запущена команда top в Linux, показывающая объем занятой и свободной памяти, число выполняющихся процессов и объем памяти, занимаемый ими. В данном примере достаточно посещаемый веб-сайт работал на мощном сервере с двумя 4-х ядерными процессорами и 5 Гб оперативной памяти. Размер swap-файла – 4 Гб. MaxClients был установлен в 100. Каждый процесс apache занимал около 250 Мб, что привело к полному исчерпанию и оперативной памяти, и файла подкачки на 40 процессах apache. В связи с отсутствием доступной памяти процессоры сервера не смогли справиться с нагрузкой и сервер зависал. 155 Таким образом, число MaxClients необходимо подбирать, исходя из системных ресурсов и нагрузки. Методика подбора параметра Методика подбора может быть следующей. Посчитайте, сколько памяти у вас занимает один Back-end процесс. Например, 50 Мб. Если мы установим MaxClients равным 4, значит максимальное потребление памяти может составить 200 Мб. Для машины с 512 Мб оперативной памяти MaxClients желательно выбрать между 5-10. Для правильной конфигурации Front-end, когда вся статика обрабатывается без участия Back-end, это позволит вполне комфортно обрабатывать порядка 50 тысяч хитов в сутки или примерно 10-20 тысяч уникальных пользователей. Для крупных проектов с конфигурациями из двух машин или при наличии больших объемов памяти рекомендуется производить выбор значения MaxClients в процессе нагрузочного тестирования. Важно! Подбирайте MaxClients так, чтобы система при стрессовых нагрузках потребляла не более 90% процессорных ресурсов и никогда не доходила до 100%. Это позволит вам стабилизировать использование процессорных ресурсов и быть уверенным, что не начнется общая регрессия по производительности во время пиковых нагрузок. Обратите внимание, что очень важно настраивать время ожидания для Front-end таким образом, чтобы при отсутствии свободных процессов в Back-end, Front-end ожидал освобождения ресурсов. Тем самым организуется очередь запросов, и Back-end защищается от перегрузки. Так же рекомендуется подбирать параметры управления процессами Back-end в соответствии с установленным лимитом MaxClients. Например, если MaxClients = 5, тогда рекомендуется установить: MinSpareServers 5 StartServers 5 MaxClients 5 Т.е. это означает, что при старте сервера сразу будет запущено столько процессов Backend, сколько максимально возможно соединений. Процессы никогда не будут выгружаться из памяти и будут готовы в любой момент принять и обработать запрос от Front-end. При запуске системы мы с вами сразу увидим объем используемой Back-end оперативной памяти, что позволит остальную память распределить для базы данных. Совет! Рекомендуется для начала выбирать минимальное значение MaxClients, например, 5. В процессе работы проекта проверять время исполнения страницы. Если на быстром канале наблюдается ситуация, когда время выполнения страницы (параметр ?show_page_exec_time=Y) в пиковые моменты показывает стабильно 156 минимальное значение, а визуально мы наблюдаем существенную задержку перед открытием страницы, то это может свидетельствовать о нехватке процессов Back-end. Иными словами о том, что запросы принимаются Front-end и долго удерживаются в ожидании высвобождения Back-end процессов. В этом случае можно рекомендовать увеличить MaxClients, но обязательно с учетом общего баланса системы по расходу памяти. MaxClients и базы данных Еще одно преимущество использования MaxClients связано с базами данных. Наличие лимита позволяет включить постоянное соединение к базе данных (только если у вас свой сервер с 1-2-я проектами) и уменьшить время соединения с базой данных и число работающих процессов базы данных. Если величина параметра MaxClients меньше или равна максимальному числу соединений с базой данных, то это гарантирует, что никогда не будет запущено больше этого числа процессов Back-end. Следовательно к базе данных не будет открыто больше соединений. Фактически, всегда в памяти будут находиться MaxClients загруженных процессов Back-end с открытыми соединениями к базе данных, готовые к обработке запросов. Внимание! Практика показывает, что администраторы поверхностно относятся к данной рекомендации и не устанавливают лимиты или устанавливают их необоснованно большими. Это приводит к полному дисбалансу двухуровневой системы и потере стабильности при больших нагрузках (см. рисунок выше). Еще раз подчеркнем, что соблюдение этих рекомендаций позволяет: Стабилизировать конфигурацию по расходу памяти при любых нагрузках; Защитить сервер от производительности; Безопасно использовать постоянное соединение к базе данных. процессорных перегрузок и общей регрессии Производительность PHP Важно! До 60% рабочего времени веб-сервера тратят на повторную компиляцию PHP-кода перед исполнением. Ключевой способ снизить нагрузку на процессор – использовать прекомпиляторы PHPкода. PHP прекомпиляторы: Zend Performance Suite 157 Alternative PHP Cache (APC) eAccelerator XCache PHP Accelerator AfterBurner Cache Лучшие результаты производительности и кэширования PHP достигаются с использованием прекомпилятора Zend optimizer+ из пакета Zend Server (CE) или APC (Alternative PHP Cache), как более стабильная, но менее производительная альтернатива. Не забывайте выделять достаточный объем оперативной памяти для хранения разделяемого кэша скомпилированных PHP-файлов. Обычно бывает достаточно 32-64 Мб, но для уверенности можно увеличить объем выделяемой памяти до 128 Мб, в расчете на файлы административного раздела. Прекомпиляторы используют разделяемый кэш для хранения скомпилированного PHP кода в оперативной памяти, который доступен всем рабочим процессами веб-сервера, при этом скомпилированный PHP код хранится в кэше в единственном экземпляре (без дублирования). Для уменьшения потребляемой памяти процессами веб-сервера, в котором запускается PHP, желательно исключить из компиляции или динамической загрузки все неиспользуемые модули. При этом очень важно, чтобы в кэш прекомпилятора помещалось достаточное количество скриптов на PHP. Одна из самых часто встречающихся ошибок - это отсутствие каталога для сохранения откомпилированного кода. Для ускорения работы с PHP-сессиями рекомендуется сохранять файлы сессий в каталоге, который представляет собой виртуальный диск в памяти или использовать установку session.save_handler=mm в php.ini. Если есть возможность, рекомендуется использовать системный RAM диск. Панель производительности Важным инструментом по настройке производительности PHP является модуль Монитор производительности, входящий в комплект всех продуктов "1С-Битрикс". Протестировать настройки системы можно в административной части на странице Панель производительности (Настройки > Производительность > Панель производительности). Неоптимальная конфигурация PHP: 158 Как правило, выполнение рекомендаций позволяет увеличить производительность системы до достаточных величин. Численное значение параметра Конфигурация показывает основную характеристику сайта – скорость отдачи страниц клиенту. Чем больше число, тем лучше. Некоторые типовые ошибки Ошибка Segmentation fault может произойти: В результате "падения" РНР при использовании отложенной загрузки классов; При использовании Zend server могут "упасть" скрипты в cron или консоли. В первом случае необходимо определить в dbconn.php: define("NO_BITRIX_AUTOLOAD",true) Во втором случае надо использовать другую версию PHP без подключения Zend optimizer+ или в "падающем" скрипте определить: define('BX_NO_ACCELERATOR_RESET', true) Сжатие страниц Компрессия при передаче данных между сервером и клиентом обеспечивает сжатие страниц для ускорения вывода содержания сайта пользователям. Сжатие в несколько раз уменьшает объем передаваемых HTML-данных между сайтом и браузером клиента, что существенно увеличивает скорость работы как для посетителей, так и для администраторов сайта. 159 Предпочтительнее сжимать страницы на Front-End. При отсутствии такой возможности можно сжимать данные на Back-End. Возможные способы сжатия: mod_deflate; модуль Компрессии, входящий в продукты "1С-Битрикс"; стандартные модули PHP ; стандартные модули Apache. Для исключения излишнего расходования процессорных ресурсов рекомендуется применять сжатие только на одном уровне. Например, при использовании сжатия Frontend сервером рекомендуется не использовать сжатие на уровне Apache и отключить модуль компрессии "1С-Битрикс: Управление сайтом". Дополнительные рекомендации для двухуровневой конфигурации По умолчанию, при работе в двухуровневой конфигурации, в качестве адреса клиента будет указываться адрес, на котором работает NGINX или другой акселератор. Для правильной работы модуля статистики необходимо обеспечить передачу реального IP адреса с Front-end в Back-end. Например, для NGINX используется следующая технология: сервер NGINX устанавливает специальный заголовок в запросе, а специальный модуль apache (rpaf или real_ip) учитывает этот заголовок вместо стандартного. Если же такой модуль не установлен, то вы можете сами изменить адрес клиента. Например, если адрес клиента передается в переменной HTTP_X_FORWARDED_FOR (так делает прокси-сервер SQUID) или HTTP_X_REAL_IP, то для замены переменной в продукте необходимо в файле /bitrix/php_interface/dbconn.php вставить подобный пример кода: if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) isset($_SERVER['HTTP_X_REAL_IP'])) { || foreach(array('HTTP_X_FORWARDED_FOR', 'HTTP_X_REAL_IP') as $key => $value) { if( isset($_SERVER[$value]) && strlen($_SERVER[$value]) > 0 && strpos($_SERVER[$value], "127.") !== 0 160 ) { if($p = strrpos($_SERVER[$value], ",")) { $_SERVER["REMOTE_ADDR"] trim(substr($_SERVER[$value], $p+1)); = $REMOTE_ADDR $_SERVER["HTTP_X_FORWARDED_FOR"] substr($_SERVER[$value], 0, $p); = = } else $_SERVER["REMOTE_ADDR"]= $_SERVER[$value]; $REMOTE_ADDR = break; } } } Кроме того, в конфигурации Apache на Back-end желательно отключить KeepAlive. Поскольку Front-end находится или на этой машине, или "рядом", более быстрое высвобождение ресурсов предпочтительнее. Достигнутые результаты В результате построения двухуровневой архитектуры и выполнения ряда рекомендаций мы должны получить следующие результаты: система стабилизирована по расходу памяти; Front-End и Back-End занимают заранее отведенный объем памяти, который не будет расти даже при увеличении нагрузки; в стрессовой ситуации система будет стабильно и равномерно обрабатывать запросы, Back-end не будет увеличивать число одновременно выполняемых процессов выше установленного лимита MaxClients, Front-end будет принимать все запросы от пользователей и ожидать освобождения процессов Back-end; использование процессорных ресурсов ограничено числом одновременно работающих процессов Back-end в соответствии с MaxClients, не начнется регрессия производительности; 161 возможно безопасное использование постоянного соединения с базой данных без опасения превысить число возможных соединений; в памяти все время находится установленное число Back-end процессов, готовых к обработке запросов и с установленным соединением с базой данных; процессорные ресурсы существенно высвобождены за счет прекомпиляции PHP-кода; пользователи комфортно работают со сжатыми страницами. Пример настройки двухуровневой архитектуры В качестве примера рассмотрим конфигурацию виртуальной машины VMBitrix. В состав конфигурации входят: Веб-сервер Apache в качестве Back-end NGINX в качестве Front-end Zend Server CE в качестве настроенного модуля PHP (с прекомпилятором) Дополнительные настройки СУБД MySQL и других параметров сервера. Для рассмотрения и управления настройками перейдите в консоль виртуальной машины или подключитесь к ней через ssh или sftp. Настройка веб-сервера Apache Основным конфигурационным файлом веб-сервера является /etc/apache2/apache2.conf (в других системах файл может называться /etc/httpd/httpd.conf). Далее, подключается файл с настройкой портов прослушивания для веб-сервера и другие файлы. Иногда это все размещается в одном файле, иногда (как в виртуальной машине – в разных). Рассмотрим основные параметры этих файлов. /etc/apache2/apache2.conf: Timeout 300 #если 300 секунд не происходит никаких операций, завершить процесс KeepAlive Off #все запросы у нас короткоживущие User ${APACHE_RUN_USER} #пользователь, под которым работает веб-сервер Group ${APACHE_RUN_GROUP} #группа, под которой работает веб-сервер /etc/apache2/ports.conf: 162 Listen *:8888 #веб-сервер работает на порту 8888 /etc/apache2/envvars Осуществляется установка переменных окружения – пользователя и группу. export APACHE_RUN_USER=bitrix export APACHE_RUN_GROUP=bitrix /etc/apache2/conf.d/prefork Осуществляется настройка числа процессов сервера. #работает с этим расширением StartServers 4 #4 одновременных сервера MinSpareServers 4 MaxSpareServers 4 MaxClients 4 #4 одновременных клиента MaxRequestsPerChild 200 #после 200 запросов перезапускать процесс Таким образом, настройки веб-сервера достаточно простые. Фактически, в стандартной конфигурации достаточно изменить только порт, на котором работает веб-сервер и параметр MaxClients и связанные с ним. Пример: число процессов веб-сервера Как определить максимальное число процессов веб-сервера? Естественно, только опытным путем. При этом начальное значение можно подобрать достаточно просто – нужно посмотреть, сколько занимает процесс apache во время типового обращения к сайту: Зайдите в Linux и запустите команду free. Она покажет вам общий размер оперативной памяти и свободный размер: # free total used free shared buffers 255676 224340 31336 0 33468 -/+ buffers/cache: 122908 cached Mem: 67964 163 132768 Swap: 530136 51800 478336 В примере показано, что в системе ~256 Мб памяти, ~500 Мб swap (виртуальная память на диске). Системной памяти занято ~120 мб, вся неиспользуемая память отдана под файловый кэш Наберите команду top. Откройте любую страницу сайта, параллельно смотря значение в программе top. Вверху появится процесс с названием apache2: PID USER COMMAND PR 14687 bitrix apache2 20 NI 0 VIRT 153m RES 45m SHR S %CPU %MEM 28m R 6.7 18.2 TIME+ 0:05.34 В этом примере столбец RES как раз и показывает примерное количество памяти, выделяемое на один процесс. Таким образом, для типового сайта на "1С-Битрикс: Управление сайтом" – это около 50 Мб. Соответственно, параметр MaxClients выбран 4 исходя из соображения, что должна остаться память под операционную систему и работу СУБД. Из этого примера видно, что для достаточно посещаемого сайта (не интернет-магазина) минимальные требования по памяти для веб-сервера (или VPS) – от 512 Мб. Для интернет-магазина с обменом с "1С" минимальный объем памяти на сервере или VPS должен быть не менее 1 Гб. Настройка Front-end NGINX Каталог с конфигурацией NGINX - /etc/nginx. Рассмотрим его конфигурационный файл /etc/nginx/nginx.conf: user bitrix; #пользователь, под которым работает nginx. Желательно совпадение с пользователем apache worker_processes 8; #8 одновременных процессов error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; worker_rlimit_nofile 10240; файлов events { use epoll; 164 #максимальное число открытых worker_connections 10240; #максимальное число соединений с одним процессом. Система может одновременно работать с max_clients = worker_processes * worker_connections, т.е. с 81920 соединений, в том числе статических файлов } http { include /etc/nginx/mime.types; default_type application/octet-stream; #формат логов log_format [$time_local] $status' main '$remote_addr '"$request" - $remote_user $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; log_format [$time_local] "$request" "$http_user_agent" $msec'; access_log sendfile $status common '$remote_addr - $bytes_sent "$http_referer" /var/log/nginx/access.log common; on; tcp_nopush on; tcp_nodelay on; client_max_body_size 10m; # максимально допустимый размер тела запроса клиента, указываемый в строке "ContentLength" в заголовке запроса client_body_buffer_size proxy_connect_timeout 128k; 300; #время на ожидание соединения proxy_send_timeout 300; proxy_read_timeout 300; proxy_buffer_size 64k; 165 proxy_buffers 8 64k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 10m; gzip on; #сжимать передаваемые данные gzip_proxied any; gzip_types application/x-javascript text/css; server { #виртуальный хост listen 80; #порт 80 server_name bitrix; #адрес узла. Если узел всего один – можно написать любой server_name_in_redirect off; #лучше поставить в ON – передавать запрошенное имя сайту access_log /var/log/nginx/access.log common; index index.php; error_page 500 502 503 504 /500.html; error_page 404 = /404.php; #установить дополнительные заголовки для определения адреса клиента в статистике сайта proxy_set_header X-Real-IP $remote_addr; proxy_set_header $proxy_add_x_forwarded_for; X-Forwarded-For proxy_set_header Host $host:80; client_max_body_size передаваемого файла 1024M; #максимальный размер client_body_buffer_size 4M; root /var/www; #корневая папка сайта #включить https режим при нахождении в корне сайта файла .htsecure if (-f /home/bitrix/www/.htsecure) { 166 rewrite ^(.*)$ https://$host$1 permanent; } #выбрать, какие данные показывать напрямую пересылать backend серверу, а какие – #в данной конфигурации все пересылается backend серверу #обилие вариантов потребовалось компании Битрикс для того, чтобы при добавлении в конфигурацию отдачу статических файлов напрямую через NGINX динамические запросы на псевдостатические файлы все-таки перенаправлялись на backend location / { expires 3d; if ($request_method = OPTIONS ) { proxy_pass http://127.0.0.1:8888; } if ($request_method = PROPFIND ) { proxy_pass http://127.0.0.1:8888; } if ($request_method = PROPPATCH ) { proxy_pass http://127.0.0.1:8888; } if ($request_method = MKCOL ) { proxy_pass http://127.0.0.1:8888; } if ($request_method = COPY ) { proxy_pass http://127.0.0.1:8888; } if ($request_method = MOVE ) { 167 proxy_pass http://127.0.0.1:8888; } if ($request_method = LOCK ) { proxy_pass http://127.0.0.1:8888; } if ($request_method = UNLOCK ) { proxy_pass http://127.0.0.1:8888; } } location ~ ^(/extranet/docs|/docs|/workgroups|/company/profile|/bitrix/tools|/com pany/personal/user).*/$ { proxy_pass http://127.0.0.1:8888; } location ~ ^(/extranet/docs|/docs|/workgroups|/company/profile|/bitrix/tools|/com pany/personal/user) { if (-d $request_filename) { rewrite ^(.*)(/*)$ $1/ last; } proxy_pass http://127.0.0.1:8888; } location ~ ^(/bitrix/html_pages) { root /var/www; 168 index [email protected]; if (!-f $request_filename) { rewrite ^/bitrix/html_pages(.*)@(.*)\.html$ $1.php?$2 break; rewrite ^/bitrix/html_pages(.*)\.html$ $1\.php break; proxy_pass http://127.0.0.1:8888; } } location ~ \.php$ { root /var/www; if ($request_method = POST ) { break; proxy_pass http://127.0.0.1:8888; } if ($http_cookie !~ "PHPSESSID=" ) { rewrite ^(.*)\.php$ /bitrix/html_pages$1@$args.html? last; } proxy_pass http://127.0.0.1:8888; } location ~ /$ { root /var/www; if ($request_method = POST ) { break; 169 proxy_pass http://127.0.0.1:8888; } if ($http_cookie !~ "PHPSESSID=" ) { rewrite /bitrix/html_pages$1/index@$args.html? last; ^(.*)/$ } proxy_pass http://127.0.0.1:8888; } location ~ (/|\.php|\.asmx)$ { proxy_pass http://127.0.0.1:8888; } location ~ /\.ht { deny all; } location ~ /favicon.ico { proxy_pass http://127.0.0.1:8888; } location ~ ^(/bitrixsetup\.php)$ { proxy_pass http://127.0.0.1:8888; proxy_buffering off; } } #аналогичная конфигурация для https (удалена) } 170 В данной конфигурации настройка NGINX проведена так, что все обращения к серверу будут перенаправляться на Back-end сервер. Однако, можно избранные файлы отдавать через NGINX. В этом случае будет достигнуто дополнительное увеличение производительности. Дополнительную информацию по настройке NGINX вы можете получить на сайте www.nginx.ru и wiki.nginx.org. Отдача графики напрямую NGINX Для того, чтобы графические файлы отдавались напрямую NGINX, вам необходимо добавить в конфигурацию сервера строки, подобные этим: location ~* \.(jpg|jpeg|gif)$ { root /var/www; access_log off; expires 3d; } В приведенном примере все файлы с расширением jpg, jpeg или gif будут считываться напрямую NGINX, причем корневой папкой для хранения файлов будет /var/www. Оптимизация базы данных Оптимизация работы с базой данных для MySQL, Oracle, MSSQL является одной из важнейших стратегий в оптимизации системы в целом. У каждого производителя базы данных есть целый раздел в документации, который посвящен вопросам производительности и оптимизации работы базы данных. Вы должны понимать, что типовая поставка базы данных обычно подразумевает минимальное серверное оборудование, минимальную память и диски. Т.е. стандартные конфигурации не учитывают возможности вашего оборудования и вашего приложения. Вы обязательно должны настраивать базу данных для обеспечения оптимальной работы. 171 Основные принципы Если кратко попробовать сформулировать стратегию оптимизации, то прозвучит это примерно так: как можно меньше дисковых операций чтения данных; старайтесь увеличивать размер буфера кэширования, чтобы база данных как можно меньше читала данные с диска; как можно меньше сортировок данных на диске; старайтесь увеличить буфер сортировки таким образом, чтобы избежать двойных сортировок и сортировок на диске. увеличивайте параллельность исполнения запросов за счет запуска большого числа процессов базы данных, выбора форматов хранения данных, обеспечивающих параллельность работы; отложенная фиксация транзакций на диске; очень желательно настроить базу данных так, чтобы при изменении данных или их вставке не производилась немедленная запись на диск, а изменения собирались и фиксировались с некоторым интервалом; это позволяет значительно быстрее возвращать управление продукту после выполнения SQL запросов. Примечание: Надо отметить, что при этом несколько снижается надежность. В случае сбоя системы те данные, которые еще не "сброшены" на диск, будут потеряны. Давать конкретные рекомендации по настройке базы данных достаточно сложно, так как сервер базы данных - это сложное приложение и вам обязательно нужно проконсультироваться с документацией поставщика по вопросам настройки. Но стоит отметить особое преимущество, которое мы получили в результате создания двухуровневой конфигурации. Созданная нами система сбалансирована по расходу оперативной памяти, и мы точно знаем свободный объем памяти и можем безопасно для системы использовать эту память для конфигурирования базы данных. В большинстве систем порядка 60-80% оперативной памяти удается выделить для базы данных и это позволяет значительно ускорить работу всей системы в целом. Постоянное соединение с базой данных Важным параметром, влияющим на потребление памяти базами данных (MySQL\Oracle), является максимальное число одновременных соединений (определяемое параметрами max_connections и processes соответственно). При использовании двухуровневой архитектуры Front-end/Back-end можно в несколько раз уменьшить число одновременных соединений и высвободить больше памяти для сортировки данных в памяти и буферизации. 172 Если установлено число MaxClients в настройках веб-сервера Back-end, можно считать, что максимальное число соединений к базе данных будет соответствовать максимальному числу одновременных соединений. Рекомендуется подбирать параметр max_connections таким образом, чтобы иметь резерв в 10-20% свободных соединений от максимального значения. Настройка базы данных MySQL Оптимизация работы с базой данных для MySQL-версии продукта является одной из важнейших стратегий в оптимизации системы в целом, так как продукт активно работает с базой данных. Стандартно MySQL работает с форматом данных MyISAM. Простой формат данных хранит каждую таблицу с данными или индекс в отдельном файле. В целом, на небольших по нагрузке сайтах данный формат является наиболее быстрым, хотя и не обеспечивает полной целостности и надежного хранения данных за счет отсутствия транзакций. Основным недостатком MyISAM с точки зрения производительности является блокировка на уровне таблицы при выполнении тех или иных операций. В результате, при большой нагрузке MySQL именно MyISAM таблицы становятся основным узким местом в системе, мешая увеличивать утилизацию машины и число обрабатываемых запросов. Это также приводит к увеличению времени работы страницы за счет ожидания используемых таблиц на уровне MySQL. Рекомендуется переводить все таблицы проекта в формат данных InnoDB. Формат InnoDB, начиная с версии MySQL 4.0, входит в стандартную поставку продукта и обеспечивает надежное хранение данных, транзакционность и блокирование данных на уровне строки. Два важных момента, которые дают основание предпочесть таблицы InnoDB перед MyISAM: Надежность. В MyISAM высока вероятность сбоя таблиц, особенно больших, особенно при высокой посещаемости, особенно часто изменяемых. Есть риск потерять несколько (десятков, сотен) записей и целостность данных. В InnoDB чинить отдельные таблицы не придется. Если упадет, так все сразу. Но на практике это - исключительное явление, практически не встречаемое. Благодаря транзакционности, риск нарушения целостности минимальный. Недостатки InnoDB: нужно внимательно следить за свободным местом на диске; накапливающаяся фрагментация данных (лечится периодическим переводом таблиц из InnoDB в MyISAM и обратно). 173 Скорость. На невысокой посещаемости MyISAM ведет себя быстрее, как на модификацию, так и на чтение. Однако, при росте посещаемости достаточно быстро сказывается отсутствие транзакций и блокировка на уровне таблиц. При некоторой величине посещаемости проект просто реально умирает. В InnoDB запись будет медленнее (транзакции же), зато при высокой посещаемости блокировки наступят намного, намного позже, чем для MyISAM. Поменять тип таблиц на InnoDB можно следующим образом: 1. В административном меню Настройки системы > Инструменты > SQL запрос выполнить команду: SHOW TABLES 2. В результате вы получите список всех текущих таблиц продукта. Для каждой таблицы необходимо выполнить команду: ALTER TABLE <ИМЯ ТАБЛИЦЫ>, type=InnoDB В FAQ приведен пример для создания скрипта для перевода таблиц в InnoDB. 3. После перевода таблиц вашей базы в InnoDB надо добавить в файл /bitrix/php_interface/dbconn.php нижеследующий код: define("MYSQL_TABLE_TYPE", "InnoDB"); Переход на тип таблиц InnoDB позволяет избежать возникновения узкого участка в производительности при работе с базой данных и в полном объеме использовать системные ресурсы. Внимание! Обязательно конфигурируйте InnoDB. Для лучшей производительности базы данных при работе с InnoDB рекомендуется настроить my.cnf для MySQL в разделе параметров для InnoDB innodb_*. Наибольшее внимание следует обратить на следующие параметры и примеры: set-variable = innodb_buffer_pool_size=250M set-variable = innodb_additional_mem_pool_size=50M set-variable = innodb_file_io_threads=8 set-variable = innodb_lock_wait_timeout=50 set-variable = innodb_log_buffer_size=8M set-variable = innodb_flush_log_at_trx_commit=0 174 Рекомендуется: Для сокращения времени ответа сервера можно использовать отложенные транзакции и, в частности, устанавливать переменную set-variable = innodb_flush_log_at_trx_commit=0. Если MyISAM уже не используется активно, можно высвободить память в пользу InnoDB параметров. Желательно, чтобы кэш данных вмещал в себя основной объем данных, используемых продуктом в работе. Обычно для работы базы данных выделяется порядка 60-80% свободной памяти в системе. Рекомендуется: Производить многопотоковую (multithreading) сборку MySQL для улучшения производительности системы и возможностей по параллельной обработке запросов. Пример рекомендуемых настроек для сервера с 2 Гб оперативной памяти, работающего с операционной системой FreeBSD/Linux: set-variable = table_cache=4096 В составе продукта около 250 таблиц, поэтому рекомендуется увеличивать кэш для заголовков таблиц. set-variable = key_buffer_size=16M set-variable = sort_buffer=8M set-variable = read_buffer_size=16M Эти параметры используются только для MyISAM. Если в базе нет таблиц MyISAM, то лучше установить минимальные значения. set-variable = query_cache_size=64M set-variable = query_cache_type=1 Кэширование результатов запросов. Обычно бывает достаточно 32 Мб (смотреть на статус Qcache_lowmem_prunes). Максимальный размер результата по умолчанию - 1 Мб, его можно регулировать. set-variable = innodb_buffer_pool_size=780M Основной буфер - чем больше, тем лучше. set-variable = innodb_additional_mem_pool_size=20M Вспомогательный буфер на внутренние структуры, большой делать не имеет смысла. set-variable = innodb_log_file_size=100M 175 set-variable = innodb_log_buffer_size=16M Чем больше размер лог-файла, тем реже надо будет записывать в основной файл данных. Суммарный размер лог-файла может быть сопоставим с величиной innodb_buffer_pool_size (по умолчанию ведется два лога). set-variable = innodb_flush_log_at_trx_commit=0 Отложенная фиксация транзакций, раз в секунду set-variable = tmp_table_size=32m Размер временных таблиц рекомендуется увеличивать до 32 Мб. Рекомендуется так же увеличивать join_buffer_size до 2 Мб, это существенно влияет на скорость выполнения ряда запросов. set-variable = join_buffer_size = 2M Совет администратору Переход на InnoDB может привести к значительному замедлению некоторых масштабных операций записи и обновления данных. Это связано с тем, что все операции по изменению данных начинают выполняться с использованием транзакций. Кроме того, в отличие от MyISAM для кэширования таблиц InnoDB не используется кэш операционной системы, а все кэшированные данные хранятся в кэше БД, определяемом параметром innodb_buffer_pool_size. Вы должны сами определить оптимальность перехода вашего проекта на формат данных InnoDB. Внимание! Если по каким-то причинам вы решили продолжить работу с типом данных MyISAM, обязательно проведите конфигурирование MySQL для увеличения объемов кэшируемой информации, областей сортировки и минимизации числа дисковых операций. Использование для базы данных 60-80% оперативной памяти может ускорить работу стандартного проекта в несколько раз. Временная папка При наличии достаточного количества ОЗУ рекомендуется выносить временную папку MySQL на ramdisk в памяти. Для этого: Убедитесь, что в ядре реализована поддержка tmpfs. Создайте новую точку монтирования и дайте все права на использование: # mkdir /mnt/tmpfs/ # chmod 777 /mnt/tmpfs/ 176 Дайте команду (от рута или через sudo): # mount -t tmpfs -o size=1024M tmpfs /mnt/tmpfs/ или $ sudo mount -t tmpfs -o size=1024M tmpfs /mnt/tmpfs/ где 1024M есть размер RAMdisk в Мегабайтах. Внимание! К размеру папки нужно подходить осторожно: если вы попросите создать ramdisk больше, чем имеете оперативной памяти, система начнёт сгружать всё в swap-файл и реальный результат подключения временной папки может быть отрицательным. Список ссылок по теме: Частный опыт настройки MySQL Настройка базы данных Oracle Продукт «1C-Битрикс: Управление сайтом» протестирован и успешно работает с Oracle 9i и 10g. Использование Oracle в качестве базы данных позволяет значительно увеличить надежность системы и производительности при большой нагрузке. Архитектура Oracle позволяет практически полностью использовать ресурсы серверов, добиваясь при этом прекрасной интерактивности приложений, даже при работе с большими объемами данных, построении больших отчетов или большом числе одновременных соединений. Работа с Oracle также позволяет использовать самые разные варианты масштабирования интернет-проекта. Общие рекомендации по настройке Oracle совпадают с рекомендациями Oracle по конфигурированию системы для уменьшения дисковых операций чтений, сортировки и перестроения. Стоит обратить внимание на системные переменные управления памятью. Рекомендуется использовать до 60-80% оперативной памяти для кеширования данных за счет управления переменными: db_cache_size shared_pool_size pga_aggregate_target 177 Начиная с версии Oracle 10, рекомендуется использовать Automatic Shared Memory Management: при установке БД, выбрать % ОЗУ, которая будет доступна БД в пределах 6080% от ОЗУ сервера с помощью параметра SGA_MAX_SIZE во время эксплуатации БД количество памяти, доступное Oracle можно откорректировать (в большую или меньшую стороны) с помощью параметра SGA_TARGET без перезапуска БД. Индикатором правильности установки параметров управления памятью будет отсутствие дисковых операций swap, также имеет смысл контролировать общесистемный размер используемого swap пространства - не более 100 MB. Для экономии места SGA (shared_pool) и уменьшения расходов процессорных ресурсов на разбор SQL-запросов, отличающихся только значениями констант, рекомендуется установить параметр cursor_sharing = FORCE либо cursor_sharing = SIMILAR отключив расчёт гистограмм для столбцов таблиц в параметрах сбора статистики: begin dbms_stats.set_param( 'METHOD_OPT', 'FOR ALL COLUMNS SIZE 1' end; ); Если Oracle установлен на той же машине, что и веб-сервер, рекомендуется использовать протокол IPC (PROTOCOL = IPC) и (KEY = EXTPROC) для соединения с базой для исключения работы через IP-стек. Если реализована двухуровневая схема обработки запросов с Front-end и Back-end и установлен параметр MaxClients, то можно без опасений использовать постоянные соединения между PHP и Oracle (Persistent connection), выполнив следующую установку в файле /bitrix/php_interface/dbconn.php: define("DBPersistent",true); Примечание: Начиная с релиза Oracle 10g R2, возможно использование отложенных транзакций (Enhanced COMMIT) в случаях если бизнес-требования к проекту допускают возможную потерю данных нескольких последних транзакций. Использование отложенных транзакций существенно ускоряет проект, позволяет снять прямую зависимость от производительности дисковой подсистемы и существенно уменьшить время генерации страниц. Для использования этого механизма, необходимо установить параметр: COMMIT_WRITE='BATCH,NOWAIT'. 178 Пример-упражнение Настройки MySQL для виртуальной машины В качестве примера рассмотрим как настроена база данных MySQL в виртуальной машине VMBitrix. Перейдите в папку /etc/mysql и посмотрите настройки MySQL для виртуальной машины. Выключите виртуальную машину и установите ей большее значение ОЗУ (например, 512 мб). Посмотрите, как изменились настройки в файле /etc/mysql/conf.d/bvat.cnf: Для 256 мб: [mysqld] query_cache_size=32M innodb_buffer_pool_size=32M для 512 мб: [mysqld] query_cache_size=48M innodb_buffer_pool_size=96M Кроме того, при 512 мб система чувствует себя гораздо свободнее: Доступная память при 256 мб: # free total used free shared buffers 0 33468 cached Mem: 67964 255676 -/+ buffers/cache: Swap: 224340 31336 122908 132768 51800 478336 530136 Доступная память при 512 мб: # free 179 total used free shared buffers 0 6944 cached Mem: 186336 515572 -/+ buffers/cache: Swap: 530136 299208 216364 105928 409644 0 530136 Связано это с тем, что виртуальная машина VMBitrix содержит скрипты, активизирующиеся при загрузке и устанавливающие необходимые параметры системы. Ключевым параметром является объем оперативной памяти, установленный в системе. Примечание: Кастомизацию настроек можно производить без отключения виртуальной машины. Для этого достаточно вносить изменения в файл /etc/mysql/conf.d/2_bx_custom.cnf. 180