Наши коллеги и партнеры — веб-студия «Оробланко» — решили устроить интересный эксперимент: запустить 1С-Битрикс на микрокомпьютере Raspberry Pi 2. О чем и написали подробно у себя в блоге. С их любезного разрешения публикуем результаты. :)
* * *
Сразу скажем, зачем нам это надо.
Понять, возможно ли это вообще. Убедиться, что Raspberry Pi 2 компьютер, а не игрушка.
Понять, насколько быстро и устойчиво будет работать Битрикс на таком слабом компьютере (и будет ли он работать вообще).
Подтвердить собственную квалификацию специалистов по настройке серверов, ведь задача нетривиальная.
Если все получится, то мы развеем старую легенду о том, что «Битрикс тяжелый, медленный и неповоротливый» и что ему нужны большие вычислительные ресурсы.
Некоторое время назад мы купили Raspberry Pi 2, собрали его и подключили к телевизору. Машинка показалась вполне шустрой, на борту 1 ГБ памяти и четырехядерный процессор плюс Debian, который в версии для Raspberry называется Raspbian. А так как мы сертифицированные партнёры 1С-Битрикс, у нас так и чесались руки скрестить Raspberry с Битриксом и посмотреть, что получится.
Мы выбрали чистую форму эксперимента, использовав Raspberry Pi 2 в дефолтной конфигурации и не подключали к компьютеру дополнительные HDD или SSD, оставив в качестве основного носителя MicroSD, а чтобы нам было веселее и компьютер не скучал, взли самую «тяжёлую» конфигурацию Битрикса. Редакция «Бизнес» и решение «Интернет-магазин». Чтобы уж сразу, как говорится, кувалдой по голове.
SD карты — носитель специфический. Самая затратная по времени операция — запись. Карта памяти у нас не самая медленная, кроме того, в Raspbian этот момент учтен и все пользовательские операции записи на диск кешируются в оперативной памяти (отложенная запись), поэтому с точки зрения пользователя всё «летает». Но как машинка будет работать с записью на карту в серверной конфигурации? Мы не знаем. Но попробуем.
Мы также понимали, что apache+mysqld — штука ресурсоёмкая, и под нагрузкой реально переполнение оперативной памяти, система начнет использовать своп и «сядет на диск», в результате сервер «ляжет». Поэтому мы сразу сделали ставку на nginx и композитный режим работы Битрикса, что позволит свести к минимуму наши риски.
Начинаем
Ставим на машинку штатный Raspbian и Midnight Commander для удобства. Raspbian выбран за отсутствие глюков и максимальную «вылизанность» и стабильность. Отключаем графический режим (X server) для экономии ресурсов. Дальше все делаем через SSH.
Обязательно выполняем команды
apt-get update
apt-get upgrade
Это оказалось важным. Если не обновить пакеты, то криво поставятся memcached и nginx, и мы с этим столкнулись.
Ставим Битрикс
Скачиваем инсталлятор веб-окружения.
wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh
chmod +x bitrix-env.sh
./bitrix-env.sh
Скрипт говорит «Что за дрянь вы мне даёте?» и вываливается. Смотрим, что не так. Ага, первым делом скрипт проверяет, что его запускают на системе, которая поддерживает набор команд x86. А мы ему ARM подсунули. Ну и ладно, людей, которые имели дело с ЕС-1040 и DEC VAX, не испугаешь. Скрипт мы править не стали. Ставим всё вручную, открываем нужные порты.
Что ставим:
- mysql
- apache
- php с требуемыми расширениями (например, geoip)
- gd
- nagios
- munin
- catdoc
- xpdf
- freetype
- apc
Nginx и memcached пока не ставим, так как интересно посмотреть, как оно будет работать на чистом апаче.
Скачиваем дистрибутив Битрикса и запускаем процесс установки. Оно таки ставится!
Интересности
Итак, у нас на Raspberry Pi 2 завелся Битрикс, на чистом апаче, без nginx и memcached. Подключаем кеширование APC. Так вот, APC для Raspbian работает в режиме Emulated. То есть он вроде как есть для тех, кому он нужен, но на самом деле его нет. Поэтому по факту он не дает прироста скорости сайту.
Еще одна интересность. Memcached в Raspbian не позволяет работать с сокетами. Как ни настраивай, что не прописывай. Не создаётся сокет, хоть тресни. Единственная возможность пользоваться memcached — обращаться к заглушке 127.0.0.1.
Оверклокинг нужно выключать. Он приводит к нестабильной работе и зависанию компьютера. Нужно выставлять дефолтную частоту 900 МГц.
Производительность
Панель производительности Битрикса при тестировании на чистом апаче выдаёт 6.5 — 7.0 «попугаев», что в общем не так плохо. На некоторых коммерческих хостингах бывают такие показатели. Но интересно то, что после подключения memcached спидометр «падает» до 3.5 — 4.0 «попугаев», хотя memcached реально ускоряет сайт. С чем связано такое поведение спидометра — непонятно. Тоже вот — интересность.
Apache под Raspbian не оптимизирован никак. Что приводит к куче висячих процессов и переполнению оперативной памяти. Поэтому пришлось поправить настройки, ограничив количество серверов и потребление ОЗУ.
MySQL так же потребовал настроек, чтобы оптимизировать сервер по памяти и производительности.
В общем и целом система работает, но ей явно тяжело. Посмотрим, как изменится ситуация с nginx.
Разгон
Как я уже упоминал, перед установкой nginx обязательно нужно проапдейтить систему. Иначе nginx ставится криво и, что интересно, вышибает апач. Поэтому у нас было две итерации установки. Без апдейта системы и с апдейтом.
После установки nginx, естественно, настраиваем frontend и backend (двухуровневая архитектура), включаем композитный режим в Битриксе и делаем тюнинг настроек nginx, отдавая ему на откуп все картинки и готовые html файлы из композитного кеша.
Включаем в настройках Битрикса CDN, чтобы максимально разгрузить сервер и вынести всю возможную статику наружу.
После подключения nginx и накопления композитного кеша сайт начинает работать очень быстро. Вот так:
Финализация
Пробрасываем порт через NAT, чтобы увидеть сервер снаружи и вешаем на домен. Проверяем сканером безопасности, настраиваем проактивную защиту и прогоняем тесты монитора качества. Настраиваем резервное копирование всей системы на внешний сервер Synology и ставим наш микросервер на внешний мониторинг. Потребление оперативной памяти системой в среднем — 400-700 МБ. Пока полёт нормальный.
Итоги
Мы сделали это! И вроде кроме нас так никто не извращался, мы первые в мире.
Битрикс может работать на чём угодно, доказанный факт.
Для нормальной производительности обязательны: композитный режим, nginx и настройка связки apache+mysqld.
Даже на Raspberry Битрикс может работать быстро.
Конфигурация проекта
1С-Битрикс, редакция «Бизнес» + решение «Интернет-магазин».
Включено композитное кеширование и CDN для статического контента.
Компьютер
Raspberry Pi 2
Процессор Broadcom BCM2836 quad-core ARMv7
Оперативная память 1ГБ
Носитель — карта Micro SD 32 ГБ
Скорость канала — 30 МБит/с или меньше.
ОС Raspbian