Команда начинает работу над сайтом мероприятий на Bitrix Framework. Первая задача — поднять рабочее окружение, где можно писать и проверять код. Вторая — договориться, где этот код будет лежать.
Вторая задача важнее, чем кажется. Продукт регулярно обновляется, и обновления перезаписывают системные файлы. Если положить свой код не туда, следующее обновление его сотрет. Поэтому мы не только установим продукт, но и разберемся, какие папки ваши, а какие принадлежат системе.
Поднимаем окружение в Docker
Для стенда используем официальное контейнерное окружение env-docker. В нем уже настроены PHP, веб-сервер nginx, базы данных MySQL и PostgreSQL, cron и другие сервисы, которые нужны продукту. Собирать окружение вручную не придется.
Перед началом установите Docker Desktop для Windows или macOS либо Docker Engine для Linux.
-
Склонируйте репозиторий окружения в папку проекта:
git clone https://github.com/bitrix-tools/env-docker.git cd env-docker - Задайте пароли баз данных в файлах .env_mysql и .env_postgresql, а секретный ключ Push-сервера — в файле .env_push. Команды для генерации паролей и ключа есть в README репозитория.
-
Запустите контейнеры:
docker compose up -d -
Проверьте, что контейнеры запустились:
docker compose psВ колонке SERVICE должны быть php, nginx, mysql и другие, в колонке STATUS — Up.
Авторы окружения не рекомендуют обращаться к сайту через localhost или 127.0.0.1. Используйте IP-адрес компьютера в локальной сети или локальный домен, например dev.bx, прописанный в файле hosts. Сайт доступен на порту 8588 по HTTP и на порту 8589 по HTTPS.
Устанавливаем продукт
Продукт устанавливают скриптом bitrixsetup.php. Скрипт скачивает дистрибутив выбранной редакции и запускает мастер установки.
-
Войдите в консоль контейнера php под пользователем bitrix:
docker compose exec --user=bitrix php shПользователь bitrix важен. Под ним работает PHP, и файлы сайта должны принадлежать ему. Если создать файлы под root, сайт не сможет их изменить.
-
Перейдите в корневую папку сайта и скачайте скрипт:
cd /opt/www/ wget https://www.1c-bitrix.ru/download/scripts/bitrixsetup.php - Откройте в браузере http://<адрес>:8588/bitrixsetup.php, где <адрес> — IP-адрес или домен вашего стенда.
- Выберите продукт 1С-Битрикс: Управление сайтом и редакцию Бизнес. В ней есть все модули, которые понадобятся в курсе.
- Дождитесь загрузки. Запустится мастер установки.
В мастере пройдите шаги по порядку:
- Примите лицензионное соглашение.
- На шаге регистрации заполните поля, чтобы получить пробную версию.
- Посмотрите результаты проверки системы. Красным выделены параметры, которые нужно исправить. В окружении env-docker их быть не должно.
-
Заполните параметры базы данных MySQL:
Поле Значение Сервер mysql — имя контейнера с базой данных Пользователь базы данных Существующий, логин root Пароль Значение MYSQL_ROOT_PASSWORD из файла .env_mysql База данных Новая, имя sitemanager Параметры администратора базы данных -> Логин root Параметры администратора базы данных -> Пароль Тот же пароль из .env_mysql В форме два пользователя. Под пользователем базы данных сайт будет постоянно подключаться к базе — его логин и пароль мастер запишет в настройки сайта. Под администратором базы данных мастер один раз создает базу. В MySQL окружения env-docker есть только пользователь root, поэтому в обоих блоках один логин и один пароль.
- Дождитесь, пока мастер создаст таблицы и скопирует файлы.
- Создайте учетную запись администратора. Логин и пароль понадобятся на протяжении всего курса.
- На шаге выбора решения откажитесь от готового решения. Курс строит сайт с нуля, и демоданные интернет-магазина или корпоративного сайта будут только мешать. Закройте мастер и удалите файл index.php из корня сайта. Это файл установщика: пока он есть, главная страница сайта снова открывает мастер установки.
После установки откройте http://<адрес>:8588/bitrix/admin/ и войдите под администратором. Если открылся административный раздел, продукт установлен.
Выбираем, как работать с файлами сайта
В окружении env-docker файлы сайта лежат не в папке на вашем компьютере, а в томе Docker внутри контейнера php. Поэтому редактор на компьютере их не видит. Работать с ними можно двумя способами. Выберите любой — на ход курса выбор не влияет.
Без дополнительных программ: редактор в административном разделе
В продукте есть встроенный файловый менеджер с редактором кода. Он работает в браузере и создает файлы от имени того же пользователя, что и сайт.
- Откройте Контент > Структура сайта > Файлы и папки.
- Перейдите в нужную папку. Новые папки и файлы создают кнопками на панели над списком.
- Чтобы изменить PHP-файл, откройте меню действий у файла и выберите Редактировать как PHP. Это действие доступно пользователям с правом редактировать PHP-код, у администратора оно есть.
Консольные команды запускайте внутри контейнера php, как при установке продукта:
docker compose exec --user=bitrix php sh
С расширением: VS Code и Dev Containers
Если вы привыкли к IDE, VS Code можно подключить прямо к контейнеру. Тогда файлы сайта открываются как обычная папка проекта, а встроенный терминал работает внутри контейнера.
- Установите в VS Code расширение Dev Containers от Microsoft.
- Откройте палитру команд и выполните Dev Containers: Attach to Running Container....
- Выберите контейнер с PHP. В окружении env-docker он называется dev_php.
- В новом окне откройте папку /opt/www.
При первом подключении VS Code скачивает и устанавливает в контейнер свой сервер. Это занимает несколько минут. Затем расширения для PHP, например для подсветки и автодополнения, ставятся уже внутри контейнера. VS Code работает в контейнере от имени пользователя bitrix, поэтому созданные файлы сайт сможет изменить.
Так же к контейнеру подключаются и другие IDE, например PhpStorm. Как их настроить, смотрите в документации IDE.
Команда docker cp создает файлы с владельцем root. Сайт работает от имени bitrix и не сможет их изменить, а исправить владельца из контейнера не получится: у root в этом окружении нет прав на файлы сайта. Создавайте файлы в редакторе административного раздела, в VS Code или в консоли контейнера под пользователем bitrix.
Разбираемся в структуре папок
Откройте корневую папку сайта. В контейнере php это /opt/www/. В корне сайта три главные папки. Две из них создает установка, а /local/ вы создаете сами:
| Папка | Что в ней | Кто меняет |
|---|---|---|
| /bitrix/ | Ядро, модули, системные компоненты и шаблоны, кеш, административный раздел | Система при установке и обновлениях |
| /upload/ | Файлы, которые загружают через продукт: картинки инфоблоков, файлы пользователей, уменьшенные копии изображений | Продукт через API |
| /local/ | Ваш код: компоненты, модули, шаблоны сайта, обработчики, настройки | Разработчик |
Публичные страницы сайта лежат в корне рядом с этими папками. Например, раздел /events/ — это папка /events/ с файлом index.php. Страницы мы начнем создавать в уроке 2.
Главное правило: свой код — в /local
Обновления продукта перезаписывают файлы в /bitrix/. Поэтому ядро не меняют, даже если нужная правка выглядит маленькой. Изменения в ядре теряются при первом обновлении, а сайт с измененным ядром лишается права на техническую поддержку.
Под запретом прежде всего:
- /bitrix/modules/ — модули продукта
- /bitrix/components/bitrix/ — системные компоненты
- /bitrix/js/ — JavaScript продукта
- /bitrix/routes/ — системные маршруты
Весь свой код кладите в /local/. Система не трогает эту папку при обновлениях. В ней повторяется часть структуры /bitrix/:
/local/
├── components/ // свои компоненты
├── modules/ // свои модули
├── templates/ // шаблоны сайта и шаблоны компонентов
├── php_interface/ // файл init.php и служебные файлы
└── routes/ // маршруты
Если файл с тем же путем есть и в /local/, и в /bitrix/, система берет версию из /local/. Так можно переопределить, например, шаблон компонента, не трогая системный. Копировать файлы ядра в /local/ целиком не стоит: дубли усложняют поддержку, и вы перестаете получать исправления из обновлений.
Если вы пришли на проект, где ядро уже правили, откройте Настройки > Инструменты > Монитор качества. Он покажет измененные файлы ядра, и их можно постепенно перенести в /local/.
Включаем показ ошибок
По умолчанию продукт не показывает подробности ошибок в браузере. Для рабочего сайта это правильно: стек вызовов и пути к файлам не должны видеть посетители. Но при разработке без этих подробностей не обойтись.
Настройки ядра хранятся в файле /bitrix/.settings.php. Это PHP-файл, который возвращает массив секций. Мастер установки уже создал его и записал в него, например, подключение к базе данных — секцию connections.
Перед правкой сохраните копию файла: ошибка в синтаксисе .settings.php останавливает весь сайт.
За ошибки отвечает секция exception_handling. Найдите ее и установите параметр debug в true:
'exception_handling' => [
'value' => [
'debug' => true,
// остальные параметры секции не меняйте
],
'readonly' => false,
],
Параметр readonly у каждой секции запрещает или разрешает менять ее из кода во время работы. Для connections он равен true: параметры базы данных нельзя подменить на лету.
Перед переносом на рабочий сервер верните 'debug' => false. Чтобы ошибки при этом не терялись, настройте запись в лог — это секция log внутри exception_handling. Подробнее в статье Конфигурация ядра.
Проверяем результат
Стенд готов к курсу, если административный раздел открывается под администратором, а в корне сайта есть папка /local/.
Продукт сам проверяет окружение. Откройте Настройки > Инструменты > Проверка системы и запустите полное тестирование. Зеленым отмечены параметры, которые соответствуют требованиям, красным — те, что нужно исправить. На свежем стенде часть тестов может быть красной:
- Отправка почты — почта в окружении не настроена. Как подключить почтовый сервер, описано в README env-docker
- Работа с сокетами — сайт открыт через localhost. Откройте его по IP-адресу или домену и повторите проверку
- Структура базы данных — на свежей установке тест может найти расхождения структуры таблиц и показать ссылку Исправить. Нажмите ее: продукт исправит то, что можно исправить автоматически. Оставшиеся расхождения прохождению курса не мешают
Остальные обязательные параметры должны быть зелеными. Рекомендуемые параметры влияют на отдельные возможности продукта, но сайт работает и без них. Замечание у теста Выполнение агентов на cron на стенде тоже не мешает: агенты выполняются при открытии страниц, подробнее — в уроке 13.
Если что-то пошло не так, сверьтесь с таблицей:
| Что пошло не так | Почему | Что сделать |
|---|---|---|
| Контейнеры не запускаются | Не заданы пароли в .env_* или заняты порты | Проверьте файлы .env_mysql, .env_postgresql, .env_push и вывод docker compose logs |
| В проверке системы красная Работа с сокетами | Сайт открыт через localhost: тест обращается к этому адресу из контейнера, а там он недоступен | Откройте сайт по IP-адресу компьютера или локальному домену на порту 8588 и повторите проверку |
| Мастер не подключается к базе | Указан неверный сервер или пароль | Укажите сервер mysql, пользователя root и пароль из .env_mysql |
| Access denied for user 'bitrix' при создании базы | В блоке Параметры администратора базы данных остался логин bitrix, а в MySQL окружении есть только root | Укажите логин root и пароль из .env_mysql в обоих блоках |
| Сайт не может изменить файл, «Permission denied» | Файл скопирован через docker cp или создан под root | Удалите файл под пользователем bitrix и создайте заново в редакторе административного раздела, в VS Code или в консоли docker compose exec --user=bitrix php sh |
| VS Code долго подключается к контейнеру | При первом подключении скачивается сервер VS Code, это несколько сотен мегабайт | Дождитесь окончания загрузки. Следующие подключения проходят быстро |
| После правки .settings.php сайт не открывается | Синтаксическая ошибка в массиве настроек | Восстановите файл из копии и внесите правку заново |
Если нужно больше информации
- Установка окружения — все варианты окружения, включая виртуальную машину BitrixVM
- Установка дистрибутива — шаги мастера и быстрая установка через .settings.php
- Структура директорий — полный список системных папок и файлов
- Как правильно и безопасно кастомизировать коробочные продукты — правила кастомизации и инструменты
- Конфигурация ядра — все секции .settings.php
Теперь у вас есть рабочий стенд и понятное правило: ядро в /bitrix/ не трогаем, свой код пишем в /local/.
В следующем уроке разберемся, что происходит, когда продукт получает запрос: какой код выполняется до вашей страницы и после нее, и как получить данные запроса в коде.
А пока закрепите результат: ответьте на вопросы и выполните практику.
Подготовьте стенд к работе над проектом: проверьте установку, создайте папки для своего кода и включите показ ошибок.
- Административный раздел открывается
- В проверке системы красными могут быть только тесты почты, структуры базы данных и работы с сокетами
- В /local/ есть четыре папки
- На странице error-test.php был текст ошибки с указанием файла и строки — значит, показ ошибок работает
- Если стенд еще не развернут, разверните окружение и установите продукт по шагам урока.
- Войдите в административный раздел под администратором.
- Запустите проверку системы и убедитесь, что обязательные параметры зеленые. Красными могут быть тесты почты, структуры базы данных и, если сайт открыт через localhost, тест работы с сокетами.
- Выберите способ работы с файлами: редактор административного раздела или VS Code с Dev Containers. Создайте папку /local/ в корне сайта и в ней папки components, modules, templates и php_interface.
- Сохраните копию /bitrix/.settings.php и включите 'debug' => true.
- Создайте в корне сайта файл error-test.php с ошибкой — вызовом несуществующей функции. Подключение header.php подробно разберем в уроке 2.
<?php require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/header.php'; undefined_function(); require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/footer.php'; - Откройте http://<адрес>:8588/error-test.php.
- Удалите error-test.php.