{"id":28486019,"url":"https://github.com/bitrix-tools/env-docker","last_synced_at":"2025-07-02T05:31:05.454Z","repository":{"id":296944219,"uuid":"989125566","full_name":"bitrix-tools/env-docker","owner":"bitrix-tools","description":"Контейнеры для Битрикс","archived":false,"fork":false,"pushed_at":"2025-06-26T22:19:18.000Z","size":10805,"stargazers_count":78,"open_issues_count":0,"forks_count":10,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-06-26T23:45:29.568Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://dev.1c-bitrix.ru","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bitrix-tools.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-23T15:39:41.000Z","updated_at":"2025-06-26T22:19:21.000Z","dependencies_parsed_at":"2025-06-26T23:39:41.497Z","dependency_job_id":null,"html_url":"https://github.com/bitrix-tools/env-docker","commit_stats":null,"previous_names":["bitrix24/dev","bitrix24/env-docker","bitrix-tools/env-docker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bitrix-tools/env-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitrix-tools%2Fenv-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitrix-tools%2Fenv-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitrix-tools%2Fenv-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitrix-tools%2Fenv-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bitrix-tools","download_url":"https://codeload.github.com/bitrix-tools/env-docker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitrix-tools%2Fenv-docker/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263081093,"owners_count":23410811,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-08T01:09:54.820Z","updated_at":"2025-07-02T05:31:05.427Z","avatar_url":"https://github.com/bitrix-tools.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Контейнерное окружение для Битрикс\n\nПроект представляет собой dev сайт, он же девелоперский сайт, предназначенный для тестирования, разработки, примера использования окружения на базе технологий [Docker](https://www.docker.com/). Проект поддерживается и развивается командой внутри компании 1С-Битрикс.\n\nПрограммы, необходимые для работы технологий Битрикс, запускаются в контейнерах (`Docker Containers`). По шаблону из образов (`Docker Images`). Данные хранятся в томах (`Docker Volumes`). Связаны между собой посредством сети (`Docker Network`). И управляются (оркестрируются) используя compose (`Docker Compose`).\n\n\u003e [!CAUTION]\n\u003e Внимание! Девелоперский сайт не рекомендуется для использования в \"боевом\" режиме (он же \"продакшен\"). Однако, это не запрещено.\n\u003e\n\u003e Стоит учесть, что такая эксплуатация требует дополнительных настроек безопасности контейнерного окружения, хоста и самого сайта.\n\n# Содержимое\n\n* [Docker и Docker Compose](#docker)\n* [Пароли к базам данных MySQL и PostgreSQL](#databasespasswords)\n* [Секретный ключ для Push-сервера](#pushserversecretkey)\n* [Часовой пояс (timezone)](#timezone)\n* [Управление](#management)\n* [Адресация](#iporurls)\n* [Порты](#ports)\n* [Доступ к сайту](#siteaccess)\n* [Базовая проверка конфигурации окружения](#bitrixservertestphp)\n* [BitrixSetup / Restore](#bitrixsetupphprestorephp)\n  * [Установка дистрибутивов](#installdistro)\n  * [Восстановление из резервной копии](#restorebackup)\n* [Лицензия, обновления платформы и решений](#licenceandupdates)\n* [Настройки модулей](#modulessettings)\n* [Проверка системы](#sitechecker)\n* [Тест производительности](#perfmonpanel)\n* [Cron](#cron)\n  * [Выполнение агентов на cron](#agentsoncron)\n  * [Кастомные cron задания](#owncrontasks)\n* [Хранение временных файлов вне корневой директории сайта](#bxtemporaryfilesdirectory)\n* [Push \u0026 pull](#pushpull)\n  * [Push-сервер](#pushserver)\n* [Sphinx](#sphinx)\n  * [Поиск с помощью Sphinx](#sphinxsearch)\n* [Почта](#email)\n  * [Отправка почты с помощью msmtp](#msmtpmta)\n  * [Отправка почты через SMTP-сервера отправителя](#emailsmtpmailer)\n  * [Логирование отправки почты в файл](#emaildebuglog)\n* [PHP](#php)\n  * [Composer](#phpcomposer)\n  * [Browser Capabilities](#phpbrowsercapabilities)\n  * [GeoIP2](#phpgeoip2)\n  * [Расширения (extensions)](#phpextensions)\n  * [Imagick Engine для изображений](#phpimagickimageengine)\n  * [security: Веб-антивирус](#phpsecurityantivirus)\n  * [Роутинг](#phprouting)\n    * [Включение роутинга до запуска сайта](#phproutingbeforestart)\n    * [Включение или отключение роутинга для запущенного сайта](#phproutingafterstart)\n* [Nginx](#nginx)\n  * [Модули для Nginx](#nginxmodules)\n  * [Подключение или отключение модуля для Nginx](#nginxmoduleonoroff)\n* [Memcache и Redis](#memcacheandredis)\n  * [Memcache](#memcache)\n  * [Redis](#redis)\n  * [Кеширование](#cachestorage)\n  * [Хранение сессий](#sessionstorage)\n  * [Кеширование с помощью модуля Веб-кластер](#clustercachestorage)\n    * [Memcache](#clustercachememcache)\n    * [Redis](#clustercacheredis)\n* [HTTPS/SSL/TLS/WSS](#httpsssltlswss)\n  * [Самоподписанный сертификат](#selfsignedcerts)\n    * [Выпуск сертификатов](#selfsigneddeploys)\n    * [Доверие к сертификатам центров сертификации для PHP и Nginx](#selfsignedtrustforphpandnginx)\n    * [Установка сертификатов](#installselfsignedcerts)\n    * [Импорт сертификатов в ОС или браузер](#importselfsignedcertstoosorbrowser)\n    * [Удаление сертификатов из ОС или браузера](#removeselfsignedcertsfromosorbrowser)\n  * [Бесплатный Lets Encrypt сертификат](#presentcerts)\n    * [Lego](#lego)\n    * [Перенаправление или перенос домена](#domaintransfer)\n    * [Челленджи](#letsencryptchallenges)\n      * [HTTP челлендж (http-01)](#letsencrypthttpchallenge)\n      * [DNS челлендж (dns-01)](#letsencryptdnschallenge)\n    * [Команды lego](#legocommands)\n      * [Команда для HTTP челленджа (http-01)](#legocommandhttpchallenge)\n      * [Команда для DNS челленджа (dns-01)](#legocommanddnschallenge)\n    * [Выпуск сертификатов](#legodeploys)\n      * [HTTP челлендж (http-01) для одного домена (singledomain SSL-сертификат)](#httpchallengesingledomain)\n      * [HTTP челлендж (http-01) для множества поддоменов домена (multidomain SSL-сертификат)](#httpchallengemultidomain)\n      * [DNS челлендж (dns-01) для одного домена (singledomain SSL-сертификат)](#dnschallengesingledomain)\n      * [DNS челлендж (dns-01) для множества поддоменов домена (multidomain SSL-сертификат)](#dnschallengemultidomain)\n      * [DNS челлендж (dns-01) на все множество поддоменных имен домена (wildcard SSL-сертификат)](#dnschallengewildcard)\n    * [Установка сертификатов](#installpresentcerts)\n* [Консоль сервисов](#servicesconsole)\n  * [Контейнер](#containerconsole)\n  * [MySQL](#mysqlconsole)\n  * [PostgreSQL](#postgresqlconsole)\n  * [Memcache](#memcacheconsole)\n  * [Redis](#redisconsole)\n* [Кастомизация](#customization)\n* [Версии ПО](#softwareversions)\n  * [Текущие версии](#currentversions)\n  * [Альтернативные версии](#alternativeversions)\n    * [Redis](#redisalternativeversions)\n    * [PostgreSQL](#postgresqlalternativeversions)\n    * [MySQL](#mysqlalternativeversions)\n    * [PHP и Cron](#phpandcronalternativeversions)\n* [Сборка или скачивание Docker образов](#dockerimages)\n  * [Базовые образы](#basicimages)\n  * [Битрикс образы](#bitriximages)\n  * [Модули для Nginx](#nginxmodulesimage)\n\n\u003ca id=\"docker\"\u003e\u003c/a\u003e\n# Docker и Docker Compose\n\nДля запуска проекта понадобится `Docker`. Для оркестровки и управления `Docker Compose`.\n\nСпособ развертывания зависит от вашей операционной системы, используемой на хосте.\n\nВозможны варианты:\n- рабочая станция, персональный компьютер, ноутбук и т.д. с рабочим столом и графической средой, он же desktop\n- сервер, без графической среды, но с консолью или удаленным доступом, он же server\n\nДля взаимодействия с `Docker` в графическом режиме будем использовать продукт [Docker Desktop](https://docs.docker.com/desktop/), который возможно запустить на ОС `Windows`, `Linux`, `MacOS`.\n\nОзнакомьтесь с документацией и разверните `Docker` в зависимости от используемой вами ОС:\n- `Docker Desktop on Windows`: https://docs.docker.com/desktop/setup/install/windows-install/\n- `Docker Desktop on Linux`: https://docs.docker.com/desktop/setup/install/linux/\n- `Docker Desktop on Mac`: https://docs.docker.com/desktop/setup/install/mac-install/\n\nДля взаимодействия с `Docker` в режиме командной строки (без графической среды) будем использовать продукт [Docker Engine](https://docs.docker.com/engine/), который возможно запустить на ОС `Linux`.\n\nОзнакомьтесь с документацией и разверните `Docker Engine` в зависимости от используемой вами ОС `Linux`:\n- `Docker Engine`: https://docs.docker.com/engine/install/\n\nВ современных версиях продуктов `Docker` обычно в их состав уже включен `Docker Compose`.\n\nОзнакомьтесь с документацией и разверните `Docker Compose`, если это требуется отдельно:\n- `Docker Compose`: https://docs.docker.com/compose/\n\n\u003ca id=\"databasespasswords\"\u003e\u003c/a\u003e\n# Пароли к базам данных MySQL и PostgreSQL\n\n\u003e [!CAUTION]\n\u003e Внимание! Перед первым запуском обязательно придумайте или сгенерируйте ваши уникальные пароли суперпользователей баз данных `MySQL` и `PostgreSQL`.\n\nДля этого используем образ `Alpine Linux`:\n```bash\ndocker pull alpine:3.21\n```\n\nГенерируем уникальный пароль для суперпользователя `root` базы данных `MySQL` с помощью команды:\n```bash\ndocker 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 '^' \u0026\u0026 echo ''\"\n```\n\nГенерируем уникальный пароль для суперпользователя `postgres` базы данных `PostgreSQL` с помощью команды:\n```bash\ndocker 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 '^' \u0026\u0026 echo ''\"\n```\n\nШаблон пароля для суперпользователя `root` базы данных `MySQL` (`CHANGE_MYSQL_ROOT_PASSWORD_HERE`) и шаблон пароля для суперпользователя `postgres` базы данных `PostgreSQL` (`CHANGE_POSTGRESQL_POSTGRES_PASSWORD_HERE`) хранятся в файле `.env_sql` в виде:\n```bash\nMYSQL_ROOT_PASSWORD=\"CHANGE_MYSQL_ROOT_PASSWORD_HERE\"\nPOSTGRES_PASSWORD=\"CHANGE_POSTGRESQL_POSTGRES_PASSWORD_HERE\"\n```\n\nОбязательно измените значения в файле `.env_sql`, заменив шаблоны `CHANGE_MYSQL_ROOT_PASSWORD_HERE` и `CHANGE_POSTGRESQL_POSTGRES_PASSWORD_HERE` на ваши значения.\n\n\u003ca id=\"pushserversecretkey\"\u003e\u003c/a\u003e\n# Секретный ключ для Push-сервера\n\n\u003e [!CAUTION]\n\u003e Внимание! Перед первым запуском обязательно придумайте или сгенерируйте ваш уникальный секретный ключ для Push-сервера.\n\nДля этого используем образ `Alpine Linux`:\n```bash\ndocker pull alpine:3.21\n```\n\nГенерируем уникальный секретный ключ с помощью команды:\n```bash\ndocker 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) \u0026\u0026 echo ''\"\n```\n\nШаблон секретного ключа (`CHANGE_SECURITY_KEY_HERE`) для подписи соединения между клиентом и Push-сервером хранится в файле `.env_push` в виде:\n```bash\nPUSH_SECURITY_KEY=CHANGE_SECURITY_KEY_HERE\n```\nОбязательно измените значение вашего уникального секретного ключа в файле `.env_push`, заменив шаблон `CHANGE_SECURITY_KEY_HERE` на ваше значение.\n\n\u003ca id=\"timezone\"\u003e\u003c/a\u003e\n# Часовой пояс (timezone)\n\nЗначение часового пояса (timezone), используемой контейнерами, хранится в файле `.env`.\n\nЗначение по умолчанию задано как:\n```bash\nTZ=Europe/Moscow\n```\n\nИсключение составляет контейнер с `php`, значение часового пояса (timezone) которого продублировано в отдельном файле `confs/phpXXX/etc/php/conf.d/timezone.ini` как:\n```bash\ndate.timezone = Europe/Moscow\n```\n\nГде `XXX` в пути к файлу `timezone.ini` - версия `php`. По умолчанию равна `82`, возможные [альтернативные варианты](#phpandcronalternativeversions) `83` и `84`.\n\nПри необходимости смените значение в обоих файлах до создания и запуска контейнеров проекта. Например, для версии php `8.2.x` и часового пояса `Europe/Kaliningrad` измените значение:\n\n- в файле `.env`:\n```bash\nTZ=Europe/Kaliningrad\n```\n\n- в файле `confs/php82/etc/php/conf.d/timezone.ini`:\n```bash\ndate.timezone = Europe/Kaliningrad\n```\n\n\u003ca id=\"management\"\u003e\u003c/a\u003e\n# Управление\n\nУправление (или оркестровка) набором контейнеров или одним из контейнеров осуществляется через `Docker Compose`.\n\nПереходим в каталог проекта `cd env-docker` и выполняем команды ниже.\n\nЗапустить все контейнеры и оставить их работать в фоне:\n```bash\ndocker compose up -d\n```\n\nОтобразить список контейнеров и их статус:\n```bash\ndocker compose ps\n```\n\nПоказать логи сразу всех контейнеров:\n```bash\ndocker compose logs\n```\n\nПоказать лог определенного сервиса-контейнера:\n```bash\ndocker compose logs redis\n```\n\nПерезапустить определенный контейнер:\n```bash\ndocker compose restart nginx\n```\n\nПерезапустить все контейнеры:\n```bash\ndocker compose restart\n```\n\nОстановить все контейнеры:\n```bash\ndocker compose stop\n```\n\nОстановить все контейнеры, удалить их:\n```bash\ndocker compose down\n```\n\nОстановить все контейнеры, удалить их и удалить все тома этих контейнеров:\n```bash\ndocker compose down -v\n```\n\nЗайти в sh-консоль определенного контейнера, например nginx:\n```bash\ndocker compose exec nginx sh\n```\n\nПодробней можно прочитать в документации docker compose: https://docs.docker.com/reference/cli/docker/compose/\n\n\u003ca id=\"iporurls\"\u003e\u003c/a\u003e\n# Адресация\n\nОбращение к запущенному сайту может быть:\n1) через `localhost` или `127.0.0.1`\n2) по IP вашей локальной сети вида `10.X.X.X`, `192.X.X.X`, `172.X.X.X` и т.д.\n3) по имени локального домена в вашей локальной сети вида `dev.bx`\n4) по IP глобальной сети интернет вида `85.86.87.88`\n5) по имени настоящего домена вида `devexample.com`\n\nВыбор зависит от вашей конфигурации.\n\nУчтите, что при использовании `https` нужен SSL-сертификат, который можно сгенерировать или получить на доменное имя, но не на IP адрес.\n\n\u003ca id=\"ports\"\u003e\u003c/a\u003e\n# Порты\n\nЗапущенный сайт для своей работы по умолчанию использует порты:\n- `8588` для http\n- `8589` для https\n\nВ случае, если вы используете фаервол, необходимо открыть порты. Пример команд для разных ОС:\n\n- Debian/Ubuntu и т.д.:\n```bash\nufw allow 8588 \u0026\u0026 ufw allow 8589\n```\n\n- RHEL/CentOS/AlmaLinux/RockyLinux/OracleLinux/ArchLinux и т.д.:\n```bash\nfirewall-cmd --add-port=8588/tcp --permanent \u0026\u0026 firewall-cmd --add-port=8589/tcp --permanent \u0026\u0026 firewall-cmd --reload\n```\n\nДля других ОС смотрите документацию по работе с фаерволом.\n\n\u003ca id=\"siteaccess\"\u003e\u003c/a\u003e\n# Доступ к сайту\n\nИтак, согласно разделам [Адресация](#iporurls) и [Порты](#ports) выше, к сайту можно обратиться по `http` или `https` следующим образом:\n\n- через localhost:\n  - http://127.0.0.1:8588/\n  - https://127.0.0.1:8589/\n\n- по локальному IP адресу:\n  - http://10.0.1.119:8588/\n  - https://10.0.1.119:8589/\n\n- используя домен:\n  - http://dev.bx:8588/\n  - https://dev.bx:8589/\n\n\u003e [!IMPORTANT]\n\u003e \u003cb\u003eНЕ\u003c/b\u003e используйте `127.0.0.1` или `localhost` при работе с сайтом на локальной машине. Используйте IP адрес или домен, пример: `10.0.1.119` или `dev.bx`.\n\nВ примерах ниже будет использоваться локальный IP адрес `10.0.1.119` или локальный домен `dev.bx`.\n\n\u003ca id=\"bitrixservertestphp\"\u003e\u003c/a\u003e\n# Базовая проверка конфигурации окружения\n\nПосле запуска сайта необходимо провести базовую проверку конфигурации веб-сервера. Она выполняется с помощью скрипта `bitrix_server_test.php`.\n\nИспользуем способ, который работает одинаково на всех ОС.\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:\n```bash\ndocker compose exec --user=bitrix php sh\n```\n\nПереходим в корневой каталог сайта и скачиваем скрипт `bitrix_server_test.php`:\n```bash\ncd /opt/www/\nwget https://dev.1c-bitrix.ru/download/scripts/bitrix_server_test.php\n```\n\nВ браузере переходим по ссылке вида:\n```bash\nhttp://10.0.1.119:8588/bitrix_server_test.php\n```\n\n\u003e [!CAUTION]\n\u003e Внимание! После проверки конфигурации окружения скрипт `bitrix_server_test.php` нужно удалить.\n\nДля Docker Engine на Linux расположение каталога сайта на хосте зависит от режима работы docker-а:\n- rootfull:\n```bash\n/var/lib/docker/volumes/dev_www_data/_data/\n```\n\n- rootless:\n```bash\n/home/[USERNAME]/.local/share/docker/volumes/dev_www_data/_data\n```\n\n\u003ca id=\"bitrixsetupphprestorephp\"\u003e\u003c/a\u003e\n# BitrixSetup / Restore\n\nДля установки продуктов компании 1С-Битрикс можно использовать скрипт `bitrixsetup.php`: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=135\u0026LESSON_ID=4523\u0026LESSON_PATH=10495.4495.4523\n\nДля восстановления из резервной копии скрипт `restore.php`: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=135\u0026CHAPTER_ID=02014\u0026LESSON_PATH=10495.4496.2014\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:\n```bash\ndocker compose exec --user=bitrix php sh\n```\n\nПереходим в корневой каталог сайта и скачиваем скрипт(ы):\n```bash\ncd /opt/www/\nwget https://www.1c-bitrix.ru/download/scripts/bitrixsetup.php\nwget https://www.1c-bitrix.ru/download/scripts/restore.php\n```\n\nВ браузере переходим по ссылке вида:\n- для установки:\n```bash\nhttp://10.0.1.119:8588/bitrixsetup.php\n```\n\n- для восстановления:\n```bash\nhttp://10.0.1.119:8588/restore.php\n```\n\nУстанавливаем продукт или восстанавливаем сайт, зависит от вашего выбора.\n\n\u003ca id=\"installdistro\"\u003e\u003c/a\u003e\n## Установка дистрибутивов\n\nИспользуем скрипт `bitrixsetup.php`, скачиваем дистрибутив продукта компании 1С-Битрикс, демо или лицензионную версию.\n\nРедакция и тип базы зависит от вашего выбора.\n\nПосле переходим на сайт, используя URL:\n```bash\nhttp://10.0.1.119:8588/\n```\n\nПроходим мастер установки дистрибутива:\n- `1С-Битрикс: Управление сайтом` - https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=135\u0026CHAPTER_ID=04522\u0026LESSON_PATH=10495.4495.4522\n- `1С-Битрикс24` - https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=135\u0026CHAPTER_ID=04522\u0026LESSON_PATH=10495.4495.4522\n\nНа шаге создания базы вводим параметры подключения к ней:\n\n- для `MySQL` версии:\n  - Имя хоста (алиас) - `mysql`\n  - Имя суперпользователя - `root`\n  - Пароль суперпользователя - был создан вами в главе [Пароли к базам данных MySQL и PostgreSQL](#databasespasswords), хранится в файле `.env_sql`\n\n- для `PostgreSQL` версии:\n  - Имя хоста (алиас) - `postgres`\n  - Имя суперпользователя - `postgres`\n  - Пароль суперпользователя - был создан вами в главе [Пароли к базам данных MySQL и PostgreSQL](#databasespasswords), хранится в файле `.env_sql`\n\n\u003ca id=\"restorebackup\"\u003e\u003c/a\u003e\n## Восстановление из резервной копии\n\nИспользуем скрипт `restore.php`, восстанавливаем сайт из резервной копии.\n\nЕсли архив сайта был размещен на сайте (в облаке) клиента, то необходимо выбрать вариант `Скачать резервную копию с другого сайта` и указать путь к архиву.\n\nЕсли архив сайта был размещен в облаке 1С-Битрикс, то необходимо выбрать вариант `Развернуть резервную копию из облака \"1С-Битрикс\"` и указать активный лицензионный ключ.\n\nТакже архив сайта можно `Загрузить с локального диска`, выбрав нужные файлы.\n\nЕсли `Архив загружен в корневую папку сервера`, то появится пункт, который позволит распаковать файлы в корень сайта соответственно.\n\nПосле скачивания архива и завершения распаковки файлов необходимо будет указать настройки соединения с базой данных, если при создании резервной копии был создан дамп базы данных.\n\nНажимаем кнопку `Восстановить` и ждем завершения работы сценария.\n\nПосле успешного восстановления нажимаем кнопку `Удалить локальную копию и служебные скрипты`.\n\n\u003ca id=\"licenceandupdates\"\u003e\u003c/a\u003e\n# Лицензия, обновления платформы и решений\n\nПеред дальнейшим использованием продуктов 1С-Битрикс рекомендуется обновить их до последних версий.\n\nДля этого вам понадобится лицензионный ключ для продукта выбранной редакции.\n\nДальше нужно зайти в настройки `Главный модуль (main)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=main`), на вкладке `Система обновлений` заполнить поле `Лицензионный ключ`.\n\nПерейти на страницу `Обновление платформы` (`/bitrix/admin/update_system.php?lang=ru`), обновить систему обновлений, принять новые лицензионные соглашения (если это потребуется) и установить все доступные обновления.\n\nРекомендуется перейти на страницу `Обновление решений` (`/bitrix/admin/update_system_partner.php?lang=ru`) и установить обновления сторонних решений.\n\n\u003ca id=\"modulessettings\"\u003e\u003c/a\u003e\n# Настройки модулей\n\nПосле установки дистрибутива или восстановления сайта из бекапа необходимо настроить модули этого сайта.\n\nНастроим `Главный модуль (main)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=main`):\n\n- на вкладке `Настройки`:\n  - указываем `Название сайта`\n  - задаем `URL сайта (без http://, например www.mysite.com)` -  10.0.1.119:8588 или 10.0.1.119:8589, dev.bx:8588 или dev.bx:8589 и т.д.\n  - отмечаем опцию `Быстрая отдача файлов через Nginx` - она сконфигурирована\n\n- на вкладке `Авторизация`:\n  - снимаем отметку у опции `Продлевать сессию при активности посетителя в окне браузера`\n\n- на вкладке `Журнал событий`:\n  - отмечаем опции записи событий в журнал событий (на выбор из множества опций)\n\n- на вкладке `Система обновлений`:\n  - заполняем поле `Лицензионный ключ`\n  - заполняем поле `Имя сервера, содержащего обновления`\n\nСохраняем настройки.\n\nДля остальных модулей производим настройки, если они нужны.\n\nОписание значений полей смотрите документации модуля.\n\n\u003ca id=\"sitechecker\"\u003e\u003c/a\u003e\n# Проверка системы\n\nДля всесторонней проверки соответствия параметров системы, на которой осуществляется функционирование сайта, минимальным и рекомендуемым техническим требованиям продукта используйте страницу `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`).\n\nДокументация:\n- https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35\u0026LESSON_ID=14020\u0026LESSON_PATH=3906.4493.4506.2024.14020\n- https://dev.1c-bitrix.ru/user_help/settings/utilities/site_checker.php\n\n\u003ca id=\"perfmonpanel\"\u003e\u003c/a\u003e\n# Тест производительности\n\nДля оценки производительности перейдите на страницу `Панель производительности` (`/bitrix/admin/perfmon_panel.php?lang=ru`).\n\nВыполните тест конфигурации. Результаты подскажут \"узкие\" места системы или ее конфигурации.\n\nДокументация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35\u0026CHAPTER_ID=03376\u0026LESSON_PATH=3906.6663.4904.3376\n\n\u003ca id=\"cron\"\u003e\u003c/a\u003e\n# Cron\n\n\u003ca id=\"agentsoncron\"\u003e\u003c/a\u003e\n## Выполнение агентов на cron\n\nДля работы cron заданий используется отдельный контейнер `cron` на базе образа `bitrix24/php`.\n\nПо умолчанию контейнер сконфигурирован на выполнение заданий модуля `Главный модуль (main)` раз в минуту, запуская это исполнение от пользователя `bitrix`:\n```bash\nphp -f /opt/www/bitrix/modules/main/tools/cron_events.php\n```\n\nЭто задание будет выполнятся только в том случае, если дистрибутив установлен.\n\nДля завершения настройки необходимо в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru\u0026path=%2F`) отредактировать файл `/bitrix/php_interface/dbconn.php`, добавить строку:\n```php\ndefine(\"BX_CRONTAB_SUPPORT\", true);\n```\n\nCохранить изменения в файле.\n\nПосле этого все агенты и отправка системных событий будут обрабатываться из-под cron, раз в 1 минуту. Настройка завершена.\n\nПроверить настройку можно на странице `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`) и на странице `Список агентов` (`/bitrix/admin/agent_list.php?lang=ru`).\n\n\u003ca id=\"owncrontasks\"\u003e\u003c/a\u003e\n## Кастомные cron задания\n\nCron задания хранятся в папке `/etc/periodic/` контейнера `cron`.\n\nВнутри каталога размещены подкаталоги, указывающие на периодичность запуска заданий:\n```bash\n1min\n15min\nhourly\ndaily\nweekly\nmonthly\n```\n\nДля примера создадим задание, которое выполняется раз в сутки - создание резервной копии сайта с базой MySQL - бекап.\n\nЗаходим в sh-консоль контейнера `cron` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root cron sh\n```\n\nВ каталоге `/etc/periodic/daily/` создадим файл `backup` без указания расширения файла.\n```bash\napk add mc\nmcedit /etc/periodic/daily/backup\n```\n\nЗаполним содержимое файла:\n```bash\n#!/bin/sh\n#\nsu - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/backup.php; \u003e /dev/null 2\u003e\u00261'\n#\n```\n\nСохраняем файл.\nДелаем его исполняемым:\n```bash\nchmod -R a+x /etc/periodic/daily\n```\n\nСоздаем файл `/etc/crontabs/cron.update`, чтобы `crond` демон перезапустил задания крона:\n```bash\ntouch /etc/crontabs/cron.update\n```\n\nИтог: раз в день (в 2ч ночи) контейнер запустит `backup` задание и выполнит резервное копирование.\n\nДетали создания резервной копии будут доступны в логе контейнера `cron`. Пример:\n```\ncrond: USER root pid 122 cmd run-parts /etc/periodic/15min\n0.19 sec\tBackup started to file: /opt/www/bitrix/backup/20250423_113000_full_vnw0wuf76rq6e5je.tar\n0.19 sec\tDumping database\n14.18 sec\tArchiving database dump\n14.2 sec\tArchiving files\n167.01 sec\tFinished.\nData size: 2569.42 M\nArchive size: 2569.42 M\nTime: 166.76 sec\n```\n\nДокументация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35\u0026LESSON_ID=4464\u0026LESSON_PATH=3906.4833.4464\n\n\u003ca id=\"bxtemporaryfilesdirectory\"\u003e\u003c/a\u003e\n# Хранение временных файлов вне корневой директории сайта\n\nПо умолчанию конфигурация `nginx` предварительно подготовлена таким образом, чтобы временные файлы хранились вне пределов корневой директории сайта, так как это существенно повышает защищенность от известных атак.\n\nДля завершения настройки и усиления безопасности, необходимо в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru\u0026path=%2F`) отредактировать файл `/bitrix/php_interface/dbconn.php`, добавить строку:\n```php\ndefine(\"BX_TEMPORARY_FILES_DIRECTORY\", \"/opt/.bx_temp\");\n```\n\nCохранить.\n\nПроверить настройку можно на странице `Сканер безопасности` (`/bitrix/admin/security_scanner.php?lang=ru`) модуля `Проактивной защиты (security)`.\n\n\u003ca id=\"pushpull\"\u003e\u003c/a\u003e\n# Push \u0026 pull\n\n\u003ca id=\"pushserver\"\u003e\u003c/a\u003e\n## Push-сервер\n\nДля работы Push-сервера будет запущено два контейнера: один для режима `pub`, второй для режима `sub`. Оба используют один образ `bitrix24/push`.\n\nПараметры переменных сред контейнеров хранятся в файлах `.env_push_pub` и `.env_push_sub`.\n\nCекретный ключ для подписи соединения между клиентом и push-сервером хранится в файле `.env_push` и был создан вами в главе [Секретный ключ для Push-сервера](#pushserversecretkey).\n\nВозвращаемся к главам [Адресация](#iporurls) и [Порты](#ports) этого документа. Определяемся по какой схеме работает сайт. Например:\n- используется локальный IP вида `10.0.1.119`\n- порт для http `8588`\n- порт для https `8589`\n\nИтого получается:\n- для http: `10.0.1.119:8588`\n- для https: `10.0.1.119:8589`\n\nЗапоминаем эти значения.\n\nВ административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru\u0026path=%2F`) редактируем файл `/bitrix/.settings.php`:\n- добавляем блок настроек Push-сервера\n- меняем значения опции `signature_key`, указываем ваш сгенерированный уникальный секретный ключ вместо шаблона `CHANGE_SECURITY_KEY_HERE`\n- меняем значения для `http` и `https` на ваши\n- пример:\n```php\n  'pull' =\u003e array(\n    'value' =\u003e array(\n      'path_to_listener' =\u003e 'http://10.0.1.119:8588/bitrix/sub/',\n      'path_to_listener_secure' =\u003e 'https://10.0.1.119:8589/bitrix/sub/',\n      'path_to_modern_listener' =\u003e 'http://10.0.1.119:8588/bitrix/sub/',\n      'path_to_modern_listener_secure' =\u003e 'https://10.0.1.119:8589/bitrix/sub/',\n      'path_to_mobile_listener' =\u003e 'http://10.0.1.119:8893/bitrix/sub/',\n      'path_to_mobile_listener_secure' =\u003e 'https://10.0.1.119:8894/bitrix/sub/',\n      'path_to_websocket' =\u003e 'ws://10.0.1.119:8588/bitrix/subws/',\n      'path_to_websocket_secure' =\u003e 'wss://10.0.1.119:8589/bitrix/subws/',\n      'path_to_publish' =\u003e 'http://10.0.1.119:8588/bitrix/pub/',\n      'path_to_publish_web' =\u003e 'http://10.0.1.119:8588/bitrix/rest/',\n      'path_to_publish_web_secure' =\u003e 'https://10.0.1.119:8589/bitrix/rest/',\n      'path_to_json_rpc' =\u003e 'http://10.0.1.119:8588/bitrix/api/',\n      'nginx_version' =\u003e '4',\n      'nginx_command_per_hit' =\u003e '100',\n      'nginx' =\u003e 'Y',\n      'nginx_headers' =\u003e 'N',\n      'push' =\u003e 'Y',\n      'websocket' =\u003e 'Y',\n      'signature_key' =\u003e 'CHANGE_SECURITY_KEY_HERE',\n      'signature_algo' =\u003e 'sha1',\n      'guest' =\u003e 'N',\n    ),\n  ),\n```\n\nСохраняем файл.\n\nДля продукта Битрикс24 проверить настройку Push-сервера можно на странице `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`), используя вкладку `Работа портала`.\n\n\u003ca id=\"sphinx\"\u003e\u003c/a\u003e\n# Sphinx\n\n\u003ca id=\"sphinxsearch\"\u003e\u003c/a\u003e\n## Поиск с помощью Sphinx\n\nДля работы полнотекстового поиска, используя `Sphinx`, будет запущен один контейнер на базе образа `bitrix24/sphinx`.\n\nДля запуска и настройки:\n- переходим в настройки модуля `Поиск` (`/bitrix/admin/settings.php?lang=ru\u0026mid=search`)\n- на вкладке `Морфология`:\n  - выбираем `Полнотекстовый поиск с помощью` - `Sphinx`\n  - заполняем строку `Строка подключения для управления индексом (протокол MySql)` - `sphinx:9306`\n  - поле `Идентификатор индекса` не меняем - `bitrix`\n\nСохраняем настройки модуля.\n\nНа странице `Переиндексация сайта` (`/bitrix/admin/search_reindex.php?lang=ru`) снимаем галку `Переиндексировать только измененные` и выполняем полную переиндексацию сайта.\n\nНастройка завершена.\n\nДля продукта Битрикс24 проверить работу можно в разделе `/search/` сайта.\n\nДокументация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35\u0026CHAPTER_ID=04507\u0026LESSON_PATH=3906.4507\n\n\u003e [!IMPORTANT]\n\u003e Для продуктов, использующих базу данных PostgreSQL, нужно обновление модуля `search` версии `25.0.0` и выше.\n\n\u003ca id=\"email\"\u003e\u003c/a\u003e\n# Почта\n\n\u003ca id=\"msmtpmta\"\u003e\u003c/a\u003e\n## Отправка почты с помощью msmtp\n\nОбраз `bitrix24/php` в своем составе содержит mta `msmtp`, предназначенный для отправки писем.\n\nНастройки msmtp для аккаунта `default` хранятся в файле `/opt/msmtp/.msmtprc`.\n\nЗначения настроек msmtp зависят от smtp-сервера, с которым он будет взаимодействовать при работе.\n\nНапример, локальный почтовый сервер, отвечает на порту `25`, расположен на хосте `mail.server.local`, не использует в своей работе `tls`. В файле `/opt/msmtp/.msmtprc` настройки будут выглядеть:\n```bash\n...\nhost mail.server.local\nport 25\nfrom info@mail.server.local\nuser info@mail.server.local\npassword password_example\n...\ntls off\ntls_starttls off\ntls_certcheck off\n...\n```\n\nДругой пример: почтовые сервисы вида `Gmail`, `Yahoo`, `Yandex`, `Rambler` и т.д.\n\nНастройки почтовых сервисов приведены в курсе: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=37\u0026LESSON_ID=12265\n\nДля `Gmail`, который отвечает на порту `587`, расположен на хосте `smtp.gmail.com`, использует в своей работе `tls`. В файле `/opt/msmtp/.msmtprc` полный список настроек выглядит так:\n\n```bash\n# smtp account configuration for default\naccount default\nlogfile /proc/self/fd/2\nhost smtp.gmail.com\nport 587\nfrom [LOGIN]@gmail.com\nuser [LOGIN]@gmail.com\npassword [APP_PASSWORD]\nauth login\naliases /etc/aliases\nkeepbcc off\ntls on\ntls_starttls on\ntls_certcheck on\ntls_trust_file /etc/ssl/certs/ca-certificates.crt\nprotocol smtp\n```\n\nНастроим отправку писем через `Gmail`.\n\nВ блоке настроек выше меняем `APP_PASSWORD` на пароль приложения, `LOGIN` на ваш логин в почте Google.\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root php sh\n```\n\nУстанавливаем `mc` и выходим:\n```bash\napk add mc\nexit\n```\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:\n```bash\ndocker compose exec --user=bitrix php sh\n```\n\nРедактируем файл `/opt/msmtp/.msmtprc`, указываем приготовленный блок настроек:\n```bash\nmcedit /opt/msmtp/.msmtprc\n```\n\nСохраняем файл и выходим из контейнера `php`.\n\nПосле в административной части продукта необходимо настроить модули, указав email отправителя (или От кого):\n- `Главный модуль (main)` (`bitrix/admin/settings.php?lang=ru\u0026mid=main`)\n- `Email-маркетинг (sender)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=sender`)\n- `Интернет-магазин (sale)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=sale`)\n- `Подписка, рассылки (subscribe)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=subscribe`)\n- `Форум (forum)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=forum`)\n\nПроверить отправку почты можно на странице `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`), запустив `Тестирование конфигурации`.\n\nРезультаты будут отображены в блоке отчета `Дополнительные функции`:\n```\nОтправка почты - Отправлено. Время отправки: 1.36 сек.\nОтправка почтового сообщения больше 64Кб - Отправлено. Время отправки: 1.55 сек.\n```\n\nДетали отправки (или возникающие ошибки) будут доступны в логе контейнера `php`. Пример для двух писем из тестирования конфигурации:\n```\nApr 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\nApr 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\n```\n\n\u003ca id=\"emailsmtpmailer\"\u003e\u003c/a\u003e\n## Отправка почты через SMTP-сервера отправителя\n\nДля отправки почты используем возможности `Главного модуля (main)` без каких-либо дополнительных контейнеров и т.д.\n\nАктивируем возможность использования SMTP-сервера отправителя: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43\u0026LESSON_ID=23612\u0026LESSON_PATH=3913.3516.5062.2795.23612\n\nДля этого в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru\u0026path=%2F`) редактируем файл `/bitrix/.settings.php`, добавляем блок настроек:\n```php\n    'smtp' =\u003e [\n        'value' =\u003e [\n            'enabled' =\u003e true,\n            'debug' =\u003e true,\n            'log_file' =\u003e $_SERVER[\"DOCUMENT_ROOT\"].\"/bitrix/modules/smtp_mailer.log\",\n        ],\n        'readonly' =\u003e false,\n    ],\n```\n\nПосле переходим на страницу `Добавление SMTP подключения` (`/bitrix/admin/smtp_edit.php?lang=ru`).\n\nЗаполняем поля на странице, указываем параметры smtp и сохраняем настройки.\n\nПосле необходимо настроить модули, указав email отправителя (или От кого):\n- `Главный модуль (main)` (`bitrix/admin/settings.php?lang=ru\u0026mid=main`)\n- `Email-маркетинг (sender)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=sender`)\n- `Интернет-магазин (sale)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=sale`)\n- `Подписка, рассылки (subscribe)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=subscribe`)\n- `Форум (forum)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=forum`)\n\nНастройки почтовых сервисов: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=37\u0026LESSON_ID=12265\n\nПроверить настройки можно отправив письмо самому себе. Для этого нужно отредактировать параметры пользователя, указав `E-Mail` и отметить опцию `Оповестить пользователя`.\n\nЛог отправки будет в файле `/bitrix/modules/smtp_mailer.log`.\n\n\u003e [!NOTE]\n\u003e Проверка системы при тестировании параметров не использует SMTP-сервера отправителя. Два теста почты будут красными. Можно это проигнорировать.\n\n\u003ca id=\"emaildebuglog\"\u003e\u003c/a\u003e\n## Логирование отправки почты в файл\n\nЕсли отправка почты не работает, можно включить логирование процесса отправки в файл для диагностики проблемы.\n\nДля этого в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru\u0026path=%2F`) редактируем файл `/bitrix/php_interface/dbconn.php`, добавляем строку:\n```php\ndefine(\"LOG_FILENAME\", $_SERVER[\"DOCUMENT_ROOT\"].\"/bitrix/modules/mail_log.txt\");\n```\n\nСоздаем файл `/bitrix/php_interface/init.php` если его нет, добавляем код функции `custom_mail`:\n```php\nfunction custom_mail($to, $subject, $message, $additional_headers='', $additional_parameters='')\n{\n    AddMessage2Log(\n        'To: '.$to.PHP_EOL.\n        'Subject: '.$subject.PHP_EOL.\n        'Message: '.$message.PHP_EOL.\n        'Headers: '.$additional_headers.PHP_EOL.\n        'Params: '.$additional_parameters.PHP_EOL\n    );\n    if ($additional_parameters!='')\n    {\n        return @mail($to, $subject, $message, $additional_headers, $additional_parameters);\n    }\n    else\n    {\n        return @mail($to, $subject, $message, $additional_headers);\n    }\n}\n```\n\nЛог отправки будет в файле `/bitrix/modules/mail_log.txt`.\n\nДокументация: https://dev.1c-bitrix.ru/api_help/main/functions/other/bxmail.php\n\n\u003ca id=\"php\"\u003e\u003c/a\u003e\n# PHP\n\n\u003ca id=\"phpcomposer\"\u003e\u003c/a\u003e\n## PHP Composer\n\nВ контейнере с `php` по умолчанию доступен [PHP Composer](https://getcomposer.org/).\n\nЧтобы его использовать, заходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:\n```bash\ndocker compose exec --user=bitrix php sh\n```\n\nПроверяем его версию командой:\n```bash\ncomposer --version\n```\n\nУстанавливаем зависимости:\n```bash\ncd /opt/www/bitrix/\nCOMPOSER=composer-bx.json composer install\n```\n\nПосле запускаем Bitrix CLI:\n```bash\nphp bitrix.php -h\n```\n\nПолный набор команд и параметров доступен в документации: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43\u0026LESSON_ID=11685\u0026LESSON_PATH=3913.3516.4776.2483.11685\n\n\u003ca id=\"phpbrowsercapabilities\"\u003e\u003c/a\u003e\n## PHP Browser Capabilities\n\nВозможно, пригодится настроить, если нужна `История входов`: https://helpdesk.bitrix24.ru/open/16615982/\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root php sh\n```\n\nУстанавливаем `curl`, подключаем ini-файл в настройках PHP, выходим:\n```bash\napk add curl\necho 'browscap = /opt/browscap/php_browscap.ini' \u003e /usr/local/etc/php/conf.d/browscap.ini\nexit\n```\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:\n```bash\ndocker compose exec --user=bitrix php sh\n```\n\nВ каталог `/opt/browscap` загрузим `browscap.ini`. Выполняем:\n```bash\ncd /opt/browscap\ncurl http://browscap.org/stream?q=PHP_BrowsCapINI -o php_browscap.ini\nexit\n```\n\nПерезапускаем контейнеры `php` и `cron`:\n```bash\ndocker compose restart php cron\n```\n\nНа странице настроек `Главного модуля (main)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=main`) на вкладке `Журнал событий`:\n- отмечаем опцию `Сохранять историю входов с устройств пользователя` - `Да`\n- заполняем поле `Сколько дней хранить историю входов` - `365`\n\nСохраняем настройки.\n\n\u003ca id=\"phpgeoip2\"\u003e\u003c/a\u003e\n## PHP GeoIP2\n\nВозможно, пригодится настроить, если нужно отслеживать геопозицию устройства для `Истории входов`: https://helpdesk.bitrix24.ru/open/16615982/\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:\n```bash\ndocker compose exec --user=bitrix php sh\n```\n\nПереходим в каталог `/opt/geoip2`:\n```bash\ncd /opt/geoip2\n```\n\nРазмещаем в нем файлы в формате mmdb, список:\n```bash\nGeoLite2-ASN.mmdb\nGeoLite2-City.mmdb\nGeoLite2-Country.mmdb\n```\n\nНа странице `Список обработчиков геолокации` (`/bitrix/admin/geoip_handlers_list.php?lang=ru`) редактируем обработчик `GeoIP2` (`/bitrix/admin/geoip_handler_edit.php?lang=ru\u0026ID=1\u0026CLASS_NAME=%5CBitrix%5CMain%5CService%5CGeoIp%5CGeoIP2`).\n\nНа вкладке `Дополнительные`:\n- выбираем `Тип базы данных` - `GeoIP2/GeoLite2 City`\n- заполняем `Абсолютный путь к файлу базы данных (*.mmdb)` - `/opt/geoip2/GeoLite2-City.mmdb`\n\nили\n\n- выбираем `Тип базы данных` - `GeoIP2/GeoLite2 Country`\n- заполняем `Абсолютный путь к файлу базы данных (*.mmdb)` - `/opt/geoip2/GeoLite2-Country.mmdb`\n\nСохраняем настройки.\n\nНа странице настроек `Главного модуля (main)` (`/bitrix/admin/settings.php?lang=ru\u0026mid=main`) на вкладке `Журнал событий`:\n- отмечаем опцию `Собирать IP-геоданные для истории входов` - `Да`\n\nСохраняем настройки.\n\n\u003ca id=\"phpextensions\"\u003e\u003c/a\u003e\n## PHP расширения (extensions)\n\nОбраз `bitrix24/php` в своем составе содержит следующие PHP расширения (extensions):\n```bash\namqp\napcu\nbz2\ncalendar\nexif\ngd\ngettext\nigbinary\nimagick\nintl\nldap\nmcrypt\nmemcache\nmemcached\nmsgpack\nmysqli\nopcache\npdo_mysql\npdo_pgsql\npgsql\npspell\nredis\nshmop\nsockets\nsodium\nssh2\nsysvmsg\nsysvsem\nsysvshm\nxdebug\nxhprof\nxml\nxmlwriter\nxsl\nzip\n```\n\nБольшинство из них активны по умолчанию.\n\nЧтобы активировать PHP расширение:\n\n- заходим в sh-консоль контейнера `php` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root php sh\n```\n\n- находим файл `/usr/local/etc/php/conf.d/docker-php-ext-***.ini`, где `***` название расширения, пример для `imagick`:\n```bash\napk add mc\nmcedit /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini\n```\n\n- внутри файла меняем строку активируем подключение: `extension=***.so`, где `***` название расширения:\n```bash\nextension=imagick.so\n```\n\n- сохраняем изменения и выходим\n\n- перезапускаем контейнеры `php` и `cron`:\n```bash\ndocker compose restart php cron\n```\n\nЧтобы  деактивировать PHP расширение:\n\n- заходим в sh-консоль контейнера `php` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root php sh\n```\n\n- находим файл `/usr/local/etc/php/conf.d/docker-php-ext-***.ini`, где `***` название расширения, пример для `imagick`:\n```bash\napk add mc\nmcedit /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini\n```\n\n- внутри файла меняем строку деактивируем подключение: `; extension=***.so`, где `***` название расширения:\n```bash\n; extension=imagick.so\n```\n\n- сохраняем изменения и выходим\n- перезапускаем контейнеры `php` и `cron`:\n```bash\ndocker compose restart php cron\n```\n\n\u003ca id=\"phpimagickimageengine\"\u003e\u003c/a\u003e\n## PHP Imagick Engine для изображений\n\nЧтобы работать с изображениями с помощью PHP расширения `Imagick` (а не `GD`), активируем библиотеку для работы с изображениями на базе `ImagickImageEngine`.\n\nУбедимся, что в файле `/usr/local/etc/php/conf.d/docker-php-ext-imagick.ini` активировано подключение расширения `imagick`. Как это сделать, описано в главе PHP [Расширения (extensions)](#phpextensions).\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `bitrix`:\n```bash\ndocker compose exec --user=bitrix php sh\n```\n\nВыполняем команду:\n```bash\n\\cp /usr/local/etc/image.png /opt/www/bitrix/images/\n```\n\nВ административной части продукта:\n- на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru\u0026path=%2F`) редактируем файл `/bitrix/.settings.php`\n- добавляем блок настроек:\n```php\n        'services' =\u003e [\n                'value' =\u003e [\n                        'main.imageEngine' =\u003e [\n                                'className' =\u003e '\\Bitrix\\Main\\File\\Image\\Imagick',\n                                'constructorParams' =\u003e [\n                                        null,\n                                        [\n                                                'allowAnimatedImages' =\u003e true,\n                                                'maxSize' =\u003e [\n                                                        7000,\n                                                        7000\n                                                ],\n                                                'jpegLoadSize' =\u003e [\n                                                        2000,\n                                                        2000\n                                                ],\n                                                'substImage' =\u003e $_SERVER['DOCUMENT_ROOT'].'/bitrix/images/image.png',\n                                        ]\n                                ],\n                        ],\n                ],\n                'readonly' =\u003e true,\n        ],\n```\n\nСохраняем файл.\n\nДля выключения в административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru\u0026path=%2F`) отредактируем файл `/bitrix/.settings.php` и уберем блок настроек выше.\n\n\u003ca id=\"phpsecurityantivirus\"\u003e\u003c/a\u003e\n## PHP веб-антивирус\n\nВеб-антивирус включен в состав модуля `Проактивная защита (security)`, с помощью которого реализуется целый комплекс защитных мероприятий для сайта и сторонних приложений.\n\nДля детектирования вирусов, внедренных до старта буферизации вывода, добавим в контейнер `php` файл `/usr/local/etc/php/conf.d/security.ini`.\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root php sh\n```\n\nВыполняем команду:\n```bash\necho \"auto_prepend_file = /opt/www/bitrix/modules/security/tools/start.php\" \u003e /usr/local/etc/php/conf.d/security.ini\n```\n\nПерезапускаем контейнеры `php` и `cron`:\n```bash\ndocker compose restart php cron\n```\n\nНа странице `Веб-антивирус` (`/bitrix/admin/security_antivirus.php?lang=ru`) включаем его, нажимаем кнопку `Включить веб-антивирус`.\n\nДля выключения обратный порядок действий.\n\nНа странице `Веб-антивирус` (`/bitrix/admin/security_antivirus.php?lang=ru`) выключаем его, нажимаем кнопку `Выключить веб-антивирус`.\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root php sh\n```\n\nВыполняем команду:\n```bash\nrm -f /usr/local/etc/php/conf.d/security.ini\n```\n\nПерезапускаем контейнеры `php` и `cron`:\n```bash\ndocker compose restart php cron\n```\n\nДокументация:\nhttps://dev.1c-bitrix.ru/user_help/settings/security/security_antivirus.php\nhttps://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=35\u0026LESSON_ID=2674#antivirus\n\n\u003ca id=\"phprouting\"\u003e\u003c/a\u003e\n## Роутинг\n\nДля запуска новой системы роутинга нужно перенаправить обработку 404 ошибок на файл `/bitrix/routing_index.php` в конфигурации контейнера `nginx`.\n\nСделать это можно двумя способами:\n- до первого запуска проекта в файле `confs/nginx/conf.d/default.conf` репозитория\n- если сайт уже запущен - в файле `/etc/nginx/conf.d/default.conf` контейнера `nginx`\n\n\u003ca id=\"phproutingbeforestart\"\u003e\u003c/a\u003e\n### Включение роутинга до запуска сайта\n\nДо первого запуска проекта редактируем файл `confs/nginx/conf.d/default.conf`.\n\nНаходим в файле все строки содержащие `urlrewrite.php`. Добавляем `#` в начало таких строк. Ниже в строках с`routing_index.php` убираем `#`:\n```bash\n#fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;\nfastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php;\n```\n\nЗапускаем все контейнеры, оставляем их работать в фоне:\n```bash\ndocker compose up -d\n```\n\nНовая система роутинга запущена.\n\nДокументация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43\u0026CHAPTER_ID=013764\u0026LESSON_PATH=3913.3516.5062.13764\n\n\u003ca id=\"phproutingafterstart\"\u003e\u003c/a\u003e\n### Включение или отключение роутинга для запущенного сайта\n\nЗаходим в sh-консоль контейнера `nginx` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root nginx sh\n```\n\nВыполняем:\n```bash\napk add mc\nexit\n```\n\nЗаходим в sh-консоль контейнера `nginx` из-под пользователя `bitrix`:\n```bash\ndocker compose exec --user=bitrix nginx sh\n```\n\nРедактируем файл `/etc/nginx/conf.d/default.conf`:\n```bash\nmcedit /etc/nginx/conf.d/default.conf\n```\n\nДля включения роутинга находим в файле все строки содержащие `urlrewrite.php`. Добавляем `#` в начало таких строк. Ниже в строках с`routing_index.php` убираем `#`:\n```bash\n#fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;\nfastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php;\n```\n\nДля отключения роутинга находим в файле все строки содержащие `routing_index.php`. Добавляем `#` в начало таких строк. Выше в строках с`urlrewrite.php` убираем `#`:\n```bash\nfastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;\n#fastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php;\n```\n\nСохраняем файл. Выходим из консоли контейнера. Проверяем настройки `nginx`:\n```bash\ndocker compose exec --user=bitrix nginx sh -c \"nginx -t\"\n```\n\nЕсли никаких ошибок нет, перезапускаем контейнер `nginx`:\n```bash\ndocker compose restart nginx\n```\n\n\u003ca id=\"nginx\"\u003e\u003c/a\u003e\n# Nginx\n\n\u003ca id=\"nginxmodules\"\u003e\u003c/a\u003e\n## Модули для Nginx\n\nПодключение модулей Nginx производится в файле `/etc/nginx/inc/modules.conf` контейнера, содержимое которого можно найти в файле `/confs/nginx/inc/modules.conf` репозитория.\n\nПо умолчанию в контейнере `nginx`, запущенного из образа `bitrix24/nginx`, подключаются следующие модули:\n- `brotli`\n- `headers-more`\n- `zip`\n\n\u003ca id=\"nginxmoduleonoroff\"\u003e\u003c/a\u003e\n## Подключение или отключение модуля для Nginx\n\nЗаходим в sh-консоль контейнера `nginx` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root nginx sh\n```\n\nВыполняем:\n```bash\napk add mc\nexit\n```\n\nЗаходим в sh-консоль контейнера `nginx` из-под пользователя `bitrix`:\n```bash\ndocker compose exec --user=bitrix nginx sh\n```\n\nРедактируем файл `/etc/nginx/inc/modules.conf`:\n```bash\nmcedit /etc/nginx/inc/modules.conf\n```\n\nДля подключения модуля приводим строку к виду `load_module \"/usr/lib/nginx/modules/***.so\";`. Пример для модуля `perl`:\n```bash\nload_module \"/usr/lib/nginx/modules/ngx_http_perl_module.so\";\n```\n\nДля отключения модуля приводим строку к виду `#load_module \"/usr/lib/nginx/modules/***.so\";`. Пример для модуля `perl`:\n```bash\n#load_module \"/usr/lib/nginx/modules/ngx_http_perl_module.so\";\n```\n\nВыходим из консоли контейнера и проверяем настройки `nginx`:\n```bash\ndocker compose exec --user=bitrix nginx sh -c \"nginx -t\"\n```\n\nЕсли никаких ошибок нет, перезапускаем контейнер `nginx`:\n```bash\ndocker compose restart nginx\n```\n\n\u003ca id=\"memcacheandredis\"\u003e\u003c/a\u003e\n# Memcache и Redis\n\n\u003ca id=\"memcache\"\u003e\u003c/a\u003e\n## Memcache\n\nКонтейнер `memcached` может быть использован для хранения кеша и для хранения данных сессий.\n\n\u003ca id=\"redis\"\u003e\u003c/a\u003e\n## Redis\n\nКонтейнер `redis` используется в связке с Push-сервером.\n\nТакже может быть использован для хранения кеша и для хранения данных сессий.\n\n\u003ca id=\"cachestorage\"\u003e\u003c/a\u003e\n## Кеширование\n\nЯдро поддерживает несколько вариантов для хранения кеша: `файлы`, `redis`, `memcache` и т.д.\n\nВ административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru\u0026path=%2F`) отредактируем файл `/bitrix/.settings.php`, добавляем блок настроек, который определит вариант хранения:\n\n- `memcache`:\n```php\n        'cache' =\u003e [\n                'value' =\u003e [\n                        'type' =\u003e [\n                                'class_name' =\u003e '\\\\Bitrix\\\\Main\\\\Data\\\\CacheEngineMemcache',\n                                'extension' =\u003e 'memcache'\n                        ],\n                        'memcache' =\u003e [\n                                'host' =\u003e 'memcached',\n                                'port' =\u003e '11211',\n                        ]\n                ],\n                'sid' =\u003e $_SERVER[\"DOCUMENT_ROOT\"].\"#01234\"\n        ],\n```\n\n- `redis`:\n```php\n        'cache' =\u003e [\n                'value' =\u003e [\n                        'type' =\u003e [\n                                'class_name' =\u003e '\\\\Bitrix\\\\Main\\\\Data\\\\CacheEngineRedis',\n                                'extension' =\u003e 'redis'\n                        ],\n                        'redis' =\u003e [\n                                'host' =\u003e 'redis',\n                                'port' =\u003e '6379',\n                        ]\n                ],\n                'sid' =\u003e $_SERVER[\"DOCUMENT_ROOT\"].\"#01234\"\n        ],\n```\n\nДокументация: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43\u0026CHAPTER_ID=02795\u0026LESSON_PATH=3913.3516.5062.2795#cache\n\n\u003ca id=\"sessionstorage\"\u003e\u003c/a\u003e\n## Хранение сессий\n\nЯдро поддерживает четыре варианта для хранения данных сессии: `файлы`, `database`, `redis`, `memcache`.\n\nВ административной части продукта на странице `Управление структурой` (`/bitrix/admin/fileman_admin.php?lang=ru\u0026path=%2F`) отредактируем файл `/bitrix/.settings.php`, добавляем блок настроек, который определит вариант хранения:\n\n- `memcache`, разделенная сессия:\n```php\n        // memcache separated\n        'session' =\u003e [\n                'value' =\u003e [\n                        'lifetime' =\u003e 14400,\n                        'mode' =\u003e 'separated',\n                        'handlers' =\u003e [\n                                'kernel' =\u003e 'encrypted_cookies',\n                                'general' =\u003e [\n                                        'type' =\u003e 'memcache',\n                                        'port' =\u003e '11211',\n                                        'host' =\u003e 'memcached',\n                                ],\n                        ],\n                ],\n        ],\n```\n\n- `redis`:\n```php\n        // redis\n        'session' =\u003e [\n                'value' =\u003e [\n                        'mode' =\u003e 'default',\n                        'handlers' =\u003e [\n                                'general' =\u003e [\n                                        'type' =\u003e 'redis',\n                                        'port' =\u003e '6379',\n                                        'host' =\u003e 'redis',\n                                ],\n                        ],\n                ],\n        ],\n```\n\n- `database`:\n```php\n        // database\n        'session' =\u003e [\n                'value' =\u003e [\n                        'mode' =\u003e 'default',\n                        'handlers' =\u003e [\n                                'general' =\u003e [\n                                        'type' =\u003e 'database',\n                                ],\n                        ],\n                ],\n        ],\n```\n\nСохраняем файл.\n\nВсе возможные варианты доступны в документации: https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43\u0026LESSON_ID=14026\n\n\u003ca id=\"clustercachestorage\"\u003e\u003c/a\u003e\n## Кеширование с помощью модуля Веб-кластер\n\nАльтернативный способ использования кеширования для продуктов `1С-Битрикс: Управление сайтом` и `1С-Битрикс24` при условии, что в редакции есть модуль `Веб-кластер` (`cluster`).\n\n\u003ca id=\"clustercachememcache\"\u003e\u003c/a\u003e\n### Memcache\n\nВ административной части продукта на странице настроек модуля `Веб-кластер` (`/bitrix/admin/settings.php?lang=ru\u0026mid=cluster`) выбираем `Использовать для хранения кеша` - `Memcache`.\n\nСохраняем настройки.\n\nВ административной части продукта на странице `Подключения к memcached` (`/bitrix/admin/cluster_memcache_list.php?lang=ru\u0026group_id=1`) добавляем новое подключение и указываем:\n- `Сервер` - `memcached`\n- `Порт` - `11211`\n- `Процент распределения нагрузки (0..100)` - `100`\n\nСохраняем подключение. В списке подключений для созданного подключения нажимаем `Начать использовать`.\n\nПроцесс отключения и удаления обратный добавлению.\n\n\u003ca id=\"clustercacheredis\"\u003e\u003c/a\u003e\n### Redis\n\nВ административной части продукта на странице настроек модуля `Веб-кластер` (`/bitrix/admin/settings.php?lang=ru\u0026mid=cluster`) выбираем `Использовать для хранения кеша` - `Redis`.\n\nСохраняем настройки.\n\nВ административной части продукта на странице `Подключения к redis` (`/bitrix/admin/cluster_redis_list.php?lang=ru\u0026group_id=1`) добавляем новое подключение и указываем:\n- `Сервер` - `redis`\n- `Порт` - `6379`\n\nСохраняем подключение. В списке подключений для созданного подключения нажимаем `Начать использовать`.\n\nПроцесс отключения и удаления обратный добавлению.\n\n\u003ca id=\"httpsssltlswss\"\u003e\u003c/a\u003e\n# HTTPS/SSL/TLS/WSS\n\n\u003ca id=\"selfsignedcerts\"\u003e\u003c/a\u003e\n## Самоподписанный сертификат\n\nСгенерировать и использовать SSL-сертификат в режиме самоподписи возможно с помощью отдельного контейнера `ssl` на базе образа `bitrix24/ssl`.\n\nДанные, отображаемые в сертификатах корневого и промежуточного центров сертификации, хранятся в файле `.env_ssl`. Строки настроек начинаются с `CA_`.\n\nПри необходимости отредактируйте файл `.env_ssl`, укажите ваши данные по примеру:\n- `Название страны`: введите двухбуквенный код вашей страны (пример, `RU`)\n- `Название штата или провинции`: введите название штата, в котором официально зарегистрирована ваша организация (пример, `Kaliningrad Region`)\n- `Название населенного пункта`: введите название населенного пункта или города, в котором находится ваша компания (пример, `Kaliningrad`)\n- `Название организации`: укажите официальное название вашей организации (пример, `Dev Corporation Ltd`)\n- `Имя организационного подразделения`: введите название подразделения в вашей организации, отвечающего за управление сертификатами (пример, `Dev Corporation Ltd Unit`)\n- `Адрес электронной почты`: пример, `info@devcorporation.ltd`\n\nДанные, отображаемые в сертификате для домена, также хранятся в файле `.env_ssl`. Строки настроек начинаются с `CERT_`.\n\nПри необходимости отредактируйте файл `.env_ssl`, укажите ваши данные по примеру:\n- `Название страны`: введите двухбуквенный код вашей страны (пример, `RU`)\n- `Название штата или провинции`: введите название штата, в котором официально зарегистрирована ваша организация (пример, `Kaliningrad Region`)\n- `Название населенного пункта`: введите название населенного пункта или города, в котором находится ваша компания (пример, `Kaliningrad`)\n- `Название организации`: укажите официальное название вашей организации (пример, `Dev Corporation Ltd`)\n- `Имя организационного подразделения`: введите название подразделения в вашей организации, отвечающего за управление сертификатами (пример, `Dev Corporation Ltd Unit`)\n- `Адрес электронной почты`: пример, `info@devcorporation.ltd`\n\n\u003e [!IMPORTANT]\n\u003e Если данные, отображаемые в сертификатах корневого и промежуточного центров сертификации, были изменены в файле `.env_ssl`, необходимо пересоздать контейнер `ssl`.\n\u003e\n\u003e Для этого выполните последовательно команды остановки, удаления, пересоздания и запуска контейнера `ssl`:\n\u003e ```bash\n\u003e docker compose stop ssl\n\u003e docker compose rm -f ssl\n\u003e docker compose up -d\n\u003e ```\n\n\u003ca id=\"selfsigneddeploys\"\u003e\u003c/a\u003e\n### Выпуск сертификатов\n\nОдной командой разово генерируем сертификаты корневого и промежуточного центров сертификации:\n```bash\ndocker compose exec --user=bitrix ssl bash -c \"~/cas.sh\"\n```\n\nВторой - сертификат и приватный ключ для домена `dev.bx`:\n```bash\ndocker compose exec --user=bitrix ssl bash -c \"~/srv.sh dev.bx\"\n```\n\nИтого в папке `/ssl/` внутри контейнера `ssl` будет набор файлов:\n- `rootCA.cert.pem` - сертификат корневого центра сертификации\n- `intermediateCA.cert.pem` - сертификат промежуточного центра сертификации, подписанный корневым сертификатом\n- `ca-chain.cert.pem` - цепочка сертификатов обоих центров сертификации\n- `dev.bx.cert.pem` - сертификат домена, подписанный промежуточным центром сертификации\n- `dev.bx.key.pem` - приватный ключ сертификата\n- `dev.bx.chain.cert.pem` - цепочка сертификатов, содержит сертификат домена и сертификат промежуточного центра сертификации\n- `dev.bx.fullchain.cert.pem` - полная цепочка всех сертификатов, содержит сертификат домена, сертификат промежуточного центра сертификации, сертификат корневого центра сертификации\n- `dhparam.pem` - секретный криптографический ключ, созданный по алгоритму Диффи-Хеллмана для обмена сессионными ключами с клиентом\n\nФайл `dhparam.pem` не создается, а поставляется для примера. Если нужно его сделать уникальным, выполните команду:\n```bash\ndocker compose exec --user=bitrix ssl bash -c \"openssl dhparam -out /ssl/dhparam.pem 4096\"\n```\n\n\u003e [!IMPORTANT]\n\u003e Создание файла dhparam.pem может занять значительное время, зависящее от производительности вашего оборудования.\n\n\u003ca id=\"selfsignedtrustforphpandnginx\"\u003e\u003c/a\u003e\n### Доверие к сертификатам центров сертификации для PHP и Nginx\n\nСертификат корневого центра сертификации (`rootCA.cert.pem`) и сертификат промежуточного центра сертификации (`intermediateCA.cert.pem`) нужно добавить в траст контейнеров `nginx` и `php`.\n\nЗаходим в sh-консоль контейнера `php` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root php sh\n```\n\nВыполняем:\n```bash\nmkdir -p /usr/local/share/ca-certificates/\nln -s /ssl/rootCA.cert.pem /usr/local/share/ca-certificates/rootCA.cert.pem\nln -s /ssl/intermediateCA.cert.pem /usr/local/share/ca-certificates/intermediateCA.cert.pem\nupdate-ca-certificates\n```\n\nЕсли локальный домен не определяется в вашей сети, нужно в файле `/etc/hosts` контейнера `php` добавить:\n```bash\napk add mc\nmcedit /etc/hosts\n10.0.1.119 dev.bx\nexit\n```\n\nЗаходим в sh-консоль контейнера `nginx` из-под пользователя `root`:\n```bash\ndocker compose exec --user=root nginx sh\n```\n\nВыполняем:\n```bash\nmkdir -p /usr/local/share/ca-certificates/\nln -s /ssl/rootCA.cert.pem /usr/local/share/ca-certificates/rootCA.cert.pem\nln -s /ssl/intermediateCA.cert.pem /usr/local/share/ca-certificates/intermediateCA.cert.pem\nupdate-ca-certificates\n```\n\n\u003ca id=\"installselfsignedcerts\"\u003e\u003c/a\u003e\n### Установка сертификатов\n\nТакже нам нужно в SSL конфигурацию `nginx` прописать новые сертификаты. Редактируем файл `/etc/nginx/ssl/ssl.conf`, меняем настройки опций `ssl_*`:\n```bash\napk add mc\nmcedit /etc/nginx/ssl/ssl.conf\n```\n\nМеняем опции на:\n```bash\nssl_certificate /ssl/dev.bx.fullchain.cert.pem;\nssl_certificate_key /ssl/dev.bx.key.pem;\nssl_trusted_certificate /ssl/ca-chain.cert.pem;\nssl_dhparam /ssl/dhparam.pem;\n```\n\nТакже скопируем файлы сертификата корневого центра сертификации (`rootCA.cert.pem`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`) в корень сайта:\n```bash\ncp /ssl/rootCA.cert.pem /opt/www/\ncp /ssl/intermediateCA.cert.pem /opt/www/\nchown bitrix:bitrix /opt/www/rootCA.cert.pem\nchown bitrix:bitrix /opt/www/intermediateCA.cert.pem\nexit\n```\n\nПроверяем настройки `nginx`:\n```bash\ndocker compose exec --user=bitrix nginx sh -c \"nginx -t\"\n```\n\nЕсли никаких ошибок нет, перезапускаем контейнер `nginx`:\n```bash\ndocker compose restart nginx\n```\n\n\u003ca id=\"importselfsignedcertstoosorbrowser\"\u003e\u003c/a\u003e\n### Импорт сертификатов в ОС или браузер\n\nНа хосте, где будем использовать браузер, скачиваем файлы центров сертификации по ссылкам:\n```bash\nhttp://dev.bx:8588/rootCA.cert.pem\nhttp://dev.bx:8588/intermediateCA.cert.pem\n```\n\nДобавляем их в траст ОС, на которой работает браузер.\n\nВсе ОС: `Windows`, `Linux`, `MacOS`\n\nОбщая часть для всех - браузер `Mozilla Firefox`. Имеет своё хранилище сертификатов центров сертификации. Работает одинаково вне зависимости от ОС.\n\nВ браузере переходим `Настройки` -\u003e `Приватность и защита` -\u003e `Защита` -\u003e `Сертификаты`.\n\nНажимаем кнопку `Просмотр сертификатов`, в окне переходим на вкладку `Центры сертификации`.\n\nНажимаем кнопку `Импортировать`:\n- первый раз выбираем файл сертификата корневого центра сертификации (`rootCA.cert.pem`)\n- второй раз выбираем файл сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`)\n\nОС: `Windows`\n\nБраузеры `Google Chrome` и `Microsoft Edge` (и другие на их базе) используют системное хранилище ОС для сертификатов центров сертификации.\n\nСкачанные файлы переименовываем, меняем расширение с `pem` на `crt`:\n- `rootCA.cert.pem` -\u003e `rootCA.cert.crt`\n- `intermediateCA.cert.pem` -\u003e `intermediateCA.cert.crt`\n\nДважды кликаем на файле `rootCA.cert.crt`, откроется просмотр сертификата.\n\nНажимаем кнопку `Установить сертификат`.\n\nПроходим мастер импорта. Выбираем `Поместить все сертификаты в следующие хранилища`, в окне выбираем `Доверенные корневые центры сертификации`.\n\nОС: `Linux`\n\nВыбор пути зависит от используемой вами ОС Linux.\n\nДля ОС `Debian`, `Ubuntu` и ОС на их базе\n\nУстанавливаем пакет `ca-certificates` и создаем объединенный траст файл со всеми сертификатами:\n```bash\napt install -y ca-certificates\nupdate-ca-certificates\n```\n\nСкачанные файлы переименовываем, меняем расширение с `.pem` на `.crt`:\n- `rootCA.cert.pem` -\u003e `rootCA.cert.crt`\n- `intermediateCA.cert.pem` -\u003e `intermediateCA.cert.crt`\n\nНапример, с помощью команды `cp` выполняем:\n```bash\ncp rootCA.cert.pem rootCA.cert.crt\ncp intermediateCA.cert.pem intermediateCA.cert.crt\n```\n\nДля файлов сертификата корневого центра сертификации (`rootCA.cert.crt`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.crt`) создаем символические ссылки в каталоге `/usr/local/share/ca-certificates/`:\n```bash\nln -s rootCA.cert.crt /usr/local/share/ca-certificates/rootCA.cert.crt\nln -s intermediateCA.cert.crt /usr/local/share/ca-certificates/intermediateCA.cert.crt\n```\n\nОбновляем объединенный траст файл со всеми сертификатами командой:\n```bash\nupdate-ca-certificates\n```\n\nДля ОС `RHEL`, `CentOS Stream`, `Rocky Linux`, `AlmaLinux`, `Oracle Linux`, `EuroLinux`, `Fedora` и ОС на их базе\n\nУстанавливаем пакет `ca-certificates`:\n```bash\ndnf install -y ca-certificates\n```\n\nДля операционных систем 9-ой серии и выше (пример, RHEL 9, CentOS Stream 9 и т.д.) выполняем команду:\n```bash\nupdate-ca-trust\n```\n\nДля операционных систем ниже 9-ой серии (пример, Rocky Linux 8.x и т.д.) выполняем команды:\n```bash\nupdate-ca-trust force-enable\nupdate-ca-trust enable\n```\n\nДля файлов сертификата корневого центра сертификации (`rootCA.cert.pem`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`) создаем символические ссылки в каталоге `/etc/pki/ca-trust/source/anchors/`:\n```bash\nln -s rootCA.cert.pem /etc/pki/ca-trust/source/anchors/rootCA.cert.pem\nln -s intermediateCA.cert.pem /etc/pki/ca-trust/source/anchors/intermediateCA.cert.pem\n```\n\nОбновляем траст корневых сертификатов (CA Trust) машины командой:\n```bash\nupdate-ca-trust extract\n```\n\nДля ОС `Arch`, `Bluestar`, `Manjaro`, `EndeavourOS`, `Garuda`, `Mabox`, `RebornOS`, `Archcraft`, `ArchLabs`, `CachyOS` и ОС на их базе\n\nУстанавливаем пакет `ca-certificates` и обновляем траст корневых сертификатов (CA Trust) машины:\n```bash\npacman -Syu ca-certificates\nupdate-ca-trust\n```\n\nСкачанные файлы переименовываем, меняем расширение с `.pem` на `.crt`:\n- `rootCA.cert.pem` -\u003e `rootCA.cert.crt`\n- `intermediateCA.cert.pem` -\u003e `intermediateCA.cert.crt`\n\nНапример, с помощью команды `cp` выполняем:\n```bash\ncp rootCA.cert.pem rootCA.cert.crt\ncp intermediateCA.cert.pem intermediateCA.cert.crt\n```\n\nДля файлов сертификата корневого центра сертификации (`rootCA.cert.crt`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.crt`) создаем символические ссылки в каталоге `/etc/ca-certificates/trust-source/anchors/`:\n```bash\nln -s rootCA.cert.crt /etc/ca-certificates/trust-source/anchors/rootCA.cert.crt\nln -s intermediateCA.cert.crt /etc/ca-certificates/trust-source/anchors/intermediateCA.cert.crt\n```\n\nОбновляем траст корневых сертификатов (CA Trust) машины командой:\n```bash\nupdate-ca-trust extract\n```\n\nОС: `MacOS`\n\nОткрываем приложение `Связка ключей`.\n\nЧтобы быстро открыть `Связку ключей`, найдите ее через `Spotlight`, затем нажмите клавишу `Ввод`.\n\nВ категории `Системные связки ключей` выбираем `Система`, кликаем для открытия и выбора.\n\nВ меню `Файл` выбираем `Импортировать объекты`, выбираем файл сертификата корневого центра сертификации (`rootCA.cert.pem`).\n\nНа вкладке `Сертификаты` находим добавленный сертификат, выделяем его, в меню выбираем `Свойства`.\n\nВ окне просмотра сертификата разворачиваем группу настроек `Доверие`.\n\nВ настройке `Параметры использования сертификата` выбираем `Всегда доверять`.\n\nЗакрываем окно, подтверждаем доверие сертификата.\n\nАналогичным способом проходим путь для файла сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`).\n\nИтог: после настройки выше переходим на сайт по URL с доменом `dev.bx`, используя `https` и порт `8589` в URL:\n```bash\nhttps://dev.bx:8589/\n```\n\nУстанавливаем дистрибутив, восстанавливаем бекап сайта - выбора за вами.\n\nВыполняем подстройку сайта как указано выше в этом README-файле.\n\nСтраница `Проверка системы` (`/bitrix/admin/site_checker.php?lang=ru`) открывается по `https` и сама проверка проходит, используя `ssl` коннект вида:\n```bash\nConnection to ssl://dev.bx:8589\tSuccess\n```\n\nPush-сервер использует безопасные веб-сокеты, соединение устанавливается по протоколу `wss`. Пуши отправляются корректно, интерактивность функционирует.\n\n\u003ca id=\"removeselfsignedcertsfromosorbrowser\"\u003e\u003c/a\u003e\n### Удаление сертификатов из ОС или браузера\n\n\u003e [!IMPORTANT]\n\u003e При удалении сайта не забудьте удалить сертификат корневого центра сертификации (`rootCA.cert.pem`) и сертификат промежуточного центра сертификации (`intermediateCA.cert.pem`) из ОС и браузера.\n\nДля браузера `Mozilla Firefox` процесс удаления обратный добавлению.\n\nДля удаления сертификатов центров сертификации в ОС `Windows`:\n- запустите оснастку сертификатов, выполнив команду `certmgr.msc`\n- в ней перейдите `Сертификаты` - `Доверенные корневые центры сертификации` - `Сертификаты`\n- найдите сертификаты центров сертификации\n- сначала удалите сертификат промежуточного центра сертификации, затем сертификат корневого центра сертификации, выбрав их в списке по одному и в меню выбрав пункт `удалить`\n- подтвердите удаление\n\nДля удаления сертификатов центров сертификации в ОС `Linux`:\n\nВыбор пути зависит от используемой вами ОС Linux.\n\nДля ОС `Debian`, `Ubuntu` и ОС на их базе\n\nУдаляем символические ссылки для файлов сертификата корневого центра сертификации (`rootCA.cert.crt`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.crt`):\n```bash\nrm -f /usr/local/share/ca-certificates/rootCA.cert.crt\nrm -f /usr/local/share/ca-certificates/intermediateCA.cert.crt\n```\n\nОбновляем объединенный траст файл со всеми сертификатами командой:\n```bash\nupdate-ca-certificates\n```\n\nДля ОС `RHEL`, `CentOS Stream`, `Rocky Linux`, `AlmaLinux`, `Oracle Linux`, `EuroLinux`, `Fedora` и ОС на их базе\n\nУдаляем символические ссылки для файлов сертификата корневого центра сертификации (`rootCA.cert.pem`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`):\n```bash\nrm -f /etc/pki/ca-trust/source/anchors/rootCA.cert.pem\nrm -f /etc/pki/ca-trust/source/anchors/intermediateCA.cert.pem\n```\n\nОбновляем траст корневых сертификатов (CA Trust) машины командой:\n```bash\nupdate-ca-trust extract\n```\n\nДля ОС `Arch`, `Bluestar`, `Manjaro`, `EndeavourOS`, `Garuda`, `Mabox`, `RebornOS`, `Archcraft`, `ArchLabs`, `CachyOS` и ОС на их базе\n\nУдаляем символические ссылки для файлов сертификата корневого центра сертификации (`rootCA.cert.crt`) и сертификата промежуточного центра сертификации (`intermediateCA.cert.crt`):\n```bash\nrm -f /etc/ca-certificates/trust-source/anchors/rootCA.cert.crt\nrm -f /etc/ca-certificates/trust-source/anchors/intermediateCA.cert.crt\n```\n\nОбновляем траст корневых сертификатов (CA Trust) машины командой:\n```bash\nupdate-ca-trust extract\n```\nДля удаления сертификатов центров сертификации в ОС `MacOS`:\n\nОткройте приложение `Связка ключей`.\n\nЧтобы быстро открыть `Связку ключей`, найдите ее через `Spotlight`, затем нажмите клавишу `Ввод`.\n\nВ категории `Системные связки ключей` выбираем `Система`, кликаем для открытия и выбора.\n\nПереходим на вкладку `Сертификаты`.\n\nНаходим файл сертификата промежуточного центра сертификации (`intermediateCA.cert.pem`).\n\nВыбираем его и в меню кликаем `Удалить`.\n\nПодтверждаем удаление сертификата промежуточного центра сертификации из связки ключей `Система`.\n\nАналогичным способом проходим путь для удаления из связки ключей `Система` сертификата корневого центра сертификации (`rootCA.cert.pem`).\n\n\u003ca id=\"presentcerts\"\u003e\u003c/a\u003e\n## Бесплатный Lets Encrypt сертификат\n\n\u003ca id=\"lego\"\u003e\u003c/a\u003e\n### Lego\n\nВыпустить и использовать бесплатный SSL-сертификат от LetsEncrypt возможно с помощью отдельного контейнера `lego` на базе образа `bitrix24/lego`.\n\nВнутри образа находится `LetsEncrypt` клиент и `ACME` библиотека, написанная на `Go`. По сокращениям первых букв слов получаем название проекта `LeGo` ([GitHub](https://github.com/go-acme/lego), [DockerHub](https://hub.docker.com/r/goacme/lego)).\n\nОсновные возможности проекта `Lego`:\n- ACME v2 с поддержкой множества RFC и draft-ов\n- поддержка 150 DNS-провайдеров\n- выпуск, перевыпуск, отзыв SSL-сертификатов\n- HTTPS, DNS, TLS челленджи\n- выпуск сертификатов:\n  - на один домен (singledomain)\n  - на множество поддоменов домена (не больше 100 в одном сертификате) (multidomain)\n  - на все множество поддоменных имен домена (*) (wildcard)\n- и многое другое\n\n\u003ca id=\"domaintransfer\"\u003e\u003c/a\u003e\n### Перенаправление или перенос домена\n\nПеред тем как выполнять запросы на получение или обновление SSL-сертификатов с помощью LetsEncrypt нам необходимо перенаправить (или перенести) домен от поставщика услуг на DNS-хостинг провайдера.\n\nРассмотрим примеры в общих чертах, в деталях информацию необходимо найти в документации поставщиков услуг и DNS-провайдеров.\n\nПример 1: домен `example.dev` приобретен в `Reg.ru`, переносим его в `YandexCloud`.\n\nВ консоли `YandexCloud` добавляем домен, система потребует от нас прописать DNS-сервера у поставщика услуг. Возвращаемся в `Reg.ru`, прописываем требуемые DNS-записи `Yandex`, сохраняем.\n\nОжидаем завершения процесса переноса. Проверить DNS-записи можно с помощью сервиса https://dnschecker.org/.\n\nПример 2: домен `proj.site` приобретен в `Reg.ru`, переносим его в `CloudFlare`.\n\nВ консоли `CloudFlare` добавляем домен, система потребует от нас прописать DNS-сервера у поставщика услуг. Возвращаемся в `Reg.ru`, прописываем требуемые DNS-записи `CloudFlare`, сохраняем.\n\nОжидаем завершения процесса переноса. Проверить DNS-записи можно с помощью сервиса https://dnschecker.org/.\n\n\u003ca id=\"letsencryptchallenges\"\u003e\u003c/a\u003e\n### Челленджи\n\nЧеллендж - дословно это `вызов`, который `бросает` ваш клиент сервису `LetsEncrypt`. Эти задания содержат домен(ы) и способ его(их) проверки (верификации). При успешном выполнении клиент получает сертификат.\n\n`Lego` поддерживает три типа челленджей: `HTTP`, `DNS`, `TLS`.\n\n`TLS` челлендж рассматривать не будем в виду сложности реализации и использования.\n\nРассмотрим `HTTP` и `DNS` челленджи как самые часто используемые.\n\n\u003e [!CAUTION]\n\u003e Внимание! `HTTP` челлендж возможно пройти `ТОЛЬКО` на порту `80`.\n\u003e\n\u003e Внимание! С помощью `HTTP` челленджа невозможно получить `wildcard` сертификаты.\n\nПодробней в документации LetsEncrypt: https://letsencrypt.org/docs/challenge-types/\n\n\u003ca id=\"letsencrypthttpchallenge\"\u003e\u003c/a\u003e\n#### HTTP челлендж (http-01)\n\nЧтобы выполнить это задание, завершить `HTTP` челлендж и в итоге получить бесплатный SSL-сер","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitrix-tools%2Fenv-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitrix-tools%2Fenv-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitrix-tools%2Fenv-docker/lists"}