Перейти к содержимому

Установка и настройка BitrixVM - образ, скрипт, меню, свои настройки

Ставим BitrixVM образом или скриптом, проходим первый запуск и раскладываем свои настройки так, чтобы их не снесло обновлением.

Решение

Ставим окружение скриптом на чистый CentOS:

Окно терминала
wget https://repo.bitrix.info/yum/bitrix-env.sh
chmod +x bitrix-env.sh
./bitrix-env.sh # ставит nginx, Apache, PHP, MySQL и меню
# скрипт рассчитан на чистый сервер: поверх чужих пакетов он ломает настройки

Готовый образ виртуальной машины содержит ровно это же окружение, только уже развёрнутым. Для арендованного сервера берут скрипт, для локального стенда - образ: разница только в способе доставки.

Смотрим версию окружения и состав пула:

Окно терминала
rpm -q bitrix-env # версия окружения, не версия продукта
/opt/webdir/bin/bx-sites -a list # сайты пула с их каталогами
/opt/webdir/bin/bx-pool -a status # состояние пула и его узлов
systemctl status nginx php-fpm mysqld --no-pager | grep -E 'Active|●'

Версия окружения и версия «1С-Битрикс» не связаны и обновляются независимо. Путать их - частая причина попыток «обновить окружение» из админки сайта.

Кладём свои настройки PHP и MySQL:

Окно терминала
# свои директивы отдельными файлами: сгенерированные перезапишет обновление
echo 'memory_limit = 512M' > /etc/php.d/z_bx_custom.ini
echo -e '[mysqld]\ninnodb_buffer_pool_size = 2G' > /etc/mysql/conf.d/z_bx_custom.cnf
systemctl restart php-fpm mysqld

Префикс z_ в имени важен: файлы подключаются по алфавиту, и директива из файла с поздним именем перекрывает раннюю. Правки в /etc/php.ini и /etc/my.cnf живут до ближайшего обновления окружения.

Обновляем окружение отдельно от продукта:

Окно терминала
# сначала снимок диска или бэкап: откат обновления окружения штатно не предусмотрен
yum clean all && yum update bitrix-env
/opt/webdir/bin/bx-sites -a list # проверяем, что сайты на месте
rpm -q bitrix-env # и что версия окружения сменилась

Обновление перегенерирует конфиги nginx, PHP и MySQL. Свои файлы в подключаемых каталогах оно не трогает, а всё остальное приводит к своему виду.

Отката у обновления окружения нет, поэтому снимок диска делают всегда, а не только на боевом сервере. Стенд восстановить дешевле, чем разбираться, какой пакет откатился наполовину.

Пул сайтов - отдельное понятие, которое стоит понять до первой установки. Окружение ведёт список сайтов и обслуживает только то, что в нём числится: сертификаты, резервные копии, настройки почты и обновления. Сайт, развёрнутый руками в обход меню, остаётся невидимым для всей этой машинерии, и обнаруживается это обычно в момент, когда у него истекает сертификат.

Типичные проблемы

Настройки PHP вернулись к прежним после обновления.

Правка делалась в /etc/php.ini. Обновление окружения перезаписывает сгенерированные конфиги целиком: свои директивы кладут в /etc/php.d/ отдельным файлом.

Меню виртуальной машины не открывается.

Повреждён скрипт запуска или у пользователя нет прав. Меню - обычная программа пакета окружения, и восстанавливается переустановкой пакета: сайты и база при этом не страдают.

После включения машины сайт не поднимается.

Сервисы не в автозапуске. На образе они включены, но после ручных экспериментов с systemctl stop автозапуск нередко снимают и забывают вернуть.

На сервере два сайта, а меню видит один.

Второй сайт заводился руками, минуя меню. Окружение ведёт свой список сайтов пула, и то, чего в нём нет, оно не обслуживает: ни сертификаты, ни бэкапы, ни настройки.

Кодировка в консоли ломает русские имена.

Локаль системы отличается от UTF-8. Меню и скрипты окружения выводят русский текст, и в другой локали он превращается в мусор.

Частые вопросы

Можно ли поставить своё ПО рядом с окружением?

Да, но с оглядкой: окружение управляет nginx, Apache, PHP и MySQL и перегенерирует их конфиги. Сторонние сервисы на других портах живут спокойно, а вот второй веб-сервер на том же порту конфликтует.

Как подключиться к машине из среды разработки?

По SSH с ключом: пользователь bitrix владеет каталогом сайта. Права важнее доступа - файлы, созданные под другим пользователем, веб-сервер читать не сможет.

Что делать, если нужна версия PHP старше поддерживаемой?

Ставить окружение соответствующего поколения: каждая версия окружения несёт свой набор пакетов. Смешивать PHP из стороннего репозитория с окружением не стоит - обновление вернёт свой пакет.

Обновлять окружение или переустанавливать?

Обновлять, если версия близкая, и переустанавливать на новом сервере с переносом сайтов, если разрыв большой. Второй путь дольше, но предсказуемее: старые конфиги не тянутся следом.

Смежное

Первоисточник