Files
B24-docker/README.md
T
2026-05-20 15:23:05 +03:00

16 KiB
Raw Blame History

Docker-окружение для Bitrix (env-docker)

Этот проект предназначен для быстрого развертывания локального окружения для разработки на Битрикс с использованием Docker. В основе лежит репозиторий https://github.com/bitrix-tools/env-docker

Директории

  • mysql — файлы баз данных MySQL. Эта папка привязана к контейнеру через bind mount, поэтому данные сохраняются даже после удаления контейнеров.
  • www — файлы проектов (скрипты Битрикс). Это основной рабочий каталог для разработки.

Навигация

Инициализация проекта

  1. Создайте директорию для вашего проекта и перейдите в неё.

  2. Склонируйте репозиторий в текущую директорию (обратите внимание на точку в конце команды):

git clone git@gitlab.vniigaz.local:internal-automation/isup/bitrix-docker.git .
  1. Склонируйте подмодули проекта Выполните в корне проекта:
git submodule update --init --recursive
  1. В www Необходимо добавить исключенные из репозитория, проекта ИСУП, папки:
  • /bitrix
  • /upload

Взять их можно из полной копии проекта (склеить и распаковать полный архив)

# Склеить архив и сразу распаковать (для не сжатых архивов):
cat *$(ls -v  *tar.*) | tar xf -

# Склеить архив и распаковать (для сжатых архивов):
cat *$(ls -v  *tar.gz*) | tar xzf -

Далее перенести необходимые директории

  1. Импортируем БД

Импорт БД должен происходить после запуска контейнеров.

При создании полной копии проекта, средствами резервного копирования Битрикс и после переноса папки bitrix в www в /bitrix/backup будет находиться копия БД (2 файла).

Необходимо скопировать SQL-файлы в контейнер mysql:

# Создаем папку, которая не является tmpfs
docker exec dev_mysql mkdir /import
# основная БД, например b24pal.local_20260304_231417_full_2dk2oay35dm6fu8r.sql
# Формат: docker cp /путь/к/файлу.sql <имя_контейнера>:/import/файл.sql
docker cp ./data/www/bitrix/backup/{имя файла}.sql dev_mysql:/import/{имя файла}.sql

# БД after_connect, например b24pal.local_20260304_231417_full_2dk2oay35dm6fu8r_after_connect.sql
docker cp ./data/www/bitrix/backup/{имя файла}_after_connect.sql dev_mysql:/import/{имя файла}_after_connect.sql

Зайдите в контейнер и подключитесь к MySQL.

docker exec -it dev_mysql bash

Внутри контейнера выполните:

mysql -u root -p

Введите пароль root, пароль указан в файле .env_sql

Создайте базу данных (если её нет). В командной строке MySQL выполните:

# укажите любое имя БД, например b24local
CREATE DATABASE IF NOT EXISTS b24local;
# переключаемся на созданную БД, проверяем что выбор работает
USE b24local;
# Выходим из консоли mysql 
exit;

Загрузите дамп. Не выходя из контейнера, выполните команду загрузки.

# укажите имя БД и имя загруженной копии БД
mysql -u root -p имя_вашей_базы < /tmp/{имя файла копии}.sql
# укажите имя БД и имя загруженной копии after_connect.sql
mysql -u root -p имя_вашей_базы < /tmp/{имя файла копии}.sql

Система снова запросит пароль root

Настройка среды разработки

Настройки вносятся до первого запуска контейнеров

  1. Скопируйте файлы
cp .env.example .env
cp .env_sql.example .env_sql
cp .env_push.example .env_push
cp confs/php84/etc/php/conf.d/timezone.ini.example confs/php84/etc/php/conf.d/timezone.ini
  1. Заполните их значениями для вашей среды разработки:

Пароль к базам данных MySQL

Пароль для суперпользователя root задается в файле .env_sql:

MYSQL_ROOT_PASSWORD="..."

Секретный ключ для Push-сервера

Ключ используется для подписи соединений между клиентом и Push-сервером. Он задается в файле .env_push, можно использовать уже установленное значение

PUSH_SECURITY_KEY=...

Часовой пояс (timezone)

Часовой пояс для контейнеров задается в двух местах

  1. Файл .env. (основная настройка для большинства сервисов). Значение задано как:
TZ=Europe/Moscow
  1. Файл confs/php84/etc/php/conf.d/timezone.ini (настройка для PHP):
date.timezone = Europe/Moscow

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

Настройка доступа к сайту

Для macOS. По умолчанию сайт использует порты 8588 (HTTP) и 8589 (HTTPS). Эти настройки указаны в файле docker-compose.yml.

Если порты заняты, можно указать другие в docker-compose.yml.

Для доступа к сайту по удобному адресу (например, http://b24.vniigaz.gazprom.local) без указания порта, нужно перенаправить трафик с 80-го порта на порт 8588.

Ниже описаны два способа для macOS.

Так как на macOS системный 80 порт часто занят или защищен, можно:

  • использовать PF (Packet Filter) — встроенный в macOS фаервол, который перенаправит трафик.
  • настроить прокси для локального Apache (рекомендованный способ)

Предварительная настройка (общая для обоих способов)

Как открывать сайт:

  1. через 127.0.0.1:8588
  2. b24.vniigaz.gazprom.local:8588
  3. b24.vniigaz.gazprom.local - без порта — см. ниже
  1. Добавьте запись в файл /etc/hosts. Это свяжет доменное имя с локальным компьютером.
sudo nano /etc/hosts

Добавьте строку:

127.0.0.1 b24.vniigaz.gazprom.local
  1. (Опционально) Создайте тестовый файл. Для проверки работы создайте в директории data/www файл index.php с содержимым:
<?php
phpinfo(); 

Способ 1: Перенаправление портов через PF (Packet Filter)

Этот способ использует встроенный в macOS файервол для перенаправления трафика.

  1. Создайте файл конфигурации для PF:
sudo nano /etc/pf.anchors/bitrix-dev
  1. Вставьте следующее правило. Оно перенаправит входящие запросы на 80-й порт на порт 8588 Docker-контейнера:
rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8588
# Для HTTPS (порт 443) раскомментируйте следующую строку, если настроите SSL:
#rdr pass on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 8589

Сохраните файл.

  1. Загрузите новое правило. Эта команда включает PF с вашим правилом.
sudo pfctl -ef /etc/pf.conf
sudo pfctl -f /etc/pf.anchors/bitrix-dev

После этого сайт должен открываться по адресу http://b24.vniigaz.gazprom.local.

Способ 2: Проксирование через локальный Apache - рекомендуется

Этот способ подойдет, если у вас уже запущен встроенный веб-сервер Apache и вы не хотите отключать его.

1. Найдите конфигурацию Apache Эта команда показывает полную конфигурацию, которую видит Apache, и в самом верху вывода будет путь к основному файлу httpd.conf

apachectl -t -D DUMP_INCLUDES

2. Создайте конфигурационный файл для виртуального хоста. Создайте файл, например: sudo nano /{путь к конфигу}/users/httpd-bitrix-vhost.conf (путь может отличаться в зависимости от вашей системы) Вставьте в него следующее содержимое:

<VirtualHost *:80>
    ServerName b24.vniigaz.gazprom.local

    # Включаем проксирование
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8588/
    ProxyPassReverse / http://127.0.0.1:8588/
    
    # Логи (опционально), они локальные
    ErrorLog "/var/log/apache2/b24-error_log"
</VirtualHost>

3. Включите модули прокси в Apache.

Откройте основной файл httpd.conf /{путь к конфигу}/httpd.conf (путь к которому вы узнали в шаге 1.). Найдите и раскомментируйте (уберите символ # в начале) следующие строки, чтобы включить модули прокси::

LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so

Сохраните файл.

3. Подключите созданный виртуальный хост. В конец того же файла httpd.conf добавьте строку для подключения вашего конфига:

# подключаем все кастомные конфиги
Include /{путь к конфигу}/users/*
# или подключаем один файл точечно
Include /{путь к конфигу}/users/httpd-bitrix-vhost.conf

Убедитесь, что путь указан верно.

4. Перезапустите Apache.

sudo apachectl restart

Теперь сайт должен быть доступен по адресу http://b24.vniigaz.gazprom.local.

Настройка Xdebug

Настраиваем PhpStorm

1. Настройка PHP Interpreter

  1. SettingsPHPCLI Interpreter+From Docker, Vagrant, WSL...
  2. Выберите Docker Compose
  3. Укажите путь к docker-compose.yml и сервис php
  4. PhpStorm подключится к контейнеру и проиндексирует файлы

2. Настройка Path Mappings

  1. SettingsPHPServers
  2. Добавьте сервер:
  • Name: bitrix-docker
  • Host: localhost (или ваш домен, например dev.bx)
  • Port: 8588
  • Debugger: Xdebug
  1. Внизу в Path mappings укажите:
Local: /путь/к/data/www  →  Remote: /opt/www/

3. Настройка Debug

  1. SettingsPHPDebug:
  • Debug port: 9003
  • Can accept external connections
  1. SettingsPHPDebugXdebug:
  • Filter debug connection by IDE key
  • IDE key: PHPSTORM

4. Создайте конфигурацию запуска

  1. RunEdit Configurations+PHP Remote Debug
  2. Настройки:
  • Name: Bitrix Docker Debug
  • Server: выберите созданный сервер bitrix-docker
  • IDE key: PHPSTORM
  1. Примените и закройте

В PhpStorm включите "Start Listening for PHP Debug Connections" (иконка 🐞 в панели)

Поставьте брейкпоинт в коде и откройте страницу — отладка должна сработать!

Docker

Для удобного управления контейнерами в графическом интерфейсе рекомендуется использовать Docker Desktop. Он доступен для Windows, Linux и macOS.

Документация по установке:

Управление контейнерами

Для оркестрации контейнеров используется Docker Compose. Все команды выполняются из корневой директории проекта.

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

docker compose down && docker compose up -d
Полезные команды Docker
  • Запустить все контейнеры и оставить их работать в фоне:
docker compose up -d
  • Отобразить список контейнеров и их статус:
docker compose ps
  • Показать логи сразу всех контейнеров:
docker compose logs
  • Показать лог определенного сервиса-контейнера:
docker compose logs redis
  • Перезапустить определенный контейнер:
docker compose restart nginx
  • Перезапустить все контейнеры:
docker compose restart
  • Остановить все контейнеры:
docker compose stop
  • Остановить все контейнеры, удалить их:
docker compose down
  • Остановить все контейнеры, удалить их и удалить все тома этих контейнеров:
docker compose down -v
  • Зайти в sh-консоль определенного контейнера, например nginx:
docker compose exec nginx sh