# Docker-окружение для Bitrix (env-docker) Этот проект предназначен для быстрого развертывания локального окружения для разработки на Битрикс с использованием Docker. В основе лежит репозиторий https://github.com/bitrix-tools/env-docker ## Директории - [mysql](data/mysql) — файлы баз данных MySQL. Эта папка привязана к контейнеру через bind mount, поэтому данные сохраняются даже после удаления контейнеров. - [www](data/www) — файлы проектов (скрипты Битрикс). Это основной рабочий каталог для разработки. ## Навигация * [Инициализация проекта](#инициализация-проекта) * [Настройка среды разработки](#настройка-среды-разработки) * [Настройка доступа к сайту](#настройка-доступа-к-сайту) * [Настройка Xdebug](#настройка-xdebug) * [Docker](#docker) * [Управление контейнерами (Docker Compose)](#управление-контейнерами) ## Инициализация проекта 1. Создайте директорию для вашего проекта и перейдите в неё. 2. Склонируйте репозиторий в текущую директорию (обратите внимание на точку в конце команды): ```bash git clone git@gitlab.vniigaz.local:internal-automation/isup/bitrix-docker.git . ``` 3. Склонируйте подмодули проекта Выполните в корне проекта: ```bash git submodule update --init --recursive ``` 4. В [www](data/www) Необходимо добавить исключенные из репозитория, проекта ИСУП, папки: - `/bitrix` - `/upload` Взять их можно из полной копии проекта (склеить и распаковать полный архив) ```bash # Склеить архив и сразу распаковать (для не сжатых архивов): cat *$(ls -v *tar.*) | tar xf - # Склеить архив и распаковать (для сжатых архивов): cat *$(ls -v *tar.gz*) | tar xzf - ``` Далее перенести необходимые директории 5. Импортируем БД > Импорт БД должен происходить после запуска контейнеров. При создании полной копии проекта, средствами резервного копирования Битрикс и после переноса папки `bitrix` в [www](data/www) в `/bitrix/backup` будет находиться копия БД (2 файла). Необходимо скопировать SQL-файлы в контейнер mysql: ```bash # Создаем папку, которая не является 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. ```bash docker exec -it dev_mysql bash ``` Внутри контейнера выполните: ```bash mysql -u root -p ``` Введите пароль root, пароль указан в файле `.env_sql` Создайте базу данных (если её нет). В командной строке MySQL выполните: ```bash # укажите любое имя БД, например b24local CREATE DATABASE IF NOT EXISTS b24local; # переключаемся на созданную БД, проверяем что выбор работает USE b24local; # Выходим из консоли mysql exit; ``` **Загрузите дамп.** Не выходя из контейнера, выполните команду загрузки. ```bash # укажите имя БД и имя загруженной копии БД mysql -u root -p имя_вашей_базы < /tmp/{имя файла копии}.sql # укажите имя БД и имя загруженной копии after_connect.sql mysql -u root -p имя_вашей_базы < /tmp/{имя файла копии}.sql ``` Система снова запросит пароль root ## Настройка среды разработки Настройки вносятся **до первого запуска контейнеров** 1. Скопируйте файлы ```bash 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 ``` 2. Заполните их значениями для вашей среды разработки: **Пароль к базам данных MySQL** Пароль для суперпользователя `root` задается в файле `.env_sql`: ```dotenv MYSQL_ROOT_PASSWORD="..." ``` **Секретный ключ для Push-сервера** Ключ используется для подписи соединений между клиентом и Push-сервером. Он задается в файле `.env_push`, можно использовать уже установленное значение ```dotenv PUSH_SECURITY_KEY=... ``` **Часовой пояс (timezone)** > Часовой пояс для контейнеров задается в двух местах 1. Файл `.env`. (основная настройка для большинства сервисов). Значение задано как: ```dotenv TZ=Europe/Moscow ``` 2. Файл `confs/php84/etc/php/conf.d/timezone.ini` (настройка для PHP): ```ini 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`. Это свяжет доменное имя с локальным компьютером. ```bash sudo nano /etc/hosts ``` Добавьте строку: ```text 127.0.0.1 b24.vniigaz.gazprom.local ``` 2. **(Опционально)** Создайте тестовый файл. Для проверки работы создайте в директории [data/www](data/www) файл `index.php` с содержимым: ```php 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 ``` Сохраните файл. 3. Загрузите новое правило. Эта команда включает PF с вашим правилом. ```bash 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` ```bash apachectl -t -D DUMP_INCLUDES ``` **2. Создайте конфигурационный файл для виртуального хоста.** Создайте файл, например: `sudo nano /{путь к конфигу}/users/httpd-bitrix-vhost.conf` (путь может отличаться в зависимости от вашей системы) Вставьте в него следующее содержимое: ```apacheconf 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" ``` **3. Включите модули прокси в Apache.** Откройте основной файл `httpd.conf` `/{путь к конфигу}/httpd.conf` (путь к которому вы узнали в шаге 1.). Найдите и раскомментируйте (уберите символ `#` в начале) следующие строки, чтобы включить модули прокси:: ```apacheconf LoadModule proxy_module libexec/apache2/mod_proxy.so LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so ``` Сохраните файл. **3. Подключите созданный виртуальный хост.** В конец того же файла `httpd.conf` добавьте строку для подключения вашего конфига: ```apacheconf # подключаем все кастомные конфиги Include /{путь к конфигу}/users/* # или подключаем один файл точечно Include /{путь к конфигу}/users/httpd-bitrix-vhost.conf ``` Убедитесь, что путь указан верно. **4. Перезапустите Apache.** ```apacheconf sudo apachectl restart ``` Теперь сайт должен быть доступен по адресу http://b24.vniigaz.gazprom.local. ## Настройка Xdebug ### Настраиваем PhpStorm #### 1. Настройка PHP Interpreter 1. `Settings` → `PHP` → `CLI Interpreter` → `+` → `From Docker, Vagrant, WSL...` 2. Выберите `Docker Compose` 3. Укажите путь к `docker-compose.yml` и сервис `php` 4. `PhpStorm` подключится к контейнеру и проиндексирует файлы #### 2. Настройка Path Mappings 1. `Settings` → `PHP` → `Servers` 2. Добавьте сервер: * Name: bitrix-docker * Host: localhost (или ваш домен, например dev.bx) * Port: 8588 * Debugger: Xdebug 3. Внизу в Path mappings укажите: ```text Local: /путь/к/data/www → Remote: /opt/www/ ``` #### 3. Настройка Debug 1. `Settings` → `PHP` → `Debug`: * Debug port: 9003 * Can accept external connections 2. `Settings` → `PHP` → `Debug` → `Xdebug`: * Filter debug connection by IDE key * IDE key: `PHPSTORM` #### 4. Создайте конфигурацию запуска 1. `Run` → `Edit Configurations` → `+` → `PHP Remote Debug` 2. Настройки: * Name: `Bitrix Docker Debug` * Server: выберите созданный сервер `bitrix-docker` * IDE key: `PHPSTORM` 3. Примените и закройте В PhpStorm включите "Start Listening for PHP Debug Connections" (иконка 🐞 в панели) Поставьте брейкпоинт в коде и откройте страницу — отладка должна сработать! ## Docker Для удобного управления контейнерами в графическом интерфейсе рекомендуется использовать `Docker Desktop`. Он доступен для Windows, Linux и macOS. Документация по установке: - `Docker Desktop on Windows`: https://docs.docker.com/desktop/setup/install/windows-install/ - `Docker Desktop on Linux`: https://docs.docker.com/desktop/setup/install/linux/ - `Docker Desktop on Mac`: https://docs.docker.com/desktop/setup/install/mac-install/ ## Управление контейнерами Для оркестрации контейнеров используется `Docker Compose`. Все команды выполняются из корневой директории проекта. Основная команда для пересборки и перезапуска: ```bash docker compose down && docker compose up -d ```
Полезные команды Docker * **Запустить все контейнеры и оставить их работать в фоне:** ```bash docker compose up -d ``` * **Отобразить список контейнеров и их статус:** ```bash docker compose ps ``` * **Показать логи сразу всех контейнеров:** ```bash docker compose logs ``` * **Показать лог определенного сервиса-контейнера:** ```bash docker compose logs redis ``` * **Перезапустить определенный контейнер:** ```bash docker compose restart nginx ``` * **Перезапустить все контейнеры:** ```bash docker compose restart ``` * **Остановить все контейнеры:** ```bash docker compose stop ``` * **Остановить все контейнеры, удалить их:** ```bash docker compose down ``` * **Остановить все контейнеры, удалить их и удалить все тома этих контейнеров:** ```bash docker compose down -v ``` * **Зайти в sh-консоль определенного контейнера, например nginx:** ```bash docker compose exec nginx sh ```