An open API service indexing awesome lists of open source software.

https://github.com/bitrix-tools/env-docker

Контейнеры для Битрикс
https://github.com/bitrix-tools/env-docker

Last synced: 12 months ago
JSON representation

Контейнеры для Битрикс

Awesome Lists containing this project

README

          

# Контейнерное окружение для Битрикс

Проект представляет собой dev сайт, он же девелоперский сайт, предназначенный для тестирования, разработки, примера использования окружения на базе технологий [Docker](https://www.docker.com/). Проект поддерживается и развивается командой внутри компании 1С-Битрикс.

Программы, необходимые для работы технологий Битрикс, запускаются в контейнерах (`Docker Containers`). По шаблону из образов (`Docker Images`). Данные хранятся в томах (`Docker Volumes`). Связаны между собой посредством сети (`Docker Network`). И управляются (оркестрируются) используя compose (`Docker Compose`).

> [!CAUTION]
> Внимание! Девелоперский сайт не рекомендуется для использования в "боевом" режиме (он же "продакшен"). Однако, это не запрещено.
>
> Стоит учесть, что такая эксплуатация требует дополнительных настроек безопасности контейнерного окружения, хоста и самого сайта.

# Содержимое

* [Docker и Docker Compose](#docker)
* [Пароли к базам данных MySQL и PostgreSQL](#databasespasswords)
* [Секретный ключ для Push-сервера](#pushserversecretkey)
* [Часовой пояс (timezone)](#timezone)
* [Управление](#management)
* [Адресация](#iporurls)
* [Порты](#ports)
* [Доступ к сайту](#siteaccess)
* [Базовая проверка конфигурации окружения](#bitrixservertestphp)
* [BitrixSetup / Restore](#bitrixsetupphprestorephp)
* [Установка дистрибутивов](#installdistro)
* [Восстановление из резервной копии](#restorebackup)
* [Лицензия, обновления платформы и решений](#licenceandupdates)
* [Настройки модулей](#modulessettings)
* [Проверка системы](#sitechecker)
* [Тест производительности](#perfmonpanel)
* [Cron](#cron)
* [Выполнение агентов на cron](#agentsoncron)
* [Кастомные cron задания](#owncrontasks)
* [Хранение временных файлов вне корневой директории сайта](#bxtemporaryfilesdirectory)
* [Push & pull](#pushpull)
* [Push-сервер](#pushserver)
* [Sphinx](#sphinx)
* [Поиск с помощью Sphinx](#sphinxsearch)
* [Почта](#email)
* [Отправка почты с помощью msmtp](#msmtpmta)
* [Отправка почты через SMTP-сервера отправителя](#emailsmtpmailer)
* [Логирование отправки почты в файл](#emaildebuglog)
* [PHP](#php)
* [Composer](#phpcomposer)
* [Browser Capabilities](#phpbrowsercapabilities)
* [GeoIP2](#phpgeoip2)
* [Расширения (extensions)](#phpextensions)
* [Imagick Engine для изображений](#phpimagickimageengine)
* [security: Веб-антивирус](#phpsecurityantivirus)
* [Роутинг](#phprouting)
* [Включение роутинга до запуска сайта](#phproutingbeforestart)
* [Включение или отключение роутинга для запущенного сайта](#phproutingafterstart)
* [Nginx](#nginx)
* [Модули для Nginx](#nginxmodules)
* [Подключение или отключение модуля для Nginx](#nginxmoduleonoroff)
* [Memcache и Redis](#memcacheandredis)
* [Memcache](#memcache)
* [Redis](#redis)
* [Кеширование](#cachestorage)
* [Хранение сессий](#sessionstorage)
* [Кеширование с помощью модуля Веб-кластер](#clustercachestorage)
* [Memcache](#clustercachememcache)
* [Redis](#clustercacheredis)
* [HTTPS/SSL/TLS/WSS](#httpsssltlswss)
* [Самоподписанный сертификат](#selfsignedcerts)
* [Выпуск сертификатов](#selfsigneddeploys)
* [Доверие к сертификатам центров сертификации для PHP и Nginx](#selfsignedtrustforphpandnginx)
* [Установка сертификатов](#installselfsignedcerts)
* [Импорт сертификатов в ОС или браузер](#importselfsignedcertstoosorbrowser)
* [Удаление сертификатов из ОС или браузера](#removeselfsignedcertsfromosorbrowser)
* [Бесплатный Lets Encrypt сертификат](#presentcerts)
* [Lego](#lego)
* [Перенаправление или перенос домена](#domaintransfer)
* [Челленджи](#letsencryptchallenges)
* [HTTP челлендж (http-01)](#letsencrypthttpchallenge)
* [DNS челлендж (dns-01)](#letsencryptdnschallenge)
* [Команды lego](#legocommands)
* [Команда для HTTP челленджа (http-01)](#legocommandhttpchallenge)
* [Команда для DNS челленджа (dns-01)](#legocommanddnschallenge)
* [Выпуск сертификатов](#legodeploys)
* [HTTP челлендж (http-01) для одного домена (singledomain SSL-сертификат)](#httpchallengesingledomain)
* [HTTP челлендж (http-01) для множества поддоменов домена (multidomain SSL-сертификат)](#httpchallengemultidomain)
* [DNS челлендж (dns-01) для одного домена (singledomain SSL-сертификат)](#dnschallengesingledomain)
* [DNS челлендж (dns-01) для множества поддоменов домена (multidomain SSL-сертификат)](#dnschallengemultidomain)
* [DNS челлендж (dns-01) на все множество поддоменных имен домена (wildcard SSL-сертификат)](#dnschallengewildcard)
* [Установка сертификатов](#installpresentcerts)
* [Консоль сервисов](#servicesconsole)
* [Контейнер](#containerconsole)
* [MySQL](#mysqlconsole)
* [PostgreSQL](#postgresqlconsole)
* [Memcache](#memcacheconsole)
* [Redis](#redisconsole)
* [Кастомизация](#customization)
* [Версии ПО](#softwareversions)
* [Текущие версии](#currentversions)
* [Альтернативные версии](#alternativeversions)
* [Redis](#redisalternativeversions)
* [PostgreSQL](#postgresqlalternativeversions)
* [MySQL](#mysqlalternativeversions)
* [PHP и Cron](#phpandcronalternativeversions)
* [Сборка или скачивание Docker образов](#dockerimages)
* [Базовые образы](#basicimages)
* [Битрикс образы](#bitriximages)
* [Модули для Nginx](#nginxmodulesimage)


# Docker и Docker Compose

Для запуска проекта понадобится `Docker`. Для оркестровки и управления `Docker Compose`.

Способ развертывания зависит от вашей операционной системы, используемой на хосте.

Возможны варианты:
- рабочая станция, персональный компьютер, ноутбук и т.д. с рабочим столом и графической средой, он же desktop
- сервер, без графической среды, но с консолью или удаленным доступом, он же server

Для взаимодействия с `Docker` в графическом режиме будем использовать продукт [Docker Desktop](https://docs.docker.com/desktop/), который возможно запустить на ОС `Windows`, `Linux`, `MacOS`.

Ознакомьтесь с документацией и разверните `Docker` в зависимости от используемой вами ОС:
- `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` в режиме командной строки (без графической среды) будем использовать продукт [Docker Engine](https://docs.docker.com/engine/), который возможно запустить на ОС `Linux`.

Ознакомьтесь с документацией и разверните `Docker Engine` в зависимости от используемой вами ОС `Linux`:
- `Docker Engine`: https://docs.docker.com/engine/install/

В современных версиях продуктов `Docker` обычно в их состав уже включен `Docker Compose`.

Ознакомьтесь с документацией и разверните `Docker Compose`, если это требуется отдельно:
- `Docker Compose`: https://docs.docker.com/compose/


# Пароли к базам данных MySQL и PostgreSQL

> [!CAUTION]
> Внимание! Перед первым запуском обязательно придумайте или сгенерируйте ваши уникальные пароли суперпользователей баз данных `MySQL` и `PostgreSQL`.

Для этого используем образ `Alpine Linux`:
```bash
docker pull alpine:3.21
```

Генерируем уникальный пароль для суперпользователя `root` базы данных `MySQL` с помощью команды:
```bash
docker container run --rm --name mysql_password_generate alpine:3.21 sh -c "(cat /dev/urandom | tr -dc A-Za-z0-9\?\!\@\-\_\+\%\(\)\{\}\[\]\= | head -c 16) | tr -d '\' | tr -d '^' && echo ''"
```

Генерируем уникальный пароль для суперпользователя `postgres` базы данных `PostgreSQL` с помощью команды:
```bash
docker container run --rm --name postgresql_password_generate alpine:3.21 sh -c "(cat /dev/urandom | tr -dc A-Za-z0-9\?\!\@\-\_\+\%\(\)\{\}\[\]\= | head -c 16) | tr -d '\' | tr -d '^' && echo ''"
```

Шаблон пароля для суперпользователя `root` базы данных `MySQL` (`CHANGE_MYSQL_ROOT_PASSWORD_HERE`) и шаблон пароля для суперпользователя `postgres` базы данных `PostgreSQL` (`CHANGE_POSTGRESQL_POSTGRES_PASSWORD_HERE`) хранятся в файле `.env_sql` в виде:
```bash
MYSQL_ROOT_PASSWORD="CHANGE_MYSQL_ROOT_PASSWORD_HERE"
POSTGRES_PASSWORD="CHANGE_POSTGRESQL_POSTGRES_PASSWORD_HERE"
```

Обязательно измените значения в файле `.env_sql`, заменив шаблоны `CHANGE_MYSQL_ROOT_PASSWORD_HERE` и `CHANGE_POSTGRESQL_POSTGRES_PASSWORD_HERE` на ваши значения.


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

> [!CAUTION]
> Внимание! Перед первым запуском обязательно придумайте или сгенерируйте ваш уникальный секретный ключ для Push-сервера.

Для этого используем образ `Alpine Linux`:
```bash
docker pull alpine:3.21
```

Генерируем уникальный секретный ключ с помощью команды:
```bash
docker container run --rm --name push_server_key_generate alpine:3.21 sh -c "(cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 128) && echo ''"
```

Шаблон секретного ключа (`CHANGE_SECURITY_KEY_HERE`) для подписи соединения между клиентом и Push-сервером хранится в файле `.env_push` в виде:
```bash
PUSH_SECURITY_KEY=CHANGE_SECURITY_KEY_HERE
```
Обязательно измените значение вашего уникального секретного ключа в файле `.env_push`, заменив шаблон `CHANGE_SECURITY_KEY_HERE` на ваше значение.


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

Значение часового пояса (timezone), используемой контейнерами, хранится в файле `.env`.

Значение по умолчанию задано как:
```bash
TZ=Europe/Moscow
```

Исключение составляет контейнер с `php`, значение часового пояса (timezone) которого продублировано в отдельном файле `confs/phpXXX/etc/php/conf.d/timezone.ini` как:
```bash
date.timezone = Europe/Moscow
```

Где `XXX` в пути к файлу `timezone.ini` - версия `php`. По умолчанию равна `82`, возможные [альтернативные варианты](#phpandcronalternativeversions) `83` и `84`.

При необходимости смените значение в обоих файлах до создания и запуска контейнеров проекта. Например, для версии php `8.2.x` и часового пояса `Europe/Kaliningrad` измените значение:

- в файле `.env`:
```bash
TZ=Europe/Kaliningrad
```

- в файле `confs/php82/etc/php/conf.d/timezone.ini`:
```bash
date.timezone = Europe/Kaliningrad
```


# Управление

Управление (или оркестровка) набором контейнеров или одним из контейнеров осуществляется через `Docker Compose`.

Переходим в каталог проекта `cd env-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
```

Подробней можно прочитать в документации docker compose: https://docs.docker.com/reference/cli/docker/compose/


# Адресация

Обращение к запущенному сайту может быть:
1) через `localhost` или `127.0.0.1`
2) по IP вашей локальной сети вида `10.X.X.X`, `192.X.X.X`, `172.X.X.X` и т.д.
3) по имени локального домена в вашей локальной сети вида `dev.bx`
4) по IP глобальной сети интернет вида `85.86.87.88`
5) по имени настоящего домена вида `devexample.com`

Выбор зависит от вашей конфигурации.

Учтите, что при использовании `https` нужен SSL-сертификат, который можно сгенерировать или получить на доменное имя, но не на IP адрес.


# Порты

Запущенный сайт для своей работы по умолчанию использует порты:
- `8588` для http
- `8589` для https

В случае, если вы используете фаервол, необходимо открыть порты. Пример команд для разных ОС:

- Debian/Ubuntu и т.д.:
```bash
ufw allow 8588 && ufw allow 8589
```

- RHEL/CentOS/AlmaLinux/RockyLinux/OracleLinux/ArchLinux и т.д.:
```bash
firewall-cmd --add-port=8588/tcp --permanent && firewall-cmd --add-port=8589/tcp --permanent && firewall-cmd --reload
```

Для других ОС смотрите документацию по работе с фаерволом.


# Доступ к сайту

Итак, согласно разделам [Адресация](#iporurls) и [Порты](#ports) выше, к сайту можно обратиться по `http` или `https` следующим образом:

- через localhost:
- http://127.0.0.1:8588/
- https://127.0.0.1:8589/

- по локальному IP адресу:
- http://10.0.1.119:8588/
- https://10.0.1.119:8589/

- используя домен:
- http://dev.bx:8588/
- https://dev.bx:8589/

> [!IMPORTANT]
> НЕ используйте `127.0.0.1` или `localhost` при работе с сайтом на локальной машине. Используйте IP адрес или домен, пример: `10.0.1.119` или `dev.bx`.

В примерах ниже будет использоваться локальный IP адрес `10.0.1.119` или локальный домен `dev.bx`.


# Базовая проверка конфигурации окружения

После запуска сайта необходимо провести базовую проверку конфигурации веб-сервера. Она выполняется с помощью скрипта `bitrix_server_test.php`.

Используем способ, который работает одинаково на всех ОС.

Заходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:
```bash
docker compose exec --user=bitrix php sh
```

Переходим в корневой каталог сайта и скачиваем скрипт `bitrix_server_test.php`:
```bash
cd /opt/www/
wget https://dev.1c-bitrix.ru/download/scripts/bitrix_server_test.php
```

В браузере переходим по ссылке вида:
```bash
http://10.0.1.119:8588/bitrix_server_test.php
```

> [!CAUTION]
> Внимание! После проверки конфигурации окружения скрипт `bitrix_server_test.php` нужно удалить.

Для Docker Engine на Linux расположение каталога сайта на хосте зависит от режима работы docker-а:
- rootfull:
```bash
/var/lib/docker/volumes/dev_www_data/_data/
```

- rootless:
```bash
/home/[USERNAME]/.local/share/docker/volumes/dev_www_data/_data
```


# BitrixSetup / Restore

Для установки продуктов компании 1С-Битрикс можно использовать скрипт `bitrixsetup.php`: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=135&LESSON_ID=4523&LESSON_PATH=10495.4495.4523

Для восстановления из резервной копии скрипт `restore.php`: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=135&CHAPTER_ID=02014&LESSON_PATH=10495.4496.2014

Заходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:
```bash
docker compose exec --user=bitrix php sh
```

Переходим в корневой каталог сайта и скачиваем скрипт(ы):
```bash
cd /opt/www/
wget https://www.1c-bitrix.ru/download/scripts/bitrixsetup.php
wget https://www.1c-bitrix.ru/download/scripts/restore.php
```

В браузере переходим по ссылке вида:
- для установки:
```bash
http://10.0.1.119:8588/bitrixsetup.php
```

- для восстановления:
```bash
http://10.0.1.119:8588/restore.php
```

Устанавливаем продукт или восстанавливаем сайт, зависит от вашего выбора.


## Установка дистрибутивов

Используем скрипт `bitrixsetup.php`, скачиваем дистрибутив продукта компании 1С-Битрикс, демо или лицензионную версию.

Редакция и тип базы зависит от вашего выбора.

После переходим на сайт, используя URL:
```bash
http://10.0.1.119:8588/
```

Проходим мастер установки дистрибутива:
- `1С-Битрикс: Управление сайтом` - https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=135&CHAPTER_ID=04522&LESSON_PATH=10495.4495.4522
- `1С-Битрикс24` - https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=135&CHAPTER_ID=04522&LESSON_PATH=10495.4495.4522

На шаге создания базы вводим параметры подключения к ней:

- для `MySQL` версии:
- Имя хоста (алиас) - `mysql`
- Имя суперпользователя - `root`
- Пароль суперпользователя - был создан вами в главе [Пароли к базам данных MySQL и PostgreSQL](#databasespasswords), хранится в файле `.env_sql`

- для `PostgreSQL` версии:
- Имя хоста (алиас) - `postgres`
- Имя суперпользователя - `postgres`
- Пароль суперпользователя - был создан вами в главе [Пароли к базам данных MySQL и PostgreSQL](#databasespasswords), хранится в файле `.env_sql`


## Восстановление из резервной копии

Используем скрипт `restore.php`, восстанавливаем сайт из резервной копии.

Если архив сайта был размещен на сайте (в облаке) клиента, то необходимо выбрать вариант `Скачать резервную копию с другого сайта` и указать путь к архиву.

Если архив сайта был размещен в облаке 1С-Битрикс, то необходимо выбрать вариант `Развернуть резервную копию из облака "1С-Битрикс"` и указать активный лицензионный ключ.

Также архив сайта можно `Загрузить с локального диска`, выбрав нужные файлы.

Если `Архив загружен в корневую папку сервера`, то появится пункт, который позволит распаковать файлы в корень сайта соответственно.

После скачивания архива и завершения распаковки файлов необходимо будет указать настройки соединения с базой данных, если при создании резервной копии был создан дамп базы данных.

Нажимаем кнопку `Восстановить` и ждем завершения работы сценария.

После успешного восстановления нажимаем кнопку `Удалить локальную копию и служебные скрипты`.


# Лицензия, обновления платформы и решений

Перед дальнейшим использованием продуктов 1С-Битрикс рекомендуется обновить их до последних версий.

Для этого вам понадобится лицензионный ключ для продукта выбранной редакции.

Дальше нужно зайти в настройки `Главный модуль (main)` (`/bitrix/admin/settings.php?lang=ru&mid=main`), на вкладке `Система обновлений` заполнить поле `Лицензионный ключ`.

Перейти на страницу `Обновление платформы` (`/bitrix/admin/update_system.php?lang=ru`), обновить систему обновлений, принять новые лицензионные соглашения (если это потребуется) и установить все доступные обновления.

Рекомендуется перейти на страницу `Обновление решений` (`/bitrix/admin/update_system_partner.php?lang=ru`) и установить обновления сторонних решений.


# Настройки модулей

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

Настроим `Главный модуль (main)` (`/bitrix/admin/settings.php?lang=ru&mid=main`):

- на вкладке `Настройки`:
- указываем `Название сайта`
- задаем `URL сайта (без http://, например www.mysite.com)` - 10.0.1.119:8588 или 10.0.1.119:8589, dev.bx:8588 или dev.bx:8589 и т.д.
- отмечаем опцию `Быстрая отдача файлов через Nginx` - она сконфигурирована

- на вкладке `Авторизация`:
- снимаем отметку у опции `Продлевать сессию при активности посетителя в окне браузера`

- на вкладке `Журнал событий`:
- отмечаем опции записи событий в журнал событий (на выбор из множества опций)

- на вкладке `Система обновлений`:
- заполняем поле `Лицензионный ключ`
- заполняем поле `Имя сервера, содержащего обновления`

Сохраняем настройки.

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

Описание значений полей смотрите документации модуля.


# Проверка системы

Для всесторонней проверки соответствия параметров системы, на которой осуществляется функционирование сайта, минимальным и рекомендуемым техническим требованиям продукта используйте страницу `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`).

Документация:
- https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&LESSON_ID=14020&LESSON_PATH=3906.4493.4506.2024.14020
- https://dev.1c-bitrix.ru/user_help/settings/utilities/site_checker.php


# Тест производительности

Для оценки производительности перейдите на страницу `Панель производительности` (`/bitrix/admin/perfmon_panel.php?lang=ru`).

Выполните тест конфигурации. Результаты подскажут "узкие" места системы или ее конфигурации.

Документация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&CHAPTER_ID=03376&LESSON_PATH=3906.6663.4904.3376


# Cron


## Выполнение агентов на cron

Для работы cron заданий используется отдельный контейнер `cron` на базе образа `bitrix24/php`.

По умолчанию контейнер сконфигурирован на выполнение заданий модуля `Главный модуль (main)` раз в минуту, запуская это исполнение от пользователя `bitrix`:
```bash
php -f /opt/www/bitrix/modules/main/tools/cron_events.php
```

Это задание будет выполнятся только в том случае, если дистрибутив установлен.

Для завершения настройки необходимо в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru&path=%2F`) отредактировать файл `/bitrix/php_interface/dbconn.php`, добавить строку:
```php
define("BX_CRONTAB_SUPPORT", true);
```

Cохранить изменения в файле.

После этого все агенты и отправка системных событий будут обрабатываться из-под cron, раз в 1 минуту. Настройка завершена.

Проверить настройку можно на странице `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`) и на странице `Список агентов` (`/bitrix/admin/agent_list.php?lang=ru`).


## Кастомные cron задания

Cron задания хранятся в папке `/etc/periodic/` контейнера `cron`.

Внутри каталога размещены подкаталоги, указывающие на периодичность запуска заданий:
```bash
1min
15min
hourly
daily
weekly
monthly
```

Для примера создадим задание, которое выполняется раз в сутки - создание резервной копии сайта с базой MySQL - бекап.

Заходим в sh-консоль контейнера `cron` из-под пользователя `root`:
```bash
docker compose exec --user=root cron sh
```

В каталоге `/etc/periodic/daily/` создадим файл `backup` без указания расширения файла.
```bash
apk add mc
mcedit /etc/periodic/daily/backup
```

Заполним содержимое файла:
```bash
#!/bin/sh
#
su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/backup.php; > /dev/null 2>&1'
#
```

Сохраняем файл.
Делаем его исполняемым:
```bash
chmod -R a+x /etc/periodic/daily
```

Создаем файл `/etc/crontabs/cron.update`, чтобы `crond` демон перезапустил задания крона:
```bash
touch /etc/crontabs/cron.update
```

Итог: раз в день (в 2ч ночи) контейнер запустит `backup` задание и выполнит резервное копирование.

Детали создания резервной копии будут доступны в логе контейнера `cron`. Пример:
```
crond: USER root pid 122 cmd run-parts /etc/periodic/15min
0.19 sec Backup started to file: /opt/www/bitrix/backup/20250423_113000_full_vnw0wuf76rq6e5je.tar
0.19 sec Dumping database
14.18 sec Archiving database dump
14.2 sec Archiving files
167.01 sec Finished.
Data size: 2569.42 M
Archive size: 2569.42 M
Time: 166.76 sec
```

Документация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&LESSON_ID=4464&LESSON_PATH=3906.4833.4464


# Хранение временных файлов вне корневой директории сайта

По умолчанию конфигурация `nginx` предварительно подготовлена таким образом, чтобы временные файлы хранились вне пределов корневой директории сайта, так как это существенно повышает защищенность от известных атак.

Для завершения настройки и усиления безопасности, необходимо в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru&path=%2F`) отредактировать файл `/bitrix/php_interface/dbconn.php`, добавить строку:
```php
define("BX_TEMPORARY_FILES_DIRECTORY", "/opt/.bx_temp");
```

Cохранить.

Проверить настройку можно на странице `Сканер безопасности` (`/bitrix/admin/security_scanner.php?lang=ru`) модуля `Проактивной защиты (security)`.


# Push & pull


## Push-сервер

Для работы Push-сервера будет запущено два контейнера: один для режима `pub`, второй для режима `sub`. Оба используют один образ `bitrix24/push`.

Параметры переменных сред контейнеров хранятся в файлах `.env_push_pub` и `.env_push_sub`.

Cекретный ключ для подписи соединения между клиентом и push-сервером хранится в файле `.env_push` и был создан вами в главе [Секретный ключ для Push-сервера](#pushserversecretkey).

Возвращаемся к главам [Адресация](#iporurls) и [Порты](#ports) этого документа. Определяемся по какой схеме работает сайт. Например:
- используется локальный IP вида `10.0.1.119`
- порт для http `8588`
- порт для https `8589`

Итого получается:
- для http: `10.0.1.119:8588`
- для https: `10.0.1.119:8589`

Запоминаем эти значения.

В административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru&path=%2F`) редактируем файл `/bitrix/.settings.php`:
- добавляем блок настроек Push-сервера
- меняем значения опции `signature_key`, указываем ваш сгенерированный уникальный секретный ключ вместо шаблона `CHANGE_SECURITY_KEY_HERE`
- меняем значения для `http` и `https` на ваши
- пример:
```php
'pull' => array(
'value' => array(
'path_to_listener' => 'http://10.0.1.119:8588/bitrix/sub/',
'path_to_listener_secure' => 'https://10.0.1.119:8589/bitrix/sub/',
'path_to_modern_listener' => 'http://10.0.1.119:8588/bitrix/sub/',
'path_to_modern_listener_secure' => 'https://10.0.1.119:8589/bitrix/sub/',
'path_to_mobile_listener' => 'http://10.0.1.119:8893/bitrix/sub/',
'path_to_mobile_listener_secure' => 'https://10.0.1.119:8894/bitrix/sub/',
'path_to_websocket' => 'ws://10.0.1.119:8588/bitrix/subws/',
'path_to_websocket_secure' => 'wss://10.0.1.119:8589/bitrix/subws/',
'path_to_publish' => 'http://10.0.1.119:8588/bitrix/pub/',
'path_to_publish_web' => 'http://10.0.1.119:8588/bitrix/rest/',
'path_to_publish_web_secure' => 'https://10.0.1.119:8589/bitrix/rest/',
'path_to_json_rpc' => 'http://10.0.1.119:8588/bitrix/api/',
'nginx_version' => '4',
'nginx_command_per_hit' => '100',
'nginx' => 'Y',
'nginx_headers' => 'N',
'push' => 'Y',
'websocket' => 'Y',
'signature_key' => 'CHANGE_SECURITY_KEY_HERE',
'signature_algo' => 'sha1',
'guest' => 'N',
),
),
```

Сохраняем файл.

Для продукта Битрикс24 проверить настройку Push-сервера можно на странице `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`), используя вкладку `Работа портала`.


# Sphinx


## Поиск с помощью Sphinx

Для работы полнотекстового поиска, используя `Sphinx`, будет запущен один контейнер на базе образа `bitrix24/sphinx`.

Для запуска и настройки:
- переходим в настройки модуля `Поиск` (`/bitrix/admin/settings.php?lang=ru&mid=search`)
- на вкладке `Морфология`:
- выбираем `Полнотекстовый поиск с помощью` - `Sphinx`
- заполняем строку `Строка подключения для управления индексом (протокол MySql)` - `sphinx:9306`
- поле `Идентификатор индекса` не меняем - `bitrix`

Сохраняем настройки модуля.

На странице `Переиндексация сайта` (`/bitrix/admin/search_reindex.php?lang=ru`) снимаем галку `Переиндексировать только измененные` и выполняем полную переиндексацию сайта.

Настройка завершена.

Для продукта Битрикс24 проверить работу можно в разделе `/search/` сайта.

Документация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&CHAPTER_ID=04507&LESSON_PATH=3906.4507

> [!IMPORTANT]
> Для продуктов, использующих базу данных PostgreSQL, нужно обновление модуля `search` версии `25.0.0` и выше.


# Почта


## Отправка почты с помощью msmtp

Образ `bitrix24/php` в своем составе содержит mta `msmtp`, предназначенный для отправки писем.

Настройки msmtp для аккаунта `default` хранятся в файле `/opt/msmtp/.msmtprc`.

Значения настроек msmtp зависят от smtp-сервера, с которым он будет взаимодействовать при работе.

Например, локальный почтовый сервер, отвечает на порту `25`, расположен на хосте `mail.server.local`, не использует в своей работе `tls`. В файле `/opt/msmtp/.msmtprc` настройки будут выглядеть:
```bash
...
host mail.server.local
port 25
from info@mail.server.local
user info@mail.server.local
password password_example
...
tls off
tls_starttls off
tls_certcheck off
...
```

Другой пример: почтовые сервисы вида `Gmail`, `Yahoo`, `Yandex`, `Rambler` и т.д.

Настройки почтовых сервисов приведены в курсе: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=37&LESSON_ID=12265

Для `Gmail`, который отвечает на порту `587`, расположен на хосте `smtp.gmail.com`, использует в своей работе `tls`. В файле `/opt/msmtp/.msmtprc` полный список настроек выглядит так:

```bash
# smtp account configuration for default
account default
logfile /proc/self/fd/2
host smtp.gmail.com
port 587
from [LOGIN]@gmail.com
user [LOGIN]@gmail.com
password [APP_PASSWORD]
auth login
aliases /etc/aliases
keepbcc off
tls on
tls_starttls on
tls_certcheck on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
protocol smtp
```

Настроим отправку писем через `Gmail`.

В блоке настроек выше меняем `APP_PASSWORD` на пароль приложения, `LOGIN` на ваш логин в почте Google.

Заходим в sh-консоль контейнера `php` из-под пользователя `root`:
```bash
docker compose exec --user=root php sh
```

Устанавливаем `mc` и выходим:
```bash
apk add mc
exit
```

Заходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:
```bash
docker compose exec --user=bitrix php sh
```

Редактируем файл `/opt/msmtp/.msmtprc`, указываем приготовленный блок настроек:
```bash
mcedit /opt/msmtp/.msmtprc
```

Сохраняем файл и выходим из контейнера `php`.

После в административной части продукта необходимо настроить модули, указав email отправителя (или От кого):
- `Главный модуль (main)` (`bitrix/admin/settings.php?lang=ru&mid=main`)
- `Email-маркетинг (sender)` (`/bitrix/admin/settings.php?lang=ru&mid=sender`)
- `Интернет-магазин (sale)` (`/bitrix/admin/settings.php?lang=ru&mid=sale`)
- `Подписка, рассылки (subscribe)` (`/bitrix/admin/settings.php?lang=ru&mid=subscribe`)
- `Форум (forum)` (`/bitrix/admin/settings.php?lang=ru&mid=forum`)

Проверить отправку почты можно на странице `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`), запустив `Тестирование конфигурации`.

Результаты будут отображены в блоке отчета `Дополнительные функции`:
```
Отправка почты - Отправлено. Время отправки: 1.36 сек.
Отправка почтового сообщения больше 64Кб - Отправлено. Время отправки: 1.55 сек.
```

Детали отправки (или возникающие ошибки) будут доступны в логе контейнера `php`. Пример для двух писем из тестирования конфигурации:
```
Apr 12 22:52:14 host=smtp.gmail.com tls=on auth=on user=***@gmail.com from=***@gmail.com recipients=hosting_test@bitrixsoft.com mailsize=211 smtpstatus=250 smtpmsg='250 2.0.0 OK 1744498333 2adb3069b0e04-54d3d502717sm712937e87.144 - gsmtp' exitcode=EX_OK
Apr 12 22:52:15 host=smtp.gmail.com tls=on auth=on user=***@gmail.com from=***@gmail.com recipients=hosting_test@bitrixsoft.com,noreply@bitrixsoft.com mailsize=200205 smtpstatus=250 smtpmsg='250 2.0.0 OK 1744498335 2adb3069b0e04-54d3d502618sm743850e87.107 - gsmtp' exitcode=EX_OK
```


## Отправка почты через SMTP-сервера отправителя

Для отправки почты используем возможности `Главного модуля (main)` без каких-либо дополнительных контейнеров и т.д.

Активируем возможность использования SMTP-сервера отправителя: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=23612&LESSON_PATH=3913.3516.5062.2795.23612

Для этого в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru&path=%2F`) редактируем файл `/bitrix/.settings.php`, добавляем блок настроек:
```php
'smtp' => [
'value' => [
'enabled' => true,
'debug' => true,
'log_file' => $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/smtp_mailer.log",
],
'readonly' => false,
],
```

После переходим на страницу `Добавление SMTP подключения` (`/bitrix/admin/smtp_edit.php?lang=ru`).

Заполняем поля на странице, указываем параметры smtp и сохраняем настройки.

После необходимо настроить модули, указав email отправителя (или От кого):
- `Главный модуль (main)` (`bitrix/admin/settings.php?lang=ru&mid=main`)
- `Email-маркетинг (sender)` (`/bitrix/admin/settings.php?lang=ru&mid=sender`)
- `Интернет-магазин (sale)` (`/bitrix/admin/settings.php?lang=ru&mid=sale`)
- `Подписка, рассылки (subscribe)` (`/bitrix/admin/settings.php?lang=ru&mid=subscribe`)
- `Форум (forum)` (`/bitrix/admin/settings.php?lang=ru&mid=forum`)

Настройки почтовых сервисов: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=37&LESSON_ID=12265

Проверить настройки можно отправив письмо самому себе. Для этого нужно отредактировать параметры пользователя, указав `E-Mail` и отметить опцию `Оповестить пользователя`.

Лог отправки будет в файле `/bitrix/modules/smtp_mailer.log`.

> [!NOTE]
> Проверка системы при тестировании параметров не использует SMTP-сервера отправителя. Два теста почты будут красными. Можно это проигнорировать.


## Логирование отправки почты в файл

Если отправка почты не работает, можно включить логирование процесса отправки в файл для диагностики проблемы.

Для этого в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru&path=%2F`) редактируем файл `/bitrix/php_interface/dbconn.php`, добавляем строку:
```php
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/mail_log.txt");
```

Создаем файл `/bitrix/php_interface/init.php` если его нет, добавляем код функции `custom_mail`:
```php
function custom_mail($to, $subject, $message, $additional_headers='', $additional_parameters='')
{
AddMessage2Log(
'To: '.$to.PHP_EOL.
'Subject: '.$subject.PHP_EOL.
'Message: '.$message.PHP_EOL.
'Headers: '.$additional_headers.PHP_EOL.
'Params: '.$additional_parameters.PHP_EOL
);
if ($additional_parameters!='')
{
return @mail($to, $subject, $message, $additional_headers, $additional_parameters);
}
else
{
return @mail($to, $subject, $message, $additional_headers);
}
}
```

Лог отправки будет в файле `/bitrix/modules/mail_log.txt`.

Документация: https://dev.1c-bitrix.ru/api_help/main/functions/other/bxmail.php


# PHP


## PHP Composer

В контейнере с `php` по умолчанию доступен [PHP Composer](https://getcomposer.org/).

Чтобы его использовать, заходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:
```bash
docker compose exec --user=bitrix php sh
```

Проверяем его версию командой:
```bash
composer --version
```

Устанавливаем зависимости:
```bash
cd /opt/www/bitrix/
COMPOSER=composer-bx.json composer install
```

После запускаем Bitrix CLI:
```bash
php bitrix.php -h
```

Полный набор команд и параметров доступен в документации: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=11685&LESSON_PATH=3913.3516.4776.2483.11685


## PHP Browser Capabilities

Возможно, пригодится настроить, если нужна `История входов`: https://helpdesk.bitrix24.ru/open/16615982/

Заходим в sh-консоль контейнера `php` из-под пользователя `root`:
```bash
docker compose exec --user=root php sh
```

Устанавливаем `curl`, подключаем ini-файл в настройках PHP, выходим:
```bash
apk add curl
echo 'browscap = /opt/browscap/php_browscap.ini' > /usr/local/etc/php/conf.d/browscap.ini
exit
```

Заходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:
```bash
docker compose exec --user=bitrix php sh
```

В каталог `/opt/browscap` загрузим `browscap.ini`. Выполняем:
```bash
cd /opt/browscap
curl http://browscap.org/stream?q=PHP_BrowsCapINI -o php_browscap.ini
exit
```

Перезапускаем контейнеры `php` и `cron`:
```bash
docker compose restart php cron
```

На странице настроек `Главного модуля (main)` (`/bitrix/admin/settings.php?lang=ru&mid=main`) на вкладке `Журнал событий`:
- отмечаем опцию `Сохранять историю входов с устройств пользователя` - `Да`
- заполняем поле `Сколько дней хранить историю входов` - `365`

Сохраняем настройки.


## PHP GeoIP2

Возможно, пригодится настроить, если нужно отслеживать геопозицию устройства для `Истории входов`: https://helpdesk.bitrix24.ru/open/16615982/

Заходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:
```bash
docker compose exec --user=bitrix php sh
```

Переходим в каталог `/opt/geoip2`:
```bash
cd /opt/geoip2
```

Размещаем в нем файлы в формате mmdb, список:
```bash
GeoLite2-ASN.mmdb
GeoLite2-City.mmdb
GeoLite2-Country.mmdb
```

На странице `Список обработчиков геолокации` (`/bitrix/admin/geoip_handlers_list.php?lang=ru`) редактируем обработчик `GeoIP2` (`/bitrix/admin/geoip_handler_edit.php?lang=ru&ID=1&CLASS_NAME=%5CBitrix%5CMain%5CService%5CGeoIp%5CGeoIP2`).

На вкладке `Дополнительные`:
- выбираем `Тип базы данных` - `GeoIP2/GeoLite2 City`
- заполняем `Абсолютный путь к файлу базы данных (*.mmdb)` - `/opt/geoip2/GeoLite2-City.mmdb`

или

- выбираем `Тип базы данных` - `GeoIP2/GeoLite2 Country`
- заполняем `Абсолютный путь к файлу базы данных (*.mmdb)` - `/opt/geoip2/GeoLite2-Country.mmdb`

Сохраняем настройки.

На странице настроек `Главного модуля (main)` (`/bitrix/admin/settings.php?lang=ru&mid=main`) на вкладке `Журнал событий`:
- отмечаем опцию `Собирать IP-геоданные для истории входов` - `Да`

Сохраняем настройки.


## PHP расширения (extensions)

Образ `bitrix24/php` в своем составе содержит следующие PHP расширения (extensions):
```bash
amqp
apcu
bz2
calendar
exif
gd
gettext
igbinary
imagick
intl
ldap
mcrypt
memcache
memcached
msgpack
mysqli
opcache
pdo_mysql
pdo_pgsql
pgsql
pspell
redis
shmop
sockets
sodium
ssh2
sysvmsg
sysvsem
sysvshm
xdebug
xhprof
xml
xmlwriter
xsl
zip
```

Большинство из них активны по умолчанию.

Чтобы активировать PHP расширение:

- заходим в sh-консоль контейнера `php` из-под пользователя `root`:
```bash
docker compose exec --user=root php sh
```

- находим файл `/usr/local/etc/php/conf.d/docker-php-ext-***.ini`, где `***` название расширения, пример для `imagick`:
```bash
apk add mc
mcedit /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini
```

- внутри файла меняем строку активируем подключение: `extension=***.so`, где `***` название расширения:
```bash
extension=imagick.so
```

- сохраняем изменения и выходим

- перезапускаем контейнеры `php` и `cron`:
```bash
docker compose restart php cron
```

Чтобы деактивировать PHP расширение:

- заходим в sh-консоль контейнера `php` из-под пользователя `root`:
```bash
docker compose exec --user=root php sh
```

- находим файл `/usr/local/etc/php/conf.d/docker-php-ext-***.ini`, где `***` название расширения, пример для `imagick`:
```bash
apk add mc
mcedit /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini
```

- внутри файла меняем строку деактивируем подключение: `; extension=***.so`, где `***` название расширения:
```bash
; extension=imagick.so
```

- сохраняем изменения и выходим
- перезапускаем контейнеры `php` и `cron`:
```bash
docker compose restart php cron
```


## PHP Imagick Engine для изображений

Чтобы работать с изображениями с помощью PHP расширения `Imagick` (а не `GD`), активируем библиотеку для работы с изображениями на базе `ImagickImageEngine`.

Убедимся, что в файле `/usr/local/etc/php/conf.d/docker-php-ext-imagick.ini` активировано подключение расширения `imagick`. Как это сделать, описано в главе PHP [Расширения (extensions)](#phpextensions).

Заходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:
```bash
docker compose exec --user=bitrix php sh
```

Выполняем команду:
```bash
\cp /usr/local/etc/image.png /opt/www/bitrix/images/
```

В административной части продукта:
- на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru&path=%2F`) редактируем файл `/bitrix/.settings.php`
- добавляем блок настроек:
```php
'services' => [
'value' => [
'main.imageEngine' => [
'className' => '\Bitrix\Main\File\Image\Imagick',
'constructorParams' => [
null,
[
'allowAnimatedImages' => true,
'maxSize' => [
7000,
7000
],
'jpegLoadSize' => [
2000,
2000
],
'substImage' => $_SERVER['DOCUMENT_ROOT'].'/bitrix/images/image.png',
]
],
],
],
'readonly' => true,
],
```

Сохраняем файл.

Для выключения в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru&path=%2F`) отредактируем файл `/bitrix/.settings.php` и уберем блок настроек выше.


## PHP веб-антивирус

Веб-антивирус включен в состав модуля `Проактивная защита (security)`, с помощью которого реализуется целый комплекс защитных мероприятий для сайта и сторонних приложений.

Для детектирования вирусов, внедренных до старта буферизации вывода, добавим в контейнер `php` файл `/usr/local/etc/php/conf.d/security.ini`.

Заходим в sh-консоль контейнера `php` из-под пользователя `root`:
```bash
docker compose exec --user=root php sh
```

Выполняем команду:
```bash
echo "auto_prepend_file = /opt/www/bitrix/modules/security/tools/start.php" > /usr/local/etc/php/conf.d/security.ini
```

Перезапускаем контейнеры `php` и `cron`:
```bash
docker compose restart php cron
```

На странице `Веб-антивирус` (`/bitrix/admin/security_antivirus.php?lang=ru`) включаем его, нажимаем кнопку `Включить веб-антивирус`.

Для выключения обратный порядок действий.

На странице `Веб-антивирус` (`/bitrix/admin/security_antivirus.php?lang=ru`) выключаем его, нажимаем кнопку `Выключить веб-антивирус`.

Заходим в sh-консоль контейнера `php` из-под пользователя `root`:
```bash
docker compose exec --user=root php sh
```

Выполняем команду:
```bash
rm -f /usr/local/etc/php/conf.d/security.ini
```

Перезапускаем контейнеры `php` и `cron`:
```bash
docker compose restart php cron
```

Документация:
https://dev.1c-bitrix.ru/user_help/settings/security/security_antivirus.php
https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35&LESSON_ID=2674#antivirus


## Роутинг

Для запуска новой системы роутинга нужно перенаправить обработку 404 ошибок на файл `/bitrix/routing_index.php` в конфигурации контейнера `nginx`.

Сделать это можно двумя способами:
- до первого запуска проекта в файле `confs/nginx/conf.d/default.conf` репозитория
- если сайт уже запущен - в файле `/etc/nginx/conf.d/default.conf` контейнера `nginx`


### Включение роутинга до запуска сайта

До первого запуска проекта редактируем файл `confs/nginx/conf.d/default.conf`.

Находим в файле все строки содержащие `urlrewrite.php`. Добавляем `#` в начало таких строк. Ниже в строках с`routing_index.php` убираем `#`:
```bash
#fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php;
```

Запускаем все контейнеры, оставляем их работать в фоне:
```bash
docker compose up -d
```

Новая система роутинга запущена.

Документация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&CHAPTER_ID=013764&LESSON_PATH=3913.3516.5062.13764


### Включение или отключение роутинга для запущенного сайта

Заходим в sh-консоль контейнера `nginx` из-под пользователя `root`:
```bash
docker compose exec --user=root nginx sh
```

Выполняем:
```bash
apk add mc
exit
```

Заходим в sh-консоль контейнера `nginx` из-под пользователя `bitrix`:
```bash
docker compose exec --user=bitrix nginx sh
```

Редактируем файл `/etc/nginx/conf.d/default.conf`:
```bash
mcedit /etc/nginx/conf.d/default.conf
```

Для включения роутинга находим в файле все строки содержащие `urlrewrite.php`. Добавляем `#` в начало таких строк. Ниже в строках с`routing_index.php` убираем `#`:
```bash
#fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php;
```

Для отключения роутинга находим в файле все строки содержащие `routing_index.php`. Добавляем `#` в начало таких строк. Выше в строках с`urlrewrite.php` убираем `#`:
```bash
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;
#fastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php;
```

Сохраняем файл. Выходим из консоли контейнера. Проверяем настройки `nginx`:
```bash
docker compose exec --user=bitrix nginx sh -c "nginx -t"
```

Если никаких ошибок нет, перезапускаем контейнер `nginx`:
```bash
docker compose restart nginx
```


# Nginx


## Модули для Nginx

Подключение модулей Nginx производится в файле `/etc/nginx/inc/modules.conf` контейнера, содержимое которого можно найти в файле `/confs/nginx/inc/modules.conf` репозитория.

По умолчанию в контейнере `nginx`, запущенного из образа `bitrix24/nginx`, подключаются следующие модули:
- `brotli`
- `headers-more`
- `zip`


## Подключение или отключение модуля для Nginx

Заходим в sh-консоль контейнера `nginx` из-под пользователя `root`:
```bash
docker compose exec --user=root nginx sh
```

Выполняем:
```bash
apk add mc
exit
```

Заходим в sh-консоль контейнера `nginx` из-под пользователя `bitrix`:
```bash
docker compose exec --user=bitrix nginx sh
```

Редактируем файл `/etc/nginx/inc/modules.conf`:
```bash
mcedit /etc/nginx/inc/modules.conf
```

Для подключения модуля приводим строку к виду `load_module "/usr/lib/nginx/modules/***.so";`. Пример для модуля `perl`:
```bash
load_module "/usr/lib/nginx/modules/ngx_http_perl_module.so";
```

Для отключения модуля приводим строку к виду `#load_module "/usr/lib/nginx/modules/***.so";`. Пример для модуля `perl`:
```bash
#load_module "/usr/lib/nginx/modules/ngx_http_perl_module.so";
```

Выходим из консоли контейнера и проверяем настройки `nginx`:
```bash
docker compose exec --user=bitrix nginx sh -c "nginx -t"
```

Если никаких ошибок нет, перезапускаем контейнер `nginx`:
```bash
docker compose restart nginx
```


# Memcache и Redis


## Memcache

Контейнер `memcached` может быть использован для хранения кеша и для хранения данных сессий.


## Redis

Контейнер `redis` используется в связке с Push-сервером.

Также может быть использован для хранения кеша и для хранения данных сессий.


## Кеширование

Ядро поддерживает несколько вариантов для хранения кеша: `файлы`, `redis`, `memcache` и т.д.

В административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru&path=%2F`) отредактируем файл `/bitrix/.settings.php`, добавляем блок настроек, который определит вариант хранения:

- `memcache`:
```php
'cache' => [
'value' => [
'type' => [
'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineMemcache',
'extension' => 'memcache'
],
'memcache' => [
'host' => 'memcached',
'port' => '11211',
]
],
'sid' => $_SERVER["DOCUMENT_ROOT"]."#01234"
],
```

- `redis`:
```php
'cache' => [
'value' => [
'type' => [
'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineRedis',
'extension' => 'redis'
],
'redis' => [
'host' => 'redis',
'port' => '6379',
]
],
'sid' => $_SERVER["DOCUMENT_ROOT"]."#01234"
],
```

Документация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&CHAPTER_ID=02795&LESSON_PATH=3913.3516.5062.2795#cache


## Хранение сессий

Ядро поддерживает четыре варианта для хранения данных сессии: `файлы`, `database`, `redis`, `memcache`.

В административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru&path=%2F`) отредактируем файл `/bitrix/.settings.php`, добавляем блок настроек, который определит вариант хранения:

- `memcache`, разделенная сессия:
```php
// memcache separated
'session' => [
'value' => [
'lifetime' => 14400,
'mode' => 'separated',
'handlers' => [
'kernel' => 'encrypted_cookies',
'general' => [
'type' => 'memcache',
'port' => '11211',
'host' => 'memcached',
],
],
],
],
```

- `redis`:
```php
// redis
'session' => [
'value' => [
'mode' => 'default',
'handlers' => [
'general' => [
'type' => 'redis',
'port' => '6379',
'host' => 'redis',
],
],
],
],
```

- `database`:
```php
// database
'session' => [
'value' => [
'mode' => 'default',
'handlers' => [
'general' => [
'type' => 'database',
],
],
],
],
```

Сохраняем файл.

Все возможные варианты доступны в документации: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=14026


## Кеширование с помощью модуля Веб-кластер

Альтернативный способ использования кеширования для продуктов `1С-Битрикс: Управление сайтом` и `1С-Битрикс24` при условии, что в редакции есть модуль `Веб-кластер` (`cluster`).


### Memcache

В административной части продукта на странице настроек модуля `Веб-кластер` (`/bitrix/admin/settings.php?lang=ru&mid=cluster`) выбираем `Использовать для хранения кеша` - `Memcache`.

Сохраняем настройки.

В административной части продукта на странице `Подключения к memcached` (`/bitrix/admin/cluster_memcache_list.php?lang=ru&group_id=1`) добавляем новое подключение и указываем:
- `Сервер` - `memcached`
- `Порт` - `11211`
- `Процент распределения нагрузки (0..100)` - `100`

Сохраняем подключение. В списке подключений для созданного подключения нажимаем `Начать использовать`.

Процесс отключения и удаления обратный добавлению.


### Redis

В административной части продукта на странице настроек модуля `Веб-кластер` (`/bitrix/admin/settings.php?lang=ru&mid=cluster`) выбираем `Использовать для хранения кеша` - `Redis`.

Сохраняем настройки.

В административной части продукта на странице `Подключения к redis` (`/bitrix/admin/cluster_redis_list.php?lang=ru&group_id=1`) добавляем новое подключение и указываем:
- `Сервер` - `redis`
- `Порт` - `6379`

Сохраняем подключение. В списке подключений для созданного подключения нажимаем `Начать использовать`.

Процесс отключения и удаления обратный добавлению.


# HTTPS/SSL/TLS/WSS


## Самоподписанный сертификат

Сгенерировать и использовать SSL-сертификат в режиме самоподписи возможно с помощью отдельного контейнера `ssl` на базе образа `bitrix24/ssl`.

Данные, отображаемые в сертификатах корневого и промежуточного центров сертификации, хранятся в файле `.env_ssl`. Строки настроек начинаются с `CA_`.

При необходимости отредактируйте файл `.env_ssl`, укажите ваши данные по примеру:
- `Название страны`: введите двухбуквенный код вашей страны (пример, `RU`)
- `Название штата или провинции`: введите название штата, в котором официально зарегистрирована ваша организация (пример, `Kaliningrad Region`)
- `Название населенного пункта`: введите название населенного пункта или города, в котором находится ваша компания (пример, `Kaliningrad`)
- `Название организации`: укажите официальное название вашей организации (пример, `Dev Corporation Ltd`)
- `Имя организационного подразделения`: введите название подразделения в вашей организации, отвечающего за управление сертификатами (пример, `Dev Corporation Ltd Unit`)
- `Адрес электронной почты`: пример, `info@devcorporation.ltd`

Данные, отображаемые в сертификате для домена, также хранятся в файле `.env_ssl`. Строки настроек начинаются с `CERT_`.

При необходимости отредактируйте файл `.env_ssl`, укажите ваши данные по примеру:
- `Название страны`: введите двухбуквенный код вашей страны (пример, `RU`)
- `Название штата или провинции`: введите название штата, в котором официально зарегистрирована ваша организация (пример, `Kaliningrad Region`)
- `Название населенного пункта`: введите название населенного пункта или города, в котором находится ваша компания (пример, `Kaliningrad`)
- `Название организации`: укажите официальное название вашей организации (пример, `Dev Corporation Ltd`)
- `Имя организационного подразделения`: введите название подразделения в вашей организации, отвечающего за управление сертификатами (пример, `Dev Corporation Ltd Unit`)
- `Адрес электронной почты`: пример, `info@devcorporation.ltd`

> [!IMPORTANT]
> Если данные, отображаемые в сертификатах корневого и промежуточного центров сертификации, были изменены в файле `.env_ssl`, необходимо пересоздать контейнер `ssl`.
>
> Для этого выполните последовательно команды остановки, удаления, пересоздания и запуска контейнера `ssl`:
> ```bash
> docker compose stop ssl
> docker compose rm -f ssl
> docker compose up -d
> ```


### Выпуск сертификатов

Одной командой разово генерируем сертификаты корневого и промежуточного центров сертификации:
```bash
docker compose exec --user=bitrix ssl bash -c "~/cas.sh"
```

Второй - сертификат и приватный ключ для домена `dev.bx`:
```bash
docker compose exec --user=bitrix ssl bash -c "~/srv.sh dev.bx"
```

Итого в папке `/ssl/` внутри контейнера `ssl` будет набор файлов:
- `rootCA.cert.pem` - сертификат корневого центра сертификации
- `intermediateCA.cert.pem` - сертификат промежуточного центра сертификации, подписанный корневым сертификатом
- `ca-chain.cert.pem` - цепочка сертификатов обоих центров сертификации
- `dev.bx.cert.pem` - сертификат домена, подписанный промежуточным центром сертификации
- `dev.bx.key.pem` - приватный ключ сертификата
- `dev.bx.chain.cert.pem` - цепочка сертификатов, содержит сертификат домена и сертификат промежуточного центра сертификации
- `dev.bx.fullchain.cert.pem` - полная цепочка всех сертификатов, содержит сертификат домена, сертификат промежуточного центра сертификации, сертификат корневого центра сертификации
- `dhparam.pem` - секретный криптографический ключ, созданный по алгоритму Диффи-Хеллмана для обмена сессионными ключами с клиентом

Файл `dhparam.pem` не создается, а поставляется для примера. Если нужно его сделать уникальным, выполните команду:
```bash
docker compose exec --user=bitrix ssl bash -c "openssl dhparam -out /ssl/dhparam.pem 4096"
```

> [!IMPORTANT]
> Создание файла dhparam.pem может занять значительное время, зависящее от производительности вашего оборудования.


### Доверие к сертификатам центров сертификации для PHP и Nginx

Сертификат корневого центра сертификации (`rootCA.cert.pem`) и сертификат промежуточного центра сертификации (`intermediateCA.cert.pem`) нужно добавить в траст контейнеров `nginx` и `php`.

Заходим в sh-консоль контейнера `php` из-под пользователя `root`:
```bash
docker compose exec --user=root php sh
```

Выполняем:
```bash
mkdir -p /usr/local/share/ca-certificates/
ln -s /ssl/rootCA.cert.pem /usr/local/share/ca-certificates/rootCA.cert.pem
ln -s /ssl/intermediateCA.cert.pem /usr/local/share/ca-certificates/intermediateCA.cert.pem
update-ca-certificates
```

Если локальный домен не определяется в вашей сети, нужно в файле `/etc/hosts` контейнера `php` добавить:
```bash
apk add mc
mcedit /etc/hosts
10.0.1.119 dev.bx
exit
```

Заходим в sh-консоль контейнера `nginx` из-под пользователя `root`:
```bash
docker compose exec --user=root nginx sh
```

Выполняем:
```bash
mkdir -p /usr/local/share/ca-certificates/
ln -s /ssl/rootCA.cert.pem /usr/local/share/ca-certificates/rootCA.cert.pem
ln -s /ssl/intermediateCA.cert.pem /usr/local/share/ca-certificates/intermediateCA.cert.pem
update-ca-certificates
```


### Установка сертификатов

Также нам нужно в SSL конфигурацию `nginx` прописать новые сертификаты. Редактируем файл `/etc/nginx/ssl/ssl.conf`, меняем настройки опций `ssl_*`:
```bash
apk add mc
mcedit /etc/nginx/ssl/ssl.conf
```

Меняем опции на:
```bash
ssl_certificate /ssl/dev.bx.fullchain.cert.pem;
ssl_certificate_key /ssl/dev.bx.key.pem;
ssl_trusted_certificate /ssl/ca-chain.cert.pem;
ssl_dhparam /ssl/dhparam.pem;
```

Также скопируем файлы сертификата корневого центра сертификации (`rootCA.cert.pem`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`) в корень сайта:
```bash
cp /ssl/rootCA.cert.pem /opt/www/
cp /ssl/intermediateCA.cert.pem /opt/www/
chown bitrix:bitrix /opt/www/rootCA.cert.pem
chown bitrix:bitrix /opt/www/intermediateCA.cert.pem
exit
```

Проверяем настройки `nginx`:
```bash
docker compose exec --user=bitrix nginx sh -c "nginx -t"
```

Если никаких ошибок нет, перезапускаем контейнер `nginx`:
```bash
docker compose restart nginx
```


### Импорт сертификатов в ОС или браузер

На хосте, где будем использовать браузер, скачиваем файлы центров сертификации по ссылкам:
```bash
http://dev.bx:8588/rootCA.cert.pem
http://dev.bx:8588/intermediateCA.cert.pem
```

Добавляем их в траст ОС, на которой работает браузер.

Все ОС: `Windows`, `Linux`, `MacOS`

Общая часть для всех - браузер `Mozilla Firefox`. Имеет своё хранилище сертификатов центров сертификации. Работает одинаково вне зависимости от ОС.

В браузере переходим `Настройки` -> `Приватность и защита` -> `Защита` -> `Сертификаты`.

Нажимаем кнопку `Просмотр сертификатов`, в окне переходим на вкладку `Центры сертификации`.

Нажимаем кнопку `Импортировать`:
- первый раз выбираем файл сертификата корневого центра сертификации (`rootCA.cert.pem`)
- второй раз выбираем файл сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`)

ОС: `Windows`

Браузеры `Google Chrome` и `Microsoft Edge` (и другие на их базе) используют системное хранилище ОС для сертификатов центров сертификации.

Скачанные файлы переименовываем, меняем расширение с `pem` на `crt`:
- `rootCA.cert.pem` -> `rootCA.cert.crt`
- `intermediateCA.cert.pem` -> `intermediateCA.cert.crt`

Дважды кликаем на файле `rootCA.cert.crt`, откроется просмотр сертификата.

Нажимаем кнопку `Установить сертификат`.

Проходим мастер импорта. Выбираем `Поместить все сертификаты в следующие хранилища`, в окне выбираем `Доверенные корневые центры сертификации`.

ОС: `Linux`

Выбор пути зависит от используемой вами ОС Linux.

Для ОС `Debian`, `Ubuntu` и ОС на их базе

Устанавливаем пакет `ca-certificates` и создаем объединенный траст файл со всеми сертификатами:
```bash
apt install -y ca-certificates
update-ca-certificates
```

Скачанные файлы переименовываем, меняем расширение с `.pem` на `.crt`:
- `rootCA.cert.pem` -> `rootCA.cert.crt`
- `intermediateCA.cert.pem` -> `intermediateCA.cert.crt`

Например, с помощью команды `cp` выполняем:
```bash
cp rootCA.cert.pem rootCA.cert.crt
cp intermediateCA.cert.pem intermediateCA.cert.crt
```

Для файлов сертификата корневого центра сертификации (`rootCA.cert.crt`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.crt`) создаем символические ссылки в каталоге `/usr/local/share/ca-certificates/`:
```bash
ln -s rootCA.cert.crt /usr/local/share/ca-certificates/rootCA.cert.crt
ln -s intermediateCA.cert.crt /usr/local/share/ca-certificates/intermediateCA.cert.crt
```

Обновляем объединенный траст файл со всеми сертификатами командой:
```bash
update-ca-certificates
```

Для ОС `RHEL`, `CentOS Stream`, `Rocky Linux`, `AlmaLinux`, `Oracle Linux`, `EuroLinux`, `Fedora` и ОС на их базе

Устанавливаем пакет `ca-certificates`:
```bash
dnf install -y ca-certificates
```

Для операционных систем 9-ой серии и выше (пример, RHEL 9, CentOS Stream 9 и т.д.) выполняем команду:
```bash
update-ca-trust
```

Для операционных систем ниже 9-ой серии (пример, Rocky Linux 8.x и т.д.) выполняем команды:
```bash
update-ca-trust force-enable
update-ca-trust enable
```

Для файлов сертификата корневого центра сертификации (`rootCA.cert.pem`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`) создаем символические ссылки в каталоге `/etc/pki/ca-trust/source/anchors/`:
```bash
ln -s rootCA.cert.pem /etc/pki/ca-trust/source/anchors/rootCA.cert.pem
ln -s intermediateCA.cert.pem /etc/pki/ca-trust/source/anchors/intermediateCA.cert.pem
```

Обновляем траст корневых сертификатов (CA Trust) машины командой:
```bash
update-ca-trust extract
```

Для ОС `Arch`, `Bluestar`, `Manjaro`, `EndeavourOS`, `Garuda`, `Mabox`, `RebornOS`, `Archcraft`, `ArchLabs`, `CachyOS` и ОС на их базе

Устанавливаем пакет `ca-certificates` и обновляем траст корневых сертификатов (CA Trust) машины:
```bash
pacman -Syu ca-certificates
update-ca-trust
```

Скачанные файлы переименовываем, меняем расширение с `.pem` на `.crt`:
- `rootCA.cert.pem` -> `rootCA.cert.crt`
- `intermediateCA.cert.pem` -> `intermediateCA.cert.crt`

Например, с помощью команды `cp` выполняем:
```bash
cp rootCA.cert.pem rootCA.cert.crt
cp intermediateCA.cert.pem intermediateCA.cert.crt
```

Для файлов сертификата корневого центра сертификации (`rootCA.cert.crt`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.crt`) создаем символические ссылки в каталоге `/etc/ca-certificates/trust-source/anchors/`:
```bash
ln -s rootCA.cert.crt /etc/ca-certificates/trust-source/anchors/rootCA.cert.crt
ln -s intermediateCA.cert.crt /etc/ca-certificates/trust-source/anchors/intermediateCA.cert.crt
```

Обновляем траст корневых сертификатов (CA Trust) машины командой:
```bash
update-ca-trust extract
```

ОС: `MacOS`

Открываем приложение `Связка ключей`.

Чтобы быстро открыть `Связку ключей`, найдите ее через `Spotlight`, затем нажмите клавишу `Ввод`.

В категории `Системные связки ключей` выбираем `Система`, кликаем для открытия и выбора.

В меню `Файл` выбираем `Импортировать объекты`, выбираем файл сертификата корневого центра сертификации (`rootCA.cert.pem`).

На вкладке `Сертификаты` находим добавленный сертификат, выделяем его, в меню выбираем `Свойства`.

В окне просмотра сертификата разворачиваем группу настроек `Доверие`.

В настройке `Параметры использования сертификата` выбираем `Всегда доверять`.

Закрываем окно, подтверждаем доверие сертификата.

Аналогичным способом проходим путь для файла сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`).

Итог: после настройки выше переходим на сайт по URL с доменом `dev.bx`, используя `https` и порт `8589` в URL:
```bash
https://dev.bx:8589/
```

Устанавливаем дистрибутив, восстанавливаем бекап сайта - выбора за вами.

Выполняем подстройку сайта как указано выше в этом README-файле.

Страница `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`) открывается по `https` и сама проверка проходит, используя `ssl` коннект вида:
```bash
Connection to ssl://dev.bx:8589 Success
```

Push-сервер использует безопасные веб-сокеты, соединение устанавливается по протоколу `wss`. Пуши отправляются корректно, интерактивность функционирует.


### Удаление сертификатов из ОС или браузера

> [!IMPORTANT]
> При удалении сайта не забудьте удалить сертификат корневого центра сертификации (`rootCA.cert.pem`) и сертификат промежуточного центра сертификации (`intermediateCA.cert.pem`) из ОС и браузера.

Для браузера `Mozilla Firefox` процесс удаления обратный добавлению.

Для удаления сертификатов центров сертификации в ОС `Windows`:
- запустите оснастку сертификатов, выполнив команду `certmgr.msc`
- в ней перейдите `Сертификаты` - `Доверенные корневые центры сертификации` - `Сертификаты`
- найдите сертификаты центров сертификации
- сначала удалите сертификат промежуточного центра сертификации, затем сертификат корневого центра сертификации, выбрав их в списке по одному и в меню выбрав пункт `удалить`
- подтвердите удаление

Для удаления сертификатов центров сертификации в ОС `Linux`:

Выбор пути зависит от используемой вами ОС Linux.

Для ОС `Debian`, `Ubuntu` и ОС на их базе

Удаляем символические ссылки для файлов сертификата корневого центра сертификации (`rootCA.cert.crt`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.crt`):
```bash
rm -f /usr/local/share/ca-certificates/rootCA.cert.crt
rm -f /usr/local/share/ca-certificates/intermediateCA.cert.crt
```

Обновляем объединенный траст файл со всеми сертификатами командой:
```bash
update-ca-certificates
```

Для ОС `RHEL`, `CentOS Stream`, `Rocky Linux`, `AlmaLinux`, `Oracle Linux`, `EuroLinux`, `Fedora` и ОС на их базе

Удаляем символические ссылки для файлов сертификата корневого центра сертификации (`rootCA.cert.pem`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`):
```bash
rm -f /etc/pki/ca-trust/source/anchors/rootCA.cert.pem
rm -f /etc/pki/ca-trust/source/anchors/intermediateCA.cert.pem
```

Обновляем траст корневых сертификатов (CA Trust) машины командой:
```bash
update-ca-trust extract
```

Для ОС `Arch`, `Bluestar`, `Manjaro`, `EndeavourOS`, `Garuda`, `Mabox`, `RebornOS`, `Archcraft`, `ArchLabs`, `CachyOS` и ОС на их базе

Удаляем символические ссылки для файлов сертификата корневого центра сертификации (`rootCA.cert.crt`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.crt`):
```bash
rm -f /etc/ca-certificates/trust-source/anchors/rootCA.cert.crt
rm -f /etc/ca-certificates/trust-source/anchors/intermediateCA.cert.crt
```

Обновляем траст корневых сертификатов (CA Trust) машины командой:
```bash
update-ca-trust extract
```
Для удаления сертификатов центров сертификации в ОС `MacOS`:

Откройте приложение `Связка ключей`.

Чтобы быстро открыть `Связку ключей`, найдите ее через `Spotlight`, затем нажмите клавишу `Ввод`.

В категории `Системные связки ключей` выбираем `Система`, кликаем для открытия и выбора.

Переходим на вкладку `Сертификаты`.

Находим файл сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`).

Выбираем его и в меню кликаем `Удалить`.

Подтверждаем удаление сертификата промежуточного центра сертификации из связки ключей `Система`.

Аналогичным способом проходим путь для удаления из связки ключей `Система` сертификата корневого центра сертификации (`rootCA.cert.pem`).


## Бесплатный Lets Encrypt сертификат


### Lego

Выпустить и использовать бесплатный SSL-сертификат от LetsEncrypt возможно с помощью отдельного контейнера `lego` на базе образа `bitrix24/lego`.

Внутри образа находится `LetsEncrypt` клиент и `ACME` библиотека, написанная на `Go`. По сокращениям первых букв слов получаем название проекта `LeGo` ([GitHub](https://github.com/go-acme/lego), [DockerHub](https://hub.docker.com/r/goacme/lego)).

Основные возможности проекта `Lego`:
- ACME v2 с поддержкой множества RFC и draft-ов
- поддержка 150 DNS-провайдеров
- выпуск, перевыпуск, отзыв SSL-сертификатов
- HTTPS, DNS, TLS челленджи
- выпуск сертификатов:
- на один домен (singledomain)
- на множество поддоменов домена (не больше 100 в одном сертификате) (multidomain)
- на все множество поддоменных имен домена (*) (wildcard)
- и многое другое


### Перенаправление или перенос домена

Перед тем как выполнять запросы на получение или обновление SSL-сертификатов с помощью LetsEncrypt нам необходимо перенаправить (или перенести) домен от поставщика услуг на DNS-хостинг провайдера.

Рассмотрим примеры в общих чертах, в деталях информацию необходимо найти в документации поставщиков услуг и DNS-провайдеров.

Пример 1: домен `example.dev` приобретен в `Reg.ru`, переносим его в `YandexCloud`.

В консоли `YandexCloud` добавляем домен, система потребует от нас прописать DNS-сервера у поставщика услуг. Возвращаемся в `Reg.ru`, прописываем требуемые DNS-записи `Yandex`, сохраняем.

Ожидаем завершения процесса переноса. Проверить DNS-записи можно с помощью сервиса https://dnschecker.org/.

Пример 2: домен `proj.site` приобретен в `Reg.ru`, переносим его в `CloudFlare`.

В консоли `CloudFlare` добавляем домен, система потребует от нас прописать DNS-сервера у поставщика услуг. Возвращаемся в `Reg.ru`, прописываем требуемые DNS-записи `CloudFlare`, сохраняем.

Ожидаем завершения процесса переноса. Проверить DNS-записи можно с помощью сервиса https://dnschecker.org/.


### Челленджи

Челлендж - дословно это `вызов`, который `бросает` ваш клиент сервису `LetsEncrypt`. Эти задания содержат домен(ы) и способ его(их) проверки (верификации). При успешном выполнении клиент получает сертификат.

`Lego` поддерживает три типа челленджей: `HTTP`, `DNS`, `TLS`.

`TLS` челлендж рассматривать не будем в виду сложности реализации и использования.

Рассмотрим `HTTP` и `DNS` челленджи как самые часто используемые.

> [!CAUTION]
> Внимание! `HTTP` челлендж возможно пройти `ТОЛЬКО` на порту `80`.
>
> Внимание! С помощью `HTTP` челленджа невозможно получить `wildcard` сертификаты.

Подробней в документации LetsEncrypt: https://letsencrypt.org/docs/challenge-types/


#### HTTP челлендж (http-01)

Чтобы выполнить это задание, завершить `HTTP` челлендж и в итоге получить бесплатный SSL-сер