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

363 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
<?php
phpinfo();
```
### Способ 1: Перенаправление портов через PF (Packet Filter)
Этот способ использует встроенный в macOS файервол для перенаправления трафика.
1. Создайте файл конфигурации для PF:
```bash
sudo nano /etc/pf.anchors/bitrix-dev
```
2. Вставьте следующее правило. Оно перенаправит входящие запросы на 80-й порт на порт 8588 Docker-контейнера:
```bash
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
```
Сохраните файл.
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
<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.).
Найдите и раскомментируйте (уберите символ `#` в начале) следующие строки, чтобы включить модули прокси::
```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
```
<details><summary>Полезные команды Docker</summary>
* **Запустить все контейнеры и оставить их работать в фоне:**
```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
```
</details>