На последней конференции обсуждали с коллегами, как внедрять открытые линии в компании, когда есть уже сложившиеся механизмы работы, в частности, модуль техподдержки. Сами мы готовимся к полному переходу поддержки на открытые линии, но пока работают два канала: открытые линии и модуль техподдержки. Расскажу, как подружить эти две системы.
Сразу оговорюсь, что это не готовый модуль с кнопкой, который надо только включить, чтобы заработал. Будет общее описание и куски кода, которые частично или полностью могут использоваться у вас.
Уже давно пользователям Битрикс24 помогает контекстная помощь. Находясь на любой странице портала нажимаем на знак вопроса и получаем ответы на самые актуальные вопросы:
Про производительность уже говорилось много, но всегда есть, что сказать. Сегодня хочу показать, как можно относительно просто отловить достаточно сложную проблему через профилирование. Этот пост является продолжением повествования о модуле bitrix.xdebug, где я обещал рассказать о профилировщике.
Положим, ваш сайт или корпоративный портал работает на хорошем железе, оценка производительности нормальная. Конфигурация сервера правильная (хорошо, если это наша виртуальная машина или rpm). Но какая-то страница или сайт в целом работает неудовлетворительно. Куда двигаться в такой ситуации?
Кто работал с каким-либо дебаггером кода, знает, как это бывает удобно для быстрой отладки: код можно выполнять построчно в поисках ошибки. PHP из коробки не имеет такой возможности, но можно поставить xdebug настроить GUI и получить тот же результат. На практике это хорошо работает для локальных скриптов, но настройка сильно усложняется когда скрипт работает на дальнем сервере. Когда речь идет о поддержке, то почти всегда приходится работать с дальним кодом. Мне давно хотелось решить эту проблему.
У нас в отделе регулярно встает задача спланировать отпуска сотрудников. При этом многие хотят пойти в одно время, но работа не позволяет отпускать всех одновременно. А кроме того, люди пришли в компанию в разное время, у всех свои остатки отпусков, нужно не перегулять и постараться не скапливать их. Когда в отделе работает больше четырех человек, табличка в Excel уже задачу не решает.
Для меня, как для руководителя отдела, это постоянно было предметом головной боли и хотелось навести порядок в этом вопросе.
Вы сильно заблуждаетесь, если считаете, что признаком сломанного сайта является турецкий флаг на главной странице. Давно существует налаженная схема зарабатывания денег на сломанных сайтах.
Сначала загружается "бэкдор" или "троян", что по сути одно и то же, представляет собой небольшой скрипт, позволяющий выполнять команды на зараженном сайте. Он может пролежать без дела не один месяц, но при этом дырка вашего сайта выложена на продажу на каком-нибудь хакерском форуме. Это первый этап заработка. Затем купивший уязвимость вставляет на сайте разного рода ссылки, предназначенные либо для продвижения чего-то в поисковиках (т.е. это черный SEO), либо для отправки ваших посетителей на хакерский (или тоже сломанный) сайт, который так или иначе вымогает деньги через SMS. К сожалению, вовлечённость населения в интернет на фоне компьютерной грамотности позволяет таким пакостным людям делать свой бизнес.
Для нашей компании вопрос безопасности имеет первостепенное значение. Мы изучаем каждую жалобу на взлом, скажу, что за мою практику работы в техподдержке (с 5-й версии), не было подтвержденного взлома через ядро битрикса.
Это не потому что наши программисты пишут идеальный код. Естественно, с опытом код становится надежнее, но программист думает о другом и по-другому. У взломщика деструктивное мышление, в определенной части программы оказываются данные, которые программист не предполагал получить, это приводит к некорректной работе программы.
Все наши дистрибутивы и все обновления тестируются специалистами по безопасности внутри компании перед выпуском. Мы ломаем свой код, уязвимости остаются внутри лаборатории. Но почему бывают взломы снаружи?
После перехода на новую версию появилось много жалоб на производительность. Главным образом пользователи заметили серьезное уменьшение "попугаев" монитора производительности. Мы тестировали дистрибутив и обновления в лабораторных условиях перед выпуском и не выявили проблем (выявленные проблемы были отправлены на доработку не попав в обновления). Но продолжаем регистрировать жалобы и исследовать их. Уже собралась порядочная статистика, которая выявила главные проблемы.
Есть определенные правила разработки на Битриксе, которые описаны в разных местах, хорошо понятны опытным битриксоидам, но остаются за семью печатями для начинающих.
С болью на сердце вижу, как многие проходят один и тот же путь, совершая те же ошибки. Не буду здесь писать о том, что перед началом разработки нужно прочитать документацию, руководства и учебные курсы (хотя это безусловно так). Who cares?
Постараюсь указать своего рода опорные флажки, за которые просто не надо заходить. Не пытайтесь понять это сейчас, позже понимание придет само.
В релизе "1С-Битрикс: Управления сайтом" 11.5 появится возможность не только делать бэкап сайта в облако, но и наоборот: резервные копии данных из облака. Если у вас настроено одно или несколько облачных хранилищ, то страница резервного копирования предложит дополнительные опции.
Мы часто говорим о том, что архитектура важна, что нужно заниматься проектированием, что архитектура бывает простая, сложная, правильная, неправильная. А что это и зачем оно надо, каждый понимает по-своему. Для кого-то это паттерны программирования, для кого-то - понятное АПИ, а кто-то, может быть, сюда относит отступы в коде. Изучая проблему одного проекта, подумал, что число 13 000 может стать хорошим подспорьем в вопросе выбора правильной архитектуры проекта на битрикса. Но об этом числе чуть позже.
Часто в крупных организациях доступ к интернету из внутренней сети ограничен, а доступ в сеть извне закрыт вовсе. Тогда возникает вопрос: как обновлять корпоративный портал чтобы сохранялись корпоративные требования безопасности?
Самое основное, что хотят все пользователи: сохранность персональных данных. Когда говорится, что для установки обновлений нужен доступ к глобальной сети, представляется совсем небезопасная схема.
Ранее писал о новом модуле для создания своих модулей. Затем появилась возможность собирать обновления для своих модулей. При этом не важно, созданы они были при помощи конструктора или руками. Хочу остановиться на этом важном вопросе отдельно.
Некоторое время назад написал скрипт, отображающий АПИ функции на основе исходников текущей установки. Позднее в нём нашлись баги и появились "фиче реквесты". Пришлось подкладывать обновленный скрипт на место старого. Конечно, было бы удобнее для всех ставить его и получать обновления через маркетплейс. Но никак не доходили руки изучить документацию чтобы оформить решение в виде модуля. Хорошо было бы иметь мастер, делающий всю "грязную" работу: создать структуру модуля, необходимые файлы, а потом и архив нужного формата. Не было, пришлось сделать
После прошлого обновления страницы проверки сайта в техподдержку поступило много пожеланий по улучшению существующих тестов. Главная проблема - непонимание того, что тестируется, как тестируется и зачем. Постарались максимально всё учесть.
Система одноразовых паролей позволяет существенно повысить безопасность сайта. Работает это так: каждый раз при авторизации вы дописываете к своему собственному паролю шесть цифр, сгенерированных специальным устройством. А значит, если злодей получит ваш пароль (через вирус, канал передачи, кеш браузера и пр.), он не сможет им воспользоваться для авторизации.
Пароли создаются по определенному алгоритму, зависящему от уникального кода устройства. Этот секретный код хранится в базе данных на сервере. Для каждого сотрудника необходимо покупать отдельный "брелок".
С недавних пор появились приложения для пользователей iPhone и Android. Сам являюсь давним поклонником nokia, а раз в нашей компании давно используются одноразовые пароли, до последнего времени вынужден был постоянно таскать с собой брелок. Увидев как коллега ловко авторизуется используя свой iPhone, решил потратить пару часов на написание java приложения для своего телефона.
Может возникать ситуация, когда сайт занимает много места на хостинге без видимых причин. Существуют графические утилиты, визуально отображающие занятое пространство, но использовать их на дальнем сервере не всегда представляется возможным. Для этого есть системная утилита unix du. Выводит размер папки или всех подпапок. Набросал небольшой скрипт, который через удаленную командную строку (ssh) визуально отображает занятое пространство в текущей папке. Используются только системные утилиты unix с тем чтобы он работал на большинстве хостингов.
В одном научно-популярном журнале прочитал когда-то, что Internet Explorer - программа, которая позволяет войти в интернет и скачать свой любимый браузер. Так я его и использовал до сегодняшнего дня. А тут поставил Windows Server 2008... и на тебе!
Часто приходится слышать вопрос: у нас свой сервер (или два), много ядер, памяти... почему же монитор производительности битрикса дает оценку производительности не выше (или ниже), чем на маленькой виртуальной машине? Давайте разберемся в этом вопросе.
Последнее время поступает много вопросов по работе встроенного резервного копирования. Основная проблема - это ограничения процессорных ресурсов на разделяемом хостинге.
Другая сложность с переносом обычно сопряжена с необходимостью "подобрать" нужный набор опций резервного копирования: архивировать ядро, публичку, базу, установить время шага.
В связи с ростом популярности виртуальной машины VMBitrix, особенно актуально иметь надёжный инструмент, который позволит сделать перенос существующего сайта внутрь виртуальной машины. А также переезд проекта с одной машины на другую. Ведь основная идея такая: виртуальная машина - это чёрный ящик, включили, нажали "перенести" и работаем. Появилась новая версия, перенесли проект на неё, старую "выбросили".
В ближайших обновлениях функционал резервного копирования и восстановления будет существенно улучшен.
"Мы сделали свой компонент, но при включении автокеширования он работает неправильно. Исправьте механизм кеширования."
Мне часто приходится слышать о такой проблеме. Аналогичная проблема возникает со своими шаблонами компонентов. Ситуация обычно усложняется тем, что техподдержка отказывается решать проблему ссылаясь на то, что стандартные компоненты системы работают нормально. Предлагаю окончательно разобраться в этом вопросе и расставить все точки над "i".
Специально выделил в отдельную статью вопрос изменения кода простого компонента от изменения шаблона. Мы подразумеваем, что шаблон компонента лишь формирует внешний вид данных, запросов к базе данных не делает. Если надо изменить порядок сортировки, фильтрацию, набор доступных полей - придётся либо делать дополнительные запросы к базе в result_modifier.php, либо менять код компонента.
Между тем, при работе с комплексным компонентом можно модифицировать один или несколько простых, остальные остаются стандартные.
Как известно, комплексный компонент обеспечивает взаимодействие простых компонентов с общей тематикой. Простые компоненты содержат код непосредственной работы с данными. Например, компоненты соцсети настраивать по отдельности не удобно. Но если надо лишь изменить внешний вид некоторых элементов, это можно легко сделать, не отказываясь от остальных стандартных шаблонов.
В продукте есть замечательная страница проверки сайта (Настройки - Инструменты - Проверка сайта), которая призвана решать проблемы настройки сервера ещё до написания в техподдержку. На сегодня функционал сильно отстаёт от текущих проблем, которые хорошо диагностируются скриптом тестирования хостинга. Будем переносить часть функционала скрипта и добавлять специфичные тесты для существующей установки.
Несмотря на то, что поддержка UTF8 появилась в продукте давно, остаются много проектов, сделанных на старой версии в cp1251. Теоретически сделать конвертацию не сложно, однако могут возникнуть трудности. Сразу оговорюсь, что данный пост не претендует на статус официального документа, это должно быть хорошее подспорье по проблеме.
Обновление: с егодня для библиотеки документов Битрикса можно подключить файловое хранилище на диске, так что материал статьи носит скорее академический, чем практический интерес.
Структура инфоблоков напоминает дерево файловой системы. Но элементы инфоблоков хранятся в базе данных, работать с ними можно через административный интерфейс или программно используя АПИ. Иногда надо быстро изменить разветвлённую структуру простых элементов (например, FAQ). Кто пользуется FAR, знает, как это легко можно сделать с файлами. Здесь хорошо было бы иметь возможность получить файлы из инфоблоков и наоборот. Другой случай: есть корпоративное хранилище документов, при переходе на "1С-Битрикс: Корпоративный портал" было бы удобно перевести хранилище на встроенную библиотеку документов. В этом случае файлы будут храниться в свойстве инфоблока. Можно подключить сетевой диск и передать файлы на него, но для больших хранилищ это будет не вполне удобным (не хочу в рамках данного изложения углубляться во все технические особенности процесса). А вот файлы в инфоблоки напрямую возможно? Возможно! Для этого надо писать свои скрипты. Предлагаю свой вариант вашему вниманию.
Довелось впервые выступить на партнёрской конференции. За кулисами обсуждали работу техподдержки и технические проблемы. Лично для себя вынес много ценной информации. Надеюсь, что для партнёров мероприятие было такое же полезное и интересное как для нас, разработчиков. Одной из тем докладов была производительность. И судя по тому, что на второй день конференции не раз возвращались к этому вопросу в кулуарах, понятно, что тема интересная и животрепещущая Хочу теперь зафиксировать квинтэссенцию доклада и этих обсуждений.
Обновление от 16.09.09: улучшил скрипт по совету из комментариев.
Обновление от 07.12.2012: Если ваш сайт сломали, вам сюда.
Всё больше набирают популярность вирусы, написанные для сайтов. Вы заходите на сайт, "Касперский" говорит, что сайт заражён вирусом. В действительности, сам вирус находится на одном из компьютеров, имеющих ftp доступ к сайту. Он незаметно для хозяина крадёт пароли от ftp, подключается и вставляет в скрипты сайта паразитный код. Чаще всего это скрытые ссылки на китайские сайты. Вы обновляете свой антивирус, лечите заражённый компьютер, а сайт остаётся в нерабочем состоянии с большим количеством испорченных файлов. Искать код вручную задача не из приятных. Но можно упростить себе жизнь при помощи несложных скриптов.
Пример типовой проблемы "периодически сайт начинает тормозить, помогите найти причину". Основные проблемы три: - проблемы работе почтовой системы (почта отправляется медленно или функция mail подвисает при отправке на некорректные адреса), решается вынесением почты на cron; - работа системных агентов (периодически медленный агент вешает сайт); - поисковые роботы (порой бот сканирует сайт так усердно, что это напоминает DOS атаку). В последнем случае основная проблема - понять, где именно создаётся нагрузка на сервер. На практическом примере покажу, как решается задача при помощи модуля "монитора производительности".
Практически любой современный динамический сайт предполагает наличие обратной связи от посетителей. В "Битриксе" есть серьёзный инструмент для работы с формами: модуль "Веб формы". Я не буду о нём рассказывать, есть соответствующая документация. Но редакцию "Старт" этот модуль не входит, ведь для простых сайтов надо обычно лишь форму отправки на email. Это сделать довольно просто. Один из вариантов покажу здесь.
Что делать если на каждый хит теряется авторизация? Простому пользователю проще будет написать в техподдержку. А разработчик сайта может сам легко продиагностировать эту проблему не дожидаясь ответа техподдержки. Для гуру веб разработок материал, возможно, будет не очень интересен. А для тех, кто хочет такими стать, предлагаю доступное изложение работы механизма авторизации.
В продукте есть функционал резервного копирования, но для создания резервной копии требуется участие администратора. Создание резервных копий по расписанию не предусмотрено. Недоделка? Нет, есть объективные причины, не позволяющие это сделать достаточно эффективно. Создание архива - длительный и ресурсоёмкий процесс, на один хит это делать никак нельзя. Повесить по шагам на агенты? Представьте как посетители будут работать с сайтом если на каждый хит создаётся часть резервного архива: это будут жуткие тормоза. Делать совсем маленькими шагами? Тогда создание архива может затянуться на целый день (дни), а информация на сайте успеет обновиться. Как же быть? Сделать интерфейс, через который можно запускать создание архива через внешний планировщик (cron)? Правильно! Тогда возникает вопрос: зачем? Ведь можно использовать системные инструменты. И здесь хочу показать, как это делать.
Предлагаю вашему вниманию свои изыскания по вопросу производительности php (а точнее, предпочтительный вариант конкретно для Битрикса) в разных режимах запуска. Целью не было получить какие-то цифры по возможной посещаемости, а именно сравнить разные варианты при прочих равных условиях.
Обновление от 18.12.2012. Уже довольно давно существует свойство инфоблоков типа видео, которое решает эту задачу без кастомизации. Данный пост можно рассматривать как общий случай подключения компонентов внутри новостей.
Несколько западных клиентов обратились с вопросом: как сделать возможность вставки видео при публикации новостей на сайте? На первый взгляд это может показаться сложно, но фактически легко реализуемо. Думаю, русскоговорящим разработчикам задача тоже может быть интересна.
Выдалась свободная минутка, решил посчитать, что сегодня есть Битрикс. Под рукой у меня есть последняя стабильная установка на linux машине - замечательная возможность получить некоторые цифры. За основу бралась папка bitrix/modules, она в себе содержит все стандартные компоненты. Собственно, надо найти все файлы "php", узнать размер и посчитать число строк.
При разработке сайтов рано или поздно нам всем приходится сталкиваться с таким понятием как права на файлы и папки в Unix/Linux системах. А точнее даже не столько с самим понятием, сколько с проблемами в связи с неправильными правами. Все мы выросли на системе windows и сложное понятие прав поначалу кажется пугающим. Что ещё хуже, кто начинает работать с Битриксом, зачастую ошибочно считает, что это исключительно проблема нашего продукта.
Клиент подкинул интересную задачу, которая на первый взгляд не решаема. Положим есть сайт, где можно свободно подписаться на рассылку, со временем пользователи меняют адреса или изначально указывают невалидные. Письма не уходят и в общем тормозят работу сервера. Аналогичная ситуация возникнет при отправке писем зарегистрированным пользователям (например, уведомления с форума). Как избавиться от таких адресов?
Очень много информации на нашем сайте по настройке многосайтовости, но эта тема почему-то всегда вызывает много вопросов. Хотя на мой взгляд здесь всё довольно просто. Ну начнём с того, что на одной установке Битрикса можно сделать много сайтов (без покупки дополнительных лицензий можно сделать два сайта), а значит закроем первый вопрос: для настройки многосайтовости надо установить Битрикс только один раз. Есть довольно подробный учебный курс, где описывается два способа настройки многосайтовости.