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

Сайты в пуле BitrixVM - добавление, каталоги, права и доступ

Заводим сайт в пуле окружения, раскладываем права на файлы и настраиваем доступ к серверу для разработки.

Решение

Смотрим состав пула и каталоги сайтов:

Окно терминала
/opt/webdir/bin/bx-sites -a list # сайты пула, их домены и каталоги
ls -ld /home/bitrix/www /home/bitrix/ext_www/* # корни основного и остальных
# сайт, созданный руками мимо этого списка, окружение не обслуживает

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

Добавляем сайт в пул:

Окно терминала
/opt/webdir/bin/bx-sites -a create -s shop -u shopuser \
--site_type=kernel --dir=/home/bitrix/ext_www/shop
# окружение само создаст каталоги, пул процессов и конфигурацию веб-сервера

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

Проверяем и выставляем права на файлы:

Окно терминала
# владелец - пользователь сайта, группа - пользователь веб-сервера
chown -R bitrix:bitrix /home/bitrix/www
find /home/bitrix/www -type d -exec chmod 755 {} \;
find /home/bitrix/www -type f -exec chmod 644 {} \;

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

Настраиваем доступ для разработки:

Окно терминала
# ключ кладём пользователю сайта, а не root: файлы должны создаваться от него
mkdir -p /home/bitrix/.ssh && chmod 700 /home/bitrix/.ssh
cat developer.pub >> /home/bitrix/.ssh/authorized_keys
chown -R bitrix:bitrix /home/bitrix/.ssh

Подключение от имени администратора создаёт файлы с чужим владельцем, и через день сайт перестаёт их читать. Разработку ведут от пользователя сайта, а административные права поднимают только там, где они нужны.

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

Разделение сайтов по пользователям имеет смысл там, где у проектов разные владельцы. Тогда каждый видит только свой каталог, а случайная команда в чужом корне попросту не выполняется. Для сайтов одного владельца общий пользователь проще и не создаёт лишней путаницы с правами.

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

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

Меню окружения не видит сайт.

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

Сайт открывается, но не сохраняет файлы.

Владелец файлов - администратор, а не пользователь сайта. Веб-сервер читает такие файлы, но писать в каталог не может.

Второй сайт открывает содержимое первого.

Домен не привязан к своему сайту в настройках окружения. Веб-сервер отдаёт сайт по умолчанию.

После работы из среды разработки сломались права.

Подключение шло от администратора, и новые файлы получили его владельца. Разработку ведут от пользователя сайта.

Русские имена файлов превращаются в мусор.

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

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

Сколько сайтов держать на одном сервере?

Столько, сколько выдерживает память: у каждого свой пул процессов PHP. Магазин с обменом и посещаемостью обычно не сосуществует с чужими проектами.

Можно ли перенести сайт между пулами?

Да, как обычный перенос: файлы, база и настройки подключения. Запись в пуле нового сервера создают через меню до переноса файлов.

Нужен ли отдельный пользователь на каждый сайт?

На общем сервере с разными владельцами - да, это разделяет доступ к файлам. Для сайтов одного владельца достаточно общего пользователя.

Как отдать разработчику доступ только к одному сайту?

Отдельным пользователем с правами на каталог этого сайта. Права на каталоги соседних сайтов при этом не выдаются.

Смежное

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