init
This commit is contained in:
@@ -0,0 +1,362 @@
|
||||
# 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>
|
||||
Reference in New Issue
Block a user