Проект представляет собой dev сайт, он же девелоперский сайт, предназначенный для тестирования, разработки, примера использования окружения на базе технологий Docker. Проект поддерживается и развивается командой внутри компании 1С-Битрикс.
Программы, необходимые для работы технологий Битрикс, запускаются в контейнерах (Docker Containers
). По шаблону из образов (Docker Images
). Данные хранятся в томах (Docker Volumes
). Связаны между собой посредством сети (Docker Network
). И управляются (оркестрируются) используя compose (Docker Compose
).
Caution
Внимание! Девелоперский сайт не рекомендуется для использования в "боевом" режиме (он же "продакшен"). Однако, это не запрещено.
Стоит учесть, что такая эксплуатация требует дополнительных настроек безопасности контейнерного окружения, хоста и самого сайта.
- Docker и Docker Compose
- Пароли к базам данных MySQL и PostgreSQL
- Секретный ключ для Push-сервера
- Часовой пояс (timezone)
- Управление
- Адресация
- Порты
- Доступ к сайту
- Базовая проверка конфигурации окружения
- BitrixSetup / Restore
- Лицензия, обновления платформы и решений
- Настройки модулей
- Проверка системы
- Тест производительности
- Cron
- Хранение временных файлов вне корневой директории сайта
- Push & pull
- Sphinx
- Почта
- PHP
- Nginx
- Memcache и Redis
- HTTPS/SSL/TLS/WSS
- Самоподписанный сертификат
- Бесплатный Lets Encrypt сертификат
- Lego
- Перенаправление или перенос домена
- Челленджи
- Команды lego
- Выпуск сертификатов
- HTTP челлендж (http-01) для одного домена (singledomain SSL-сертификат)
- HTTP челлендж (http-01) для множества поддоменов домена (multidomain SSL-сертификат)
- DNS челлендж (dns-01) для одного домена (singledomain SSL-сертификат)
- DNS челлендж (dns-01) для множества поддоменов домена (multidomain SSL-сертификат)
- DNS челлендж (dns-01) на все множество поддоменных имен домена (wildcard SSL-сертификат)
- Установка сертификатов
- Консоль сервисов
- Кастомизация
- Версии ПО
- Сборка или скачивание Docker образов
Для запуска проекта понадобится Docker
. Для оркестровки и управления Docker Compose
.
Способ развертывания зависит от вашей операционной системы, используемой на хосте.
Возможны варианты:
- рабочая станция, персональный компьютер, ноутбук и т.д. с рабочим столом и графической средой, он же desktop
- сервер, без графической среды, но с консолью или удаленным доступом, он же server
Для взаимодействия с Docker
в графическом режиме будем использовать продукт Docker 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, который возможно запустить на ОС Linux
.
Ознакомьтесь с документацией и разверните Docker Engine
в зависимости от используемой вами ОС Linux
:
Docker Engine
: https://docs.docker.com/engine/install/
В современных версиях продуктов Docker
обычно в их состав уже включен Docker Compose
.
Ознакомьтесь с документацией и разверните Docker Compose
, если это требуется отдельно:
Docker Compose
: https://docs.docker.com/compose/
Caution
Внимание! Перед первым запуском обязательно придумайте или сгенерируйте ваши уникальные пароли суперпользователей баз данных MySQL
и PostgreSQL
.
Для этого используем образ Alpine Linux
:
docker pull alpine:3.21
Генерируем уникальный пароль для суперпользователя root
базы данных MySQL
с помощью команды:
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
с помощью команды:
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
в виде:
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
на ваши значения.
Caution
Внимание! Перед первым запуском обязательно придумайте или сгенерируйте ваш уникальный секретный ключ для Push-сервера.
Для этого используем образ Alpine Linux
:
docker pull alpine:3.21
Генерируем уникальный секретный ключ с помощью команды:
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
в виде:
PUSH_SECURITY_KEY=CHANGE_SECURITY_KEY_HERE
Обязательно измените значение вашего уникального секретного ключа в файле .env_push
, заменив шаблон CHANGE_SECURITY_KEY_HERE
на ваше значение.
Значение часового пояса (timezone), используемой контейнерами, хранится в файле .env
.
Значение по умолчанию задано как:
TZ=Europe/Moscow
Исключение составляет контейнер с php
, значение часового пояса (timezone) которого продублировано в отдельном файле confs/phpXXX/etc/php/conf.d/timezone.ini
как:
date.timezone = Europe/Moscow
Где XXX
в пути к файлу timezone.ini
- версия php
. По умолчанию равна 82
, возможные альтернативные варианты 83
и 84
.
При необходимости смените значение в обоих файлах до создания и запуска контейнеров проекта. Например, для версии php 8.2.x
и часового пояса Europe/Kaliningrad
измените значение:
- в файле
.env
:
TZ=Europe/Kaliningrad
- в файле
confs/php82/etc/php/conf.d/timezone.ini
:
date.timezone = Europe/Kaliningrad
Управление (или оркестровка) набором контейнеров или одним из контейнеров осуществляется через Docker Compose
.
Переходим в каталог проекта cd env-docker
и выполняем команды ниже.
Запустить все контейнеры и оставить их работать в фоне:
docker compose up -d
Отобразить список контейнеров и их статус:
docker compose ps
Показать логи сразу всех контейнеров:
docker compose logs
Показать лог определенного сервиса-контейнера:
docker compose logs redis
Перезапустить определенный контейнер:
docker compose restart nginx
Перезапустить все контейнеры:
docker compose restart
Остановить все контейнеры:
docker compose stop
Остановить все контейнеры, удалить их:
docker compose down
Остановить все контейнеры, удалить их и удалить все тома этих контейнеров:
docker compose down -v
Зайти в sh-консоль определенного контейнера, например nginx:
docker compose exec nginx sh
Подробней можно прочитать в документации docker compose: https://docs.docker.com/reference/cli/docker/compose/
Обращение к запущенному сайту может быть:
- через
localhost
или127.0.0.1
- по IP вашей локальной сети вида
10.X.X.X
,192.X.X.X
,172.X.X.X
и т.д. - по имени локального домена в вашей локальной сети вида
dev.bx
- по IP глобальной сети интернет вида
85.86.87.88
- по имени настоящего домена вида
devexample.com
Выбор зависит от вашей конфигурации.
Учтите, что при использовании https
нужен SSL-сертификат, который можно сгенерировать или получить на доменное имя, но не на IP адрес.
Запущенный сайт для своей работы по умолчанию использует порты:
8588
для http8589
для https
В случае, если вы используете фаервол, необходимо открыть порты. Пример команд для разных ОС:
- Debian/Ubuntu и т.д.:
ufw allow 8588 && ufw allow 8589
- RHEL/CentOS/AlmaLinux/RockyLinux/OracleLinux/ArchLinux и т.д.:
firewall-cmd --add-port=8588/tcp --permanent && firewall-cmd --add-port=8589/tcp --permanent && firewall-cmd --reload
Для других ОС смотрите документацию по работе с фаерволом.
Итак, согласно разделам Адресация и Порты выше, к сайту можно обратиться по http
или https
следующим образом:
-
через localhost:
-
по локальному IP адресу:
-
используя домен:
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
:
docker compose exec --user=bitrix php sh
Переходим в корневой каталог сайта и скачиваем скрипт bitrix_server_test.php
:
cd /opt/www/
wget https://dev.1c-bitrix.ru/download/scripts/bitrix_server_test.php
В браузере переходим по ссылке вида:
http://10.0.1.119:8588/bitrix_server_test.php
Caution
Внимание! После проверки конфигурации окружения скрипт bitrix_server_test.php
нужно удалить.
Для Docker Engine на Linux расположение каталога сайта на хосте зависит от режима работы docker-а:
- rootfull:
/var/lib/docker/volumes/dev_www_data/_data/
- rootless:
/home/[USERNAME]/.local/share/docker/volumes/dev_www_data/_data
Для установки продуктов компании 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
:
docker compose exec --user=bitrix php sh
Переходим в корневой каталог сайта и скачиваем скрипт(ы):
cd /opt/www/
wget https://www.1c-bitrix.ru/download/scripts/bitrixsetup.php
wget https://www.1c-bitrix.ru/download/scripts/restore.php
В браузере переходим по ссылке вида:
- для установки:
http://10.0.1.119:8588/bitrixsetup.php
- для восстановления:
http://10.0.1.119:8588/restore.php
Устанавливаем продукт или восстанавливаем сайт, зависит от вашего выбора.
Используем скрипт bitrixsetup.php
, скачиваем дистрибутив продукта компании 1С-Битрикс, демо или лицензионную версию.
Редакция и тип базы зависит от вашего выбора.
После переходим на сайт, используя URL:
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.45221С-Битрикс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, хранится в файле
.env_sql
- Имя хоста (алиас) -
-
для
PostgreSQL
версии:- Имя хоста (алиас) -
postgres
- Имя суперпользователя -
postgres
- Пароль суперпользователя - был создан вами в главе Пароли к базам данных MySQL и PostgreSQL, хранится в файле
.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
на базе образа bitrix24/php
.
По умолчанию контейнер сконфигурирован на выполнение заданий модуля Главный модуль (main)
раз в минуту, запуская это исполнение от пользователя bitrix
:
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
, добавить строку:
define("BX_CRONTAB_SUPPORT", true);
Cохранить изменения в файле.
После этого все агенты и отправка системных событий будут обрабатываться из-под cron, раз в 1 минуту. Настройка завершена.
Проверить настройку можно на странице Проверка системы
(/bitrix/admin/site_checker.php?lang=ru
) и на странице Список агентов
(/bitrix/admin/agent_list.php?lang=ru
).
Cron задания хранятся в папке /etc/periodic/
контейнера cron
.
Внутри каталога размещены подкаталоги, указывающие на периодичность запуска заданий:
1min
15min
hourly
daily
weekly
monthly
Для примера создадим задание, которое выполняется раз в сутки - создание резервной копии сайта с базой MySQL - бекап.
Заходим в sh-консоль контейнера cron
из-под пользователя root
:
docker compose exec --user=root cron sh
В каталоге /etc/periodic/daily/
создадим файл backup
без указания расширения файла.
apk add mc
mcedit /etc/periodic/daily/backup
Заполним содержимое файла:
#!/bin/sh
#
su - bitrix -c 'php -f /opt/www/bitrix/modules/main/tools/backup.php; > /dev/null 2>&1'
#
Сохраняем файл. Делаем его исполняемым:
chmod -R a+x /etc/periodic/daily
Создаем файл /etc/crontabs/cron.update
, чтобы crond
демон перезапустил задания крона:
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
, добавить строку:
define("BX_TEMPORARY_FILES_DIRECTORY", "/opt/.bx_temp");
Cохранить.
Проверить настройку можно на странице Сканер безопасности
(/bitrix/admin/security_scanner.php?lang=ru
) модуля Проактивной защиты (security)
.
Для работы Push-сервера будет запущено два контейнера: один для режима pub
, второй для режима sub
. Оба используют один образ bitrix24/push
.
Параметры переменных сред контейнеров хранятся в файлах .env_push_pub
и .env_push_sub
.
Cекретный ключ для подписи соединения между клиентом и push-сервером хранится в файле .env_push
и был создан вами в главе Секретный ключ для Push-сервера.
Возвращаемся к главам Адресация и Порты этого документа. Определяемся по какой схеме работает сайт. Например:
- используется локальный 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
на ваши - пример:
'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
, будет запущен один контейнер на базе образа 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
и выше.
Образ bitrix24/php
в своем составе содержит mta msmtp
, предназначенный для отправки писем.
Настройки msmtp для аккаунта default
хранятся в файле /opt/msmtp/.msmtprc
.
Значения настроек msmtp зависят от smtp-сервера, с которым он будет взаимодействовать при работе.
Например, локальный почтовый сервер, отвечает на порту 25
, расположен на хосте mail.server.local
, не использует в своей работе tls
. В файле /opt/msmtp/.msmtprc
настройки будут выглядеть:
...
host mail.server.local
port 25
from [email protected]
user [email protected]
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
полный список настроек выглядит так:
# 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
:
docker compose exec --user=root php sh
Устанавливаем mc
и выходим:
apk add mc
exit
Заходим в sh-консоль контейнера php
из-под пользователя bitrix
:
docker compose exec --user=bitrix php sh
Редактируем файл /opt/msmtp/.msmtprc
, указываем приготовленный блок настроек:
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 [email protected] 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 [email protected],[email protected] mailsize=200205 smtpstatus=250 smtpmsg='250 2.0.0 OK 1744498335 2adb3069b0e04-54d3d502618sm743850e87.107 - gsmtp' exitcode=EX_OK
Для отправки почты используем возможности Главного модуля (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
, добавляем блок настроек:
'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
, добавляем строку:
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/mail_log.txt");
Создаем файл /bitrix/php_interface/init.php
если его нет, добавляем код функции custom_mail
:
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.
Чтобы его использовать, заходим в sh-консоль контейнера php
из-под пользователя bitrix
:
docker compose exec --user=bitrix php sh
Проверяем его версию командой:
composer --version
Устанавливаем зависимости:
cd /opt/www/bitrix/
COMPOSER=composer-bx.json composer install
После запускаем Bitrix CLI:
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
Возможно, пригодится настроить, если нужна История входов
: https://helpdesk.bitrix24.ru/open/16615982/
Заходим в sh-консоль контейнера php
из-под пользователя root
:
docker compose exec --user=root php sh
Устанавливаем curl
, подключаем ini-файл в настройках PHP, выходим:
apk add curl
echo 'browscap = /opt/browscap/php_browscap.ini' > /usr/local/etc/php/conf.d/browscap.ini
exit
Заходим в sh-консоль контейнера php
из-под пользователя bitrix
:
docker compose exec --user=bitrix php sh
В каталог /opt/browscap
загрузим browscap.ini
. Выполняем:
cd /opt/browscap
curl http://browscap.org/stream?q=PHP_BrowsCapINI -o php_browscap.ini
exit
Перезапускаем контейнеры php
и cron
:
docker compose restart php cron
На странице настроек Главного модуля (main)
(/bitrix/admin/settings.php?lang=ru&mid=main
) на вкладке Журнал событий
:
- отмечаем опцию
Сохранять историю входов с устройств пользователя
-Да
- заполняем поле
Сколько дней хранить историю входов
-365
Сохраняем настройки.
Возможно, пригодится настроить, если нужно отслеживать геопозицию устройства для Истории входов
: https://helpdesk.bitrix24.ru/open/16615982/
Заходим в sh-консоль контейнера php
из-под пользователя bitrix
:
docker compose exec --user=bitrix php sh
Переходим в каталог /opt/geoip2
:
cd /opt/geoip2
Размещаем в нем файлы в формате mmdb, список:
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-геоданные для истории входов
-Да
Сохраняем настройки.
Образ bitrix24/php
в своем составе содержит следующие PHP расширения (extensions):
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
:
docker compose exec --user=root php sh
- находим файл
/usr/local/etc/php/conf.d/docker-php-ext-***.ini
, где***
название расширения, пример дляimagick
:
apk add mc
mcedit /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini
- внутри файла меняем строку активируем подключение:
extension=***.so
, где***
название расширения:
extension=imagick.so
-
сохраняем изменения и выходим
-
перезапускаем контейнеры
php
иcron
:
docker compose restart php cron
Чтобы деактивировать PHP расширение:
- заходим в sh-консоль контейнера
php
из-под пользователяroot
:
docker compose exec --user=root php sh
- находим файл
/usr/local/etc/php/conf.d/docker-php-ext-***.ini
, где***
название расширения, пример дляimagick
:
apk add mc
mcedit /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini
- внутри файла меняем строку деактивируем подключение:
; extension=***.so
, где***
название расширения:
; extension=imagick.so
- сохраняем изменения и выходим
- перезапускаем контейнеры
php
иcron
:
docker compose restart php cron
Чтобы работать с изображениями с помощью PHP расширения Imagick
(а не GD
), активируем библиотеку для работы с изображениями на базе ImagickImageEngine
.
Убедимся, что в файле /usr/local/etc/php/conf.d/docker-php-ext-imagick.ini
активировано подключение расширения imagick
. Как это сделать, описано в главе PHP Расширения (extensions).
Заходим в sh-консоль контейнера php
из-под пользователя bitrix
:
docker compose exec --user=bitrix php sh
Выполняем команду:
\cp /usr/local/etc/image.png /opt/www/bitrix/images/
В административной части продукта:
- на странице
Управление структурой
(/bitrix/admin/fileman_admin.php?lang=ru&path=%2F
) редактируем файл/bitrix/.settings.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
и уберем блок настроек выше.
Веб-антивирус включен в состав модуля Проактивная защита (security)
, с помощью которого реализуется целый комплекс защитных мероприятий для сайта и сторонних приложений.
Для детектирования вирусов, внедренных до старта буферизации вывода, добавим в контейнер php
файл /usr/local/etc/php/conf.d/security.ini
.
Заходим в sh-консоль контейнера php
из-под пользователя root
:
docker compose exec --user=root php sh
Выполняем команду:
echo "auto_prepend_file = /opt/www/bitrix/modules/security/tools/start.php" > /usr/local/etc/php/conf.d/security.ini
Перезапускаем контейнеры php
и cron
:
docker compose restart php cron
На странице Веб-антивирус
(/bitrix/admin/security_antivirus.php?lang=ru
) включаем его, нажимаем кнопку Включить веб-антивирус
.
Для выключения обратный порядок действий.
На странице Веб-антивирус
(/bitrix/admin/security_antivirus.php?lang=ru
) выключаем его, нажимаем кнопку Выключить веб-антивирус
.
Заходим в sh-консоль контейнера php
из-под пользователя root
:
docker compose exec --user=root php sh
Выполняем команду:
rm -f /usr/local/etc/php/conf.d/security.ini
Перезапускаем контейнеры php
и cron
:
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
убираем #
:
#fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php;
Запускаем все контейнеры, оставляем их работать в фоне:
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
:
docker compose exec --user=root nginx sh
Выполняем:
apk add mc
exit
Заходим в sh-консоль контейнера nginx
из-под пользователя bitrix
:
docker compose exec --user=bitrix nginx sh
Редактируем файл /etc/nginx/conf.d/default.conf
:
mcedit /etc/nginx/conf.d/default.conf
Для включения роутинга находим в файле все строки содержащие urlrewrite.php
. Добавляем #
в начало таких строк. Ниже в строках сrouting_index.php
убираем #
:
#fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php;
Для отключения роутинга находим в файле все строки содержащие routing_index.php
. Добавляем #
в начало таких строк. Выше в строках сurlrewrite.php
убираем #
:
fastcgi_param SCRIPT_FILENAME $document_root/bitrix/urlrewrite.php;
#fastcgi_param SCRIPT_FILENAME $document_root/bitrix/routing_index.php;
Сохраняем файл. Выходим из консоли контейнера. Проверяем настройки nginx
:
docker compose exec --user=bitrix nginx sh -c "nginx -t"
Если никаких ошибок нет, перезапускаем контейнер nginx
:
docker compose restart nginx
Подключение модулей Nginx производится в файле /etc/nginx/inc/modules.conf
контейнера, содержимое которого можно найти в файле /confs/nginx/inc/modules.conf
репозитория.
По умолчанию в контейнере nginx
, запущенного из образа bitrix24/nginx
, подключаются следующие модули:
brotli
headers-more
zip
Заходим в sh-консоль контейнера nginx
из-под пользователя root
:
docker compose exec --user=root nginx sh
Выполняем:
apk add mc
exit
Заходим в sh-консоль контейнера nginx
из-под пользователя bitrix
:
docker compose exec --user=bitrix nginx sh
Редактируем файл /etc/nginx/inc/modules.conf
:
mcedit /etc/nginx/inc/modules.conf
Для подключения модуля приводим строку к виду load_module "/usr/lib/nginx/modules/***.so";
. Пример для модуля perl
:
load_module "/usr/lib/nginx/modules/ngx_http_perl_module.so";
Для отключения модуля приводим строку к виду #load_module "/usr/lib/nginx/modules/***.so";
. Пример для модуля perl
:
#load_module "/usr/lib/nginx/modules/ngx_http_perl_module.so";
Выходим из консоли контейнера и проверяем настройки nginx
:
docker compose exec --user=bitrix nginx sh -c "nginx -t"
Если никаких ошибок нет, перезапускаем контейнер nginx
:
docker compose restart nginx
Контейнер memcached
может быть использован для хранения кеша и для хранения данных сессий.
Контейнер redis
используется в связке с Push-сервером.
Также может быть использован для хранения кеша и для хранения данных сессий.
Ядро поддерживает несколько вариантов для хранения кеша: файлы
, redis
, memcache
и т.д.
В административной части продукта на странице Управление структурой
(/bitrix/admin/fileman_admin.php?lang=ru&path=%2F
) отредактируем файл /bitrix/.settings.php
, добавляем блок настроек, который определит вариант хранения:
memcache
:
'cache' => [
'value' => [
'type' => [
'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineMemcache',
'extension' => 'memcache'
],
'memcache' => [
'host' => 'memcached',
'port' => '11211',
]
],
'sid' => $_SERVER["DOCUMENT_ROOT"]."#01234"
],
redis
:
'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
, разделенная сессия:
// memcache separated
'session' => [
'value' => [
'lifetime' => 14400,
'mode' => 'separated',
'handlers' => [
'kernel' => 'encrypted_cookies',
'general' => [
'type' => 'memcache',
'port' => '11211',
'host' => 'memcached',
],
],
],
],
redis
:
// redis
'session' => [
'value' => [
'mode' => 'default',
'handlers' => [
'general' => [
'type' => 'redis',
'port' => '6379',
'host' => 'redis',
],
],
],
],
database
:
// 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
).
В административной части продукта на странице настроек модуля Веб-кластер
(/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
Сохраняем подключение. В списке подключений для созданного подключения нажимаем Начать использовать
.
Процесс отключения и удаления обратный добавлению.
В административной части продукта на странице настроек модуля Веб-кластер
(/bitrix/admin/settings.php?lang=ru&mid=cluster
) выбираем Использовать для хранения кеша
- Redis
.
Сохраняем настройки.
В административной части продукта на странице Подключения к redis
(/bitrix/admin/cluster_redis_list.php?lang=ru&group_id=1
) добавляем новое подключение и указываем:
Сервер
-redis
Порт
-6379
Сохраняем подключение. В списке подключений для созданного подключения нажимаем Начать использовать
.
Процесс отключения и удаления обратный добавлению.
Сгенерировать и использовать SSL-сертификат в режиме самоподписи возможно с помощью отдельного контейнера ssl
на базе образа bitrix24/ssl
.
Данные, отображаемые в сертификатах корневого и промежуточного центров сертификации, хранятся в файле .env_ssl
. Строки настроек начинаются с CA_
.
При необходимости отредактируйте файл .env_ssl
, укажите ваши данные по примеру:
Название страны
: введите двухбуквенный код вашей страны (пример,RU
)Название штата или провинции
: введите название штата, в котором официально зарегистрирована ваша организация (пример,Kaliningrad Region
)Название населенного пункта
: введите название населенного пункта или города, в котором находится ваша компания (пример,Kaliningrad
)Название организации
: укажите официальное название вашей организации (пример,Dev Corporation Ltd
)Имя организационного подразделения
: введите название подразделения в вашей организации, отвечающего за управление сертификатами (пример,Dev Corporation Ltd Unit
)Адрес электронной почты
: пример,[email protected]
Данные, отображаемые в сертификате для домена, также хранятся в файле .env_ssl
. Строки настроек начинаются с CERT_
.
При необходимости отредактируйте файл .env_ssl
, укажите ваши данные по примеру:
Название страны
: введите двухбуквенный код вашей страны (пример,RU
)Название штата или провинции
: введите название штата, в котором официально зарегистрирована ваша организация (пример,Kaliningrad Region
)Название населенного пункта
: введите название населенного пункта или города, в котором находится ваша компания (пример,Kaliningrad
)Название организации
: укажите официальное название вашей организации (пример,Dev Corporation Ltd
)Имя организационного подразделения
: введите название подразделения в вашей организации, отвечающего за управление сертификатами (пример,Dev Corporation Ltd Unit
)Адрес электронной почты
: пример,[email protected]
Important
Если данные, отображаемые в сертификатах корневого и промежуточного центров сертификации, были изменены в файле .env_ssl
, необходимо пересоздать контейнер ssl
.
Для этого выполните последовательно команды остановки, удаления, пересоздания и запуска контейнера ssl
:
docker compose stop ssl
docker compose rm -f ssl
docker compose up -d
Одной командой разово генерируем сертификаты корневого и промежуточного центров сертификации:
docker compose exec --user=bitrix ssl bash -c "~/cas.sh"
Второй - сертификат и приватный ключ для домена dev.bx
:
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
не создается, а поставляется для примера. Если нужно его сделать уникальным, выполните команду:
docker compose exec --user=bitrix ssl bash -c "openssl dhparam -out /ssl/dhparam.pem 4096"
Important
Создание файла dhparam.pem может занять значительное время, зависящее от производительности вашего оборудования.
Сертификат корневого центра сертификации (rootCA.cert.pem
) и сертификат промежуточного центра сертификации (intermediateCA.cert.pem
) нужно добавить в траст контейнеров nginx
и php
.
Заходим в sh-консоль контейнера php
из-под пользователя root
:
docker compose exec --user=root php sh
Выполняем:
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
добавить:
apk add mc
mcedit /etc/hosts
10.0.1.119 dev.bx
exit
Заходим в sh-консоль контейнера nginx
из-под пользователя root
:
docker compose exec --user=root nginx sh
Выполняем:
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_*
:
apk add mc
mcedit /etc/nginx/ssl/ssl.conf
Меняем опции на:
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
) в корень сайта:
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
:
docker compose exec --user=bitrix nginx sh -c "nginx -t"
Если никаких ошибок нет, перезапускаем контейнер nginx
:
docker compose restart nginx
На хосте, где будем использовать браузер, скачиваем файлы центров сертификации по ссылкам:
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
и создаем объединенный траст файл со всеми сертификатами:
apt install -y ca-certificates
update-ca-certificates
Скачанные файлы переименовываем, меняем расширение с .pem
на .crt
:
rootCA.cert.pem
->rootCA.cert.crt
intermediateCA.cert.pem
->intermediateCA.cert.crt
Например, с помощью команды cp
выполняем:
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/
:
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
Обновляем объединенный траст файл со всеми сертификатами командой:
update-ca-certificates
Для ОС RHEL
, CentOS Stream
, Rocky Linux
, AlmaLinux
, Oracle Linux
, EuroLinux
, Fedora
и ОС на их базе
Устанавливаем пакет ca-certificates
:
dnf install -y ca-certificates
Для операционных систем 9-ой серии и выше (пример, RHEL 9, CentOS Stream 9 и т.д.) выполняем команду:
update-ca-trust
Для операционных систем ниже 9-ой серии (пример, Rocky Linux 8.x и т.д.) выполняем команды:
update-ca-trust force-enable
update-ca-trust enable
Для файлов сертификата корневого центра сертификации (rootCA.cert.pem
) и сертификата промежуточного центра сертификации (intermediateCA.cert.pem
) создаем символические ссылки в каталоге /etc/pki/ca-trust/source/anchors/
:
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) машины командой:
update-ca-trust extract
Для ОС Arch
, Bluestar
, Manjaro
, EndeavourOS
, Garuda
, Mabox
, RebornOS
, Archcraft
, ArchLabs
, CachyOS
и ОС на их базе
Устанавливаем пакет ca-certificates
и обновляем траст корневых сертификатов (CA Trust) машины:
pacman -Syu ca-certificates
update-ca-trust
Скачанные файлы переименовываем, меняем расширение с .pem
на .crt
:
rootCA.cert.pem
->rootCA.cert.crt
intermediateCA.cert.pem
->intermediateCA.cert.crt
Например, с помощью команды cp
выполняем:
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/
:
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) машины командой:
update-ca-trust extract
ОС: MacOS
Открываем приложение Связка ключей
.
Чтобы быстро открыть Связку ключей
, найдите ее через Spotlight
, затем нажмите клавишу Ввод
.
В категории Системные связки ключей
выбираем Система
, кликаем для открытия и выбора.
В меню Файл
выбираем Импортировать объекты
, выбираем файл сертификата корневого центра сертификации (rootCA.cert.pem
).
На вкладке Сертификаты
находим добавленный сертификат, выделяем его, в меню выбираем Свойства
.
В окне просмотра сертификата разворачиваем группу настроек Доверие
.
В настройке Параметры использования сертификата
выбираем Всегда доверять
.
Закрываем окно, подтверждаем доверие сертификата.
Аналогичным способом проходим путь для файла сертификата промежуточного центра сертификации (intermediateCA.cert.pem
).
Итог: после настройки выше переходим на сайт по URL с доменом dev.bx
, используя https
и порт 8589
в URL:
https://dev.bx:8589/
Устанавливаем дистрибутив, восстанавливаем бекап сайта - выбора за вами.
Выполняем подстройку сайта как указано выше в этом README-файле.
Страница Проверка системы
(/bitrix/admin/site_checker.php?lang=ru
) открывается по https
и сама проверка проходит, используя ssl
коннект вида:
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
):
rm -f /usr/local/share/ca-certificates/rootCA.cert.crt
rm -f /usr/local/share/ca-certificates/intermediateCA.cert.crt
Обновляем объединенный траст файл со всеми сертификатами командой:
update-ca-certificates
Для ОС RHEL
, CentOS Stream
, Rocky Linux
, AlmaLinux
, Oracle Linux
, EuroLinux
, Fedora
и ОС на их базе
Удаляем символические ссылки для файлов сертификата корневого центра сертификации (rootCA.cert.pem
) и сертификата промежуточного центра сертификации (intermediateCA.cert.pem
):
rm -f /etc/pki/ca-trust/source/anchors/rootCA.cert.pem
rm -f /etc/pki/ca-trust/source/anchors/intermediateCA.cert.pem
Обновляем траст корневых сертификатов (CA Trust) машины командой:
update-ca-trust extract
Для ОС Arch
, Bluestar
, Manjaro
, EndeavourOS
, Garuda
, Mabox
, RebornOS
, Archcraft
, ArchLabs
, CachyOS
и ОС на их базе
Удаляем символические ссылки для файлов сертификата корневого центра сертификации (rootCA.cert.crt
) и сертификата промежуточного центра сертификации (intermediateCA.cert.crt
):
rm -f /etc/ca-certificates/trust-source/anchors/rootCA.cert.crt
rm -f /etc/ca-certificates/trust-source/anchors/intermediateCA.cert.crt
Обновляем траст корневых сертификатов (CA Trust) машины командой:
update-ca-trust extract
Для удаления сертификатов центров сертификации в ОС MacOS
:
Откройте приложение Связка ключей
.
Чтобы быстро открыть Связку ключей
, найдите ее через Spotlight
, затем нажмите клавишу Ввод
.
В категории Системные связки ключей
выбираем Система
, кликаем для открытия и выбора.
Переходим на вкладку Сертификаты
.
Находим файл сертификата промежуточного центра сертификации (intermediateCA.cert.pem
).
Выбираем его и в меню кликаем Удалить
.
Подтверждаем удаление сертификата промежуточного центра сертификации из связки ключей Система
.
Аналогичным способом проходим путь для удаления из связки ключей Система
сертификата корневого центра сертификации (rootCA.cert.pem
).
Выпустить и использовать бесплатный SSL-сертификат от LetsEncrypt возможно с помощью отдельного контейнера lego
на базе образа bitrix24/lego
.
Внутри образа находится LetsEncrypt
клиент и ACME
библиотека, написанная на Go
. По сокращениям первых букв слов получаем название проекта LeGo
(GitHub, DockerHub).
Основные возможности проекта 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
челлендж и в итоге получить бесплатный SSL-сертификат, вам необходимо:
-
в управлении DNS-записями вашего домена добавить:
А
запись на один домен (singledomain), пример:example.dev
илиchat.example.dev
и т.д.A
записи для каждого из множества поддоменов домена (multidomain), пример:example.dev
,chat.example.dev
,forum.example.dev
и т.д.
-
с помощью сервиса https://dnschecker.org/ проверить распределение и доступность добавленных DNS-записей
-
запустить сайт, проверить что он отвечает по
http
и заданному домену из сети интернет, используя порт80
дляHTTP
челленджа -
запустить
HTTP
челлендж, указать домен, тип сертификата и другие параметры
Чтобы выполнить это задание, завершить DNS
челлендж и в итоге получить бесплатный SSL-сертификат, вам необходимо:
-
в управлении DNS-записями вашего домена добавить:
А
запись на один домен (singledomain), пример:example.dev
илиchat.example.dev
и т.д.A
записи для каждого из множества поддоменов домена (multidomain), пример:example.dev
,chat.example.dev
,forum.example.dev
и т.д.А
запись для множества имен домена (wildcard), пример:example.dev
или*.example.dev
-
с помощью сервиса https://dnschecker.org/ проверить распределение и доступность добавленных DNS-записей
-
запустить
DNS
челлендж, указать домен, тип сертификата и другие параметры
Заходим в sh-консоль контейнера lego
из-под пользователя bitrix
:
docker compose exec --user=bitrix lego sh
Основная точка входа - это команда /lego
, после которой следует набор параметров. Узнать их можно, добавив запрос справки help
одним из способов:
/lego help
/lego -h
/lego --help
Также можно узнать справку по выбранной команде, выполнив:
/lego run --help
/lego renew --help
/lego revoke --help
/lego list --help
/lego dnshelp --help
где:
run
- создание аккаунта, выпуск и установка ssl сертификатаrenew
- перевыпуск (обновление) ssl сертификатаrevoke
- отзыв ssl сертификатаlist
- отображение сертификатов и аккаунтовdnshelp
- справка по параметрам dns сервиса (для DNS челленджа)
Все возможные варианты параметров команд указаны в документации: https://go-acme.github.io/lego/usage/cli/options/index.html
Общая команда lego
для прохождения HTTP
челленджа имеет вид:
/lego \
[SERVER]
[TOS]
[EMAIL]
[PATH]
[DOMAINS]
[HTTP_PARAMS]
[TYPE]
где:
SERVER
- URL корневого центра сертификации (CA).
Для проверки работы всей цепочки используется stage
среда LetsEncrypt. Тогда блок принимает вид:
--server="https://acme-staging-v02.api.letsencrypt.org/directory"
Для использования в "боевом" режиме блок принимает вид:
--server="https://acme-v02.api.letsencrypt.org/directory"
TOS
- принятие текущих условий сервиса LetsEncrypt. Блок принимает вид:
--accept-tos
EMAIL
- адрес электронной почты, используемый для регистрации и восстановления контакта. Блок принимает вид:
--email "[email protected]"
PATH
- каталог, используемый для хранения данных.
В пути всегда должна быть папка /ssl/
, чтобы сертификаты можно было использовать в контейнере nginx
и прочих. Блок принимает вид:
--path="/ssl/site.dev/"
DOMAINS
- домен, для которого выпускаются или перевыпускаются SSL-сертификаты.
Если сертификат на один домен, то блок принимает вид:
--domains "site.dev"
В случае multidomain-сертификата домены можно указать несколько раз, блок принимает вид:
--domains "shop.site.dev"
--domains "wiki.site.dev"
--domains "forum.site.dev"
HTTP_PARAMS
- обязательный блок параметровHTTP
челленджа, нужно указать:
--http
--http.port ":80"
TYPE
- тип команды,run
- выпуск,renew
- перевыпуск и т.д. Блок принимает вид:
run
Итого, собрав все воедино, получаем следующие команды:
- выпуск сертификата на единственный домен
site.dev
с сохранением данных в папке/ssl
:
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "site.dev" \
--http \
--http.port ":80" \
run
- перевыпуск сертификата на домен
site.dev
:
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "site.dev" \
--http \
--http.port ":80" \
renew
- выпуск сертификата для нескольких доменов (
shop.site.dev
,wiki.site.dev
,forum.site.dev
) с сохранением данных в папке/ssl
, используяstage
среду:
/lego \
--server="https://acme-staging-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "shop.site.dev" \
--domains "wiki.site.dev" \
--domains "forum.site.dev" \
--http \
--http.port ":80" \
run
- перевыпуск сертификата для нескольких доменов, используя
stage
среду:
/lego \
--server="https://acme-staging-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "shop.site.dev" \
--domains "wiki.site.dev" \
--domains "forum.site.dev" \
--http \
--http.port ":80" \
renew
Общая команда lego
для прохождения DNS
челленджа имеет вид:
[API_STRING]
/lego \
[SERVER]
[TOS]
[EMAIL]
[PATH]
[DOMAINS]
[DNS_RESOLVERS]
[DNS_PROVIDER]
[TYPE]
где:
API_STRING
- строка с API выбранного DNS-провайдера. Приобретает разный вид в зависимости от API провайдера.
Узнать параметры строки можно через справку в команде lego
или на сайте проекта.
Пример для DNS-провайдера cloudflare
, команда:
/lego dnshelp --code cloudflare
Или документация на сайте: https://go-acme.github.io/lego/dns/cloudflare/index.html
В итоге блок кода размещается до команды /lego
и в нашем примере для DNS-провайдера cloudflare
принимает вид:
CLOUDFLARE_DNS_API_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
где XXXXXXXXX...
- API токен провайдера.
Для других DNS-провайдеров действуем аналогичным путем.
Документацию по всем DNS-провайдерам можно изучить на сайте: https://go-acme.github.io/lego/dns/index.html
SERVER
- URL корневого центра сертификации (CA).
Для проверки работы всей цепочки используется stage
среда LetsEncrypt. Тогда блок принимает вид:
--server="https://acme-staging-v02.api.letsencrypt.org/directory"
Для использования в "боевом" режиме блок принимает вид:
--server="https://acme-v02.api.letsencrypt.org/directory"
TOS
- принятие текущих условий сервиса LetsEncrypt. Блок принимает вид:
--accept-tos
EMAIL
- адрес электронной почты, используемый для регистрации и восстановления контакта. Блок принимает вид:
--email "[email protected]"
PATH
- каталог, используемый для хранения данных.
В пути всегда должна быть папка /ssl/
, чтобы сертификаты можно было использовать в контейнере nginx
и прочих. Блок принимает вид:
--path="/ssl/site.dev/"
DOMAINS
- домен, для которого выпускаются или перевыпускаются SSL-сертификаты.
Если сертификат на один домен, то блок принимает вид:
--domains "site.dev"
В случае multidomain-сертификата домены можно указать несколько раз, блок принимает вид:
--domains "shop.site.dev"
--domains "wiki.site.dev"
--domains "forum.site.dev"
В случае wildcard-сертификата нужно указать домен и *.домен, блок принимает вид:
--domains "site.dev"
--domains "*.site.dev"
DNS_RESOLVERS
- список DNS-резолверов, используемых для рекурсивного сканирования DNS записей домена. Одна или несколько строчек в форматеhost:port
, блок принимает вид:
--dns.resolvers 1.1.1.1:53
--dns.resolvers 8.8.8.8:53
--dns.resolvers 9.9.9.9:53
--dns.resolvers 1.0.0.1:53
--dns.resolvers 8.8.4.4:53
DNS_PROVIDER
- короткое название используемого провайдера для прохождения DNS челленджа, например, блок принимает вид:
--dns cloudflare
Полный список всех DNS-провайдеров доступен в документации: https://go-acme.github.io/lego/dns/index.html
TYPE
- тип команды,run
- выпуск,renew
- перевыпуск и т.д. Блок принимает вид:
run
Итого, собрав все воедино, получаем следующие команды (в примерах используется cloudflare
):
- выпуск сертификата на единственный домен
site.dev
с сохранением данных в папке/ssl
, используя DNS-провайдерcloudflare
, обращаясь к API с токеномCLOUDFLARE_DNS_API_TOKEN
:
CLOUDFLARE_DNS_API_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "site.dev" \
--dns.resolvers 1.1.1.1:53 \
--dns.resolvers 8.8.8.8:53 \
--dns.resolvers 9.9.9.9:53 \
--dns.resolvers 1.0.0.1:53 \
--dns.resolvers 8.8.4.4:53 \
--dns cloudflare \
run
- перевыпуск сертификата на домен
site.dev
:
CLOUDFLARE_DNS_API_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "site.dev" \
--dns.resolvers 1.1.1.1:53 \
--dns.resolvers 8.8.8.8:53 \
--dns.resolvers 9.9.9.9:53 \
--dns.resolvers 1.0.0.1:53 \
--dns.resolvers 8.8.4.4:53 \
--dns cloudflare \
renew
- выпуск сертификата для нескольких доменов (
shop.site.dev
,wiki.site.dev
,forum.site.dev
) с сохранением данных в папке/ssl
, используяstage
среду и DNS-провайдерcloudflare
, обращаясь к API с токеномCLOUDFLARE_DNS_API_TOKEN
:
CLOUDFLARE_DNS_API_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
/lego \
--server="https://acme-staging-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "shop.site.dev" \
--domains "wiki.site.dev" \
--domains "forum.site.dev" \
--dns.resolvers 1.1.1.1:53 \
--dns.resolvers 8.8.8.8:53 \
--dns.resolvers 9.9.9.9:53 \
--dns.resolvers 1.0.0.1:53 \
--dns.resolvers 8.8.4.4:53 \
--dns cloudflare \
run
- перевыпуск сертификата для нескольких доменов, используя
stage
среду:
CLOUDFLARE_DNS_API_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
/lego \
--server="https://acme-staging-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "shop.site.dev" \
--domains "wiki.site.dev" \
--domains "forum.site.dev" \
--dns.resolvers 1.1.1.1:53 \
--dns.resolvers 8.8.8.8:53 \
--dns.resolvers 9.9.9.9:53 \
--dns.resolvers 1.0.0.1:53 \
--dns.resolvers 8.8.4.4:53 \
--dns cloudflare \
renew
- выпуск wildcard-сертификата на множество поддоменов основного домена (
site.dev
,*.site.dev
) с сохранением данных в папке/ssl
, используя DNS-провайдерcloudflare
, обращаясь к API с токеномCLOUDFLARE_DNS_API_TOKEN
:
CLOUDFLARE_DNS_API_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "site.dev" \
--domains "*.site.dev" \
--dns.resolvers 1.1.1.1:53 \
--dns.resolvers 8.8.8.8:53 \
--dns.resolvers 9.9.9.9:53 \
--dns.resolvers 1.0.0.1:53 \
--dns.resolvers 8.8.4.4:53 \
--dns cloudflare \
run
- перевыпуск сертификата для нескольких доменов, используя
stage
среду:
CLOUDFLARE_DNS_API_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/site.dev/" \
--domains "site.dev" \
--domains "*.site.dev" \
--dns.resolvers 1.1.1.1:53 \
--dns.resolvers 8.8.8.8:53 \
--dns.resolvers 9.9.9.9:53 \
--dns.resolvers 1.0.0.1:53 \
--dns.resolvers 8.8.4.4:53 \
--dns cloudflare \
renew
Рассмотрим процедуру получения SSL-сертификатов на практике.
Для примера используем настоящий домен proqacf.fun
, запустим все челленджи, получим ответы и настоящие "боевые" сертификаты для домена(ов).
Caution
Внимание! Данные в публикуемых ответах слегка изменены для их безопасности.
Запрос:
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/singledomain.http.b24.proqacf.fun/" \
--domains "b24.proqacf.fun" \
--http \
--http.port ":80" \
run
Ответ:
2025/04/30 23:17:03 No key found for account [email protected]. Generating a P256 key.
2025/04/30 23:17:03 Saved key to /ssl/singledomain.http.b24.proqacf.fun/accounts/acme-v02.api.letsencrypt.org/[email protected]/keys/[email protected]
2025/04/30 23:17:04 [INFO] acme: Registering account for [email protected]
!!!! HEADS UP !!!!
Your account credentials have been saved in your
configuration directory at "/ssl/singledomain.http.b24.proqacf.fun/accounts".
You should make a secure backup of this folder now. This
configuration directory will also contain certificates and
private keys obtained from the ACME server so making regular
backups of this folder is ideal.
2025/04/30 23:17:04 [INFO] [b24.proqacf.fun] acme: Obtaining bundled SAN certificate
2025/04/30 23:17:05 [INFO] [b24.proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197567964/1710482XXXX
2025/04/30 23:17:05 [INFO] [b24.proqacf.fun] acme: Could not find solver for: tls-alpn-01
2025/04/30 23:17:05 [INFO] [b24.proqacf.fun] acme: use http-01 solver
2025/04/30 23:17:05 [INFO] [b24.proqacf.fun] acme: Trying to solve HTTP-01
2025/04/30 23:17:06 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:06 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:06 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:06 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:06 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:13 [INFO] [b24.proqacf.fun] The server validated our request
2025/04/30 23:17:13 [INFO] [b24.proqacf.fun] acme: Validations succeeded; requesting certificates
2025/04/30 23:17:13 [INFO] Wait for certificate [timeout: 30s, interval: 500ms]
2025/04/30 23:17:15 [INFO] [b24.proqacf.fun] Server responded with a certificate.
Последняя строка в ответе Server responded with a certificate
означает успешное выполнение задания и выпуск SSL-сертификата.
Файлы сертификатов будут расположены в папке /ssl/singledomain.http.b24.proqacf.fun/certificates/
.
Запрос:
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/multidomain.http.all.proqacf.fun/" \
--domains "b24.proqacf.fun" \
--domains "wiki.proqacf.fun" \
--domains "shop.proqacf.fun" \
--http \
--http.port ":80" \
run
Ответ:
2025/04/30 23:17:30 No key found for account [email protected]. Generating a P256 key.
2025/04/30 23:17:30 Saved key to /ssl/multidomain.http.all.proqacf.fun/accounts/acme-v02.api.letsencrypt.org/[email protected]/keys/[email protected]
2025/04/30 23:17:31 [INFO] acme: Registering account for [email protected]
!!!! HEADS UP !!!!
Your account credentials have been saved in your
configuration directory at "/ssl/multidomain.http.all.proqacf.fun/accounts".
You should make a secure backup of this folder now. This
configuration directory will also contain certificates and
private keys obtained from the ACME server so making regular
backups of this folder is ideal.
2025/04/30 23:17:31 [INFO] [b24.proqacf.fun, wiki.proqacf.fun, shop.proqacf.fun] acme: Obtaining bundled SAN certificate
2025/04/30 23:17:32 [INFO] [b24.proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197567994/1710483XXXX
2025/04/30 23:17:32 [INFO] [shop.proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197567994/1710483XXXX
2025/04/30 23:17:32 [INFO] [wiki.proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197567994/1710483XXXX
2025/04/30 23:17:32 [INFO] [b24.proqacf.fun] acme: Could not find solver for: tls-alpn-01
2025/04/30 23:17:32 [INFO] [b24.proqacf.fun] acme: use http-01 solver
2025/04/30 23:17:32 [INFO] [shop.proqacf.fun] acme: Could not find solver for: tls-alpn-01
2025/04/30 23:17:32 [INFO] [shop.proqacf.fun] acme: use http-01 solver
2025/04/30 23:17:32 [INFO] [wiki.proqacf.fun] acme: Could not find solver for: tls-alpn-01
2025/04/30 23:17:32 [INFO] [wiki.proqacf.fun] acme: use http-01 solver
2025/04/30 23:17:32 [INFO] [b24.proqacf.fun] acme: Trying to solve HTTP-01
2025/04/30 23:17:32 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:33 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:33 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:33 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:33 [INFO] [b24.proqacf.fun] Served key authentication
2025/04/30 23:17:35 [INFO] [b24.proqacf.fun] The server validated our request
2025/04/30 23:17:35 [INFO] [shop.proqacf.fun] acme: Trying to solve HTTP-01
2025/04/30 23:17:35 [INFO] [shop.proqacf.fun] Served key authentication
2025/04/30 23:17:36 [INFO] [shop.proqacf.fun] Served key authentication
2025/04/30 23:17:36 [INFO] [shop.proqacf.fun] Served key authentication
2025/04/30 23:17:36 [INFO] [shop.proqacf.fun] Served key authentication
2025/04/30 23:17:36 [INFO] [shop.proqacf.fun] Served key authentication
2025/04/30 23:17:38 [INFO] [shop.proqacf.fun] The server validated our request
2025/04/30 23:17:38 [INFO] [wiki.proqacf.fun] acme: Trying to solve HTTP-01
2025/04/30 23:17:39 [INFO] [wiki.proqacf.fun] Served key authentication
2025/04/30 23:17:39 [INFO] [wiki.proqacf.fun] Served key authentication
2025/04/30 23:17:39 [INFO] [wiki.proqacf.fun] Served key authentication
2025/04/30 23:17:39 [INFO] [wiki.proqacf.fun] Served key authentication
2025/04/30 23:17:39 [INFO] [wiki.proqacf.fun] Served key authentication
2025/04/30 23:17:43 [INFO] [wiki.proqacf.fun] The server validated our request
2025/04/30 23:17:43 [INFO] [b24.proqacf.fun, wiki.proqacf.fun, shop.proqacf.fun] acme: Validations succeeded; requesting certificates
2025/04/30 23:17:43 [INFO] Wait for certificate [timeout: 30s, interval: 500ms]
2025/04/30 23:17:45 [INFO] [b24.proqacf.fun] Server responded with a certificate.
Последняя строка в ответе Server responded with a certificate
означает успешное выполнение задания и выпуск SSL-сертификата.
Файлы сертификатов будут расположены в папке /ssl/multidomain.http.all.proqacf.fun/certificates/
.
Запрос:
CLOUDFLARE_DNS_API_TOKEN=A3n9tXXX-BuiBd5RlITXXXXXX-5LBuWreZXXXXXX \
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/singledomain.dns.b25.proqacf.fun/" \
--domains "b25.proqacf.fun" \
--dns.resolvers 1.1.1.1:53 \
--dns.resolvers 8.8.8.8:53 \
--dns.resolvers 9.9.9.9:53 \
--dns.resolvers 1.0.0.1:53 \
--dns.resolvers 8.8.4.4:53 \
--dns cloudflare \
run
Ответ:
2025/04/30 23:20:07 [INFO] [b25.proqacf.fun] acme: Obtaining bundled SAN certificate
2025/04/30 23:20:08 [INFO] [b25.proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197568154/1710485XXXX
2025/04/30 23:20:08 [INFO] [b25.proqacf.fun] acme: Could not find solver for: tls-alpn-01
2025/04/30 23:20:08 [INFO] [b25.proqacf.fun] acme: Could not find solver for: http-01
2025/04/30 23:20:08 [INFO] [b25.proqacf.fun] acme: use dns-01 solver
2025/04/30 23:20:08 [INFO] [b25.proqacf.fun] acme: Preparing to solve DNS-01
2025/04/30 23:20:10 [INFO] cloudflare: new record for b25.proqacf.fun, ID fbc9f8e6f11bd574496a8d9135a4XXXX
2025/04/30 23:20:10 [INFO] [b25.proqacf.fun] acme: Trying to solve DNS-01
2025/04/30 23:20:11 [INFO] [b25.proqacf.fun] acme: Checking DNS record propagation. [nameservers=1.1.1.1:53,8.8.8.8:53,9.9.9.9:53,1.0.0.1:53,8.8.4.4:53]
2025/04/30 23:20:13 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2025/04/30 23:20:13 [INFO] [b25.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:20:15 [INFO] [b25.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:20:20 [INFO] [b25.proqacf.fun] The server validated our request
2025/04/30 23:20:20 [INFO] [b25.proqacf.fun] acme: Cleaning DNS-01 challenge
2025/04/30 23:20:21 [INFO] [b25.proqacf.fun] acme: Validations succeeded; requesting certificates
2025/04/30 23:20:21 [INFO] Wait for certificate [timeout: 30s, interval: 500ms]
2025/04/30 23:20:24 [INFO] [b25.proqacf.fun] Server responded with a certificate.
Последняя строка в ответе Server responded with a certificate
означает успешное выполнение задания и выпуск SSL-сертификата.
Файлы сертификатов будут расположены в папке /ssl/singledomain.dns.b25.proqacf.fun/
.
Запрос:
CLOUDFLARE_DNS_API_TOKEN=A3n9tXXX-BuiBd5RlITXXXXXX-5LBuWreZXXXXXX \
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/multidomain.dns.all.proqacf.fun/" \
--domains "b25.proqacf.fun" \
--domains "wiki.proqacf.fun" \
--domains "shop.proqacf.fun" \
--dns.resolvers 1.1.1.1:53 \
--dns.resolvers 8.8.8.8:53 \
--dns.resolvers 9.9.9.9:53 \
--dns.resolvers 1.0.0.1:53 \
--dns.resolvers 8.8.4.4:53 \
--dns cloudflare \
run
Ответ:
2025/04/30 23:21:20 No key found for account [email protected]. Generating a P256 key.
2025/04/30 23:21:20 Saved key to /ssl/multidomain.dns.all.proqacf.fun/accounts/acme-v02.api.letsencrypt.org/[email protected]/keys/[email protected]
2025/04/30 23:21:21 [INFO] acme: Registering account for [email protected]
!!!! HEADS UP !!!!
Your account credentials have been saved in your
configuration directory at "/ssl/multidomain.dns.all.proqacf.fun/accounts".
You should make a secure backup of this folder now. This
configuration directory will also contain certificates and
private keys obtained from the ACME server so making regular
backups of this folder is ideal.
2025/04/30 23:21:21 [INFO] [b25.proqacf.fun, wiki.proqacf.fun, shop.proqacf.fun] acme: Obtaining bundled SAN certificate
2025/04/30 23:21:22 [INFO] [b25.proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197568584/1710486XXXX
2025/04/30 23:21:22 [INFO] [shop.proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197568584/1710486XXXX
2025/04/30 23:21:22 [INFO] [wiki.proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197568584/1710486XXXX
2025/04/30 23:21:22 [INFO] [b25.proqacf.fun] acme: Could not find solver for: tls-alpn-01
2025/04/30 23:21:22 [INFO] [b25.proqacf.fun] acme: Could not find solver for: http-01
2025/04/30 23:21:22 [INFO] [b25.proqacf.fun] acme: use dns-01 solver
2025/04/30 23:21:22 [INFO] [shop.proqacf.fun] acme: Could not find solver for: tls-alpn-01
2025/04/30 23:21:22 [INFO] [shop.proqacf.fun] acme: Could not find solver for: http-01
2025/04/30 23:21:22 [INFO] [shop.proqacf.fun] acme: use dns-01 solver
2025/04/30 23:21:22 [INFO] [wiki.proqacf.fun] acme: Could not find solver for: tls-alpn-01
2025/04/30 23:21:22 [INFO] [wiki.proqacf.fun] acme: Could not find solver for: http-01
2025/04/30 23:21:22 [INFO] [wiki.proqacf.fun] acme: use dns-01 solver
2025/04/30 23:21:22 [INFO] [b25.proqacf.fun] acme: Preparing to solve DNS-01
2025/04/30 23:21:25 [INFO] cloudflare: new record for b25.proqacf.fun, ID d7988d0a8952175b7480b2636065XXXX
2025/04/30 23:21:25 [INFO] [shop.proqacf.fun] acme: Preparing to solve DNS-01
2025/04/30 23:21:26 [INFO] cloudflare: new record for shop.proqacf.fun, ID e202bae64f3cb22c8ae543fb6563XXXX
2025/04/30 23:21:26 [INFO] [wiki.proqacf.fun] acme: Preparing to solve DNS-01
2025/04/30 23:21:27 [INFO] cloudflare: new record for wiki.proqacf.fun, ID e7c3e21d948f97315cb4cb6c4f1dXXXX
2025/04/30 23:21:27 [INFO] [b25.proqacf.fun] acme: Trying to solve DNS-01
2025/04/30 23:21:27 [INFO] [b25.proqacf.fun] acme: Checking DNS record propagation. [nameservers=1.1.1.1:53,8.8.8.8:53,9.9.9.9:53,1.0.0.1:53,8.8.4.4:53]
2025/04/30 23:21:29 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2025/04/30 23:21:29 [INFO] [b25.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:21:38 [INFO] [b25.proqacf.fun] The server validated our request
2025/04/30 23:21:38 [INFO] [shop.proqacf.fun] acme: Trying to solve DNS-01
2025/04/30 23:21:38 [INFO] [shop.proqacf.fun] acme: Checking DNS record propagation. [nameservers=1.1.1.1:53,8.8.8.8:53,9.9.9.9:53,1.0.0.1:53,8.8.4.4:53]
2025/04/30 23:21:40 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2025/04/30 23:21:40 [INFO] [shop.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:21:42 [INFO] [shop.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:21:45 [INFO] [shop.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:21:47 [INFO] [shop.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:21:49 [INFO] [shop.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:21:55 [INFO] [shop.proqacf.fun] The server validated our request
2025/04/30 23:21:55 [INFO] [wiki.proqacf.fun] acme: Trying to solve DNS-01
2025/04/30 23:21:55 [INFO] [wiki.proqacf.fun] acme: Checking DNS record propagation. [nameservers=1.1.1.1:53,8.8.8.8:53,9.9.9.9:53,1.0.0.1:53,8.8.4.4:53]
2025/04/30 23:21:57 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2025/04/30 23:22:03 [INFO] [wiki.proqacf.fun] The server validated our request
2025/04/30 23:22:03 [INFO] [b25.proqacf.fun] acme: Cleaning DNS-01 challenge
2025/04/30 23:22:04 [INFO] [shop.proqacf.fun] acme: Cleaning DNS-01 challenge
2025/04/30 23:22:05 [INFO] [wiki.proqacf.fun] acme: Cleaning DNS-01 challenge
2025/04/30 23:22:06 [INFO] [b25.proqacf.fun, wiki.proqacf.fun, shop.proqacf.fun] acme: Validations succeeded; requesting certificates
2025/04/30 23:22:06 [INFO] Wait for certificate [timeout: 30s, interval: 500ms]
2025/04/30 23:22:09 [INFO] [b25.proqacf.fun] Server responded with a certificate.
Последняя строка в ответе Server responded with a certificate
означает успешное выполнение задания и выпуск SSL-сертификата.
Файлы сертификатов будут расположены в папке /ssl/multidomain.dns.all.proqacf.fun/
.
Запрос:
CLOUDFLARE_DNS_API_TOKEN=A3n9tXXX-BuiBd5RlITXXXXXX-5LBuWreZXXXXXX \
/lego \
--server="https://acme-v02.api.letsencrypt.org/directory" \
--accept-tos \
--email "[email protected]" \
--path="/ssl/wildcard.dns.proqacf.fun/" \
--domains "proqacf.fun" \
--domains "*.proqacf.fun" \
--dns.resolvers 1.1.1.1:53 \
--dns.resolvers 8.8.8.8:53 \
--dns.resolvers 9.9.9.9:53 \
--dns.resolvers 1.0.0.1:53 \
--dns.resolvers 8.8.4.4:53 \
--dns cloudflare \
run
Ответ:
2025/04/30 23:24:23 No key found for account [email protected]. Generating a P256 key.
2025/04/30 23:24:23 Saved key to /ssl/wildcard.dns.proqacf.fun/accounts/acme-v02.api.letsencrypt.org/[email protected]/keys/[email protected]
2025/04/30 23:24:24 [INFO] acme: Registering account for [email protected]
!!!! HEADS UP !!!!
Your account credentials have been saved in your
configuration directory at "/ssl/wildcard.dns.proqacf.fun/accounts".
You should make a secure backup of this folder now. This
configuration directory will also contain certificates and
private keys obtained from the ACME server so making regular
backups of this folder is ideal.
2025/04/30 23:24:24 [INFO] [proqacf.fun, *.proqacf.fun] acme: Obtaining bundled SAN certificate
2025/04/30 23:24:25 [INFO] [*.proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197568934/1710489XXXX
2025/04/30 23:24:25 [INFO] [proqacf.fun] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/197568934/1710489XXXX
2025/04/30 23:24:25 [INFO] [*.proqacf.fun] acme: use dns-01 solver
2025/04/30 23:24:25 [INFO] [proqacf.fun] acme: Could not find solver for: tls-alpn-01
2025/04/30 23:24:25 [INFO] [proqacf.fun] acme: Could not find solver for: http-01
2025/04/30 23:24:25 [INFO] [proqacf.fun] acme: use dns-01 solver
2025/04/30 23:24:25 [INFO] [*.proqacf.fun] acme: Preparing to solve DNS-01
2025/04/30 23:24:27 [INFO] cloudflare: new record for proqacf.fun, ID 89d9516b6d1eb7c3dab27a614e2cXXXX
2025/04/30 23:24:27 [INFO] [proqacf.fun] acme: Preparing to solve DNS-01
2025/04/30 23:24:28 [INFO] cloudflare: new record for proqacf.fun, ID f6b4267536ad6391637367c10c27XXXX
2025/04/30 23:24:28 [INFO] [*.proqacf.fun] acme: Trying to solve DNS-01
2025/04/30 23:24:28 [INFO] [*.proqacf.fun] acme: Checking DNS record propagation. [nameservers=1.1.1.1:53,8.8.8.8:53,9.9.9.9:53,1.0.0.1:53,8.8.4.4:53]
2025/04/30 23:24:30 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2025/04/30 23:24:30 [INFO] [*.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:24:33 [INFO] [*.proqacf.fun] acme: Waiting for DNS record propagation.
2025/04/30 23:24:40 [INFO] [*.proqacf.fun] The server validated our request
2025/04/30 23:24:40 [INFO] [proqacf.fun] acme: Trying to solve DNS-01
2025/04/30 23:24:40 [INFO] [proqacf.fun] acme: Checking DNS record propagation. [nameservers=1.1.1.1:53,8.8.8.8:53,9.9.9.9:53,1.0.0.1:53,8.8.4.4:53]
2025/04/30 23:24:42 [INFO] Wait for propagation [timeout: 2m0s, interval: 2s]
2025/04/30 23:24:49 [INFO] [proqacf.fun] The server validated our request
2025/04/30 23:24:49 [INFO] [*.proqacf.fun] acme: Cleaning DNS-01 challenge
2025/04/30 23:24:50 [INFO] [proqacf.fun] acme: Cleaning DNS-01 challenge
2025/04/30 23:24:50 [INFO] [proqacf.fun, *.proqacf.fun] acme: Validations succeeded; requesting certificates
2025/04/30 23:24:50 [INFO] Wait for certificate [timeout: 30s, interval: 500ms]
2025/04/30 23:24:53 [INFO] [proqacf.fun] Server responded with a certificate.
Последняя строка в ответе Server responded with a certificate
означает успешное выполнение задания и выпуск SSL-сертификата.
Файлы сертификатов будут расположены в папке /ssl/wildcard.dns.proqacf.fun/
.
После выпуска SSL-сертификатов одним из способов выше нам нужно в SSL конфигурацию nginx
прописать новые сертификаты.
Пример ниже для домена proqacf.fun
, wildcard-сертификаты выпущены и содержатся в папке /ssl/wildcard.dns.proqacf.fun/
.
Заходим в sh-консоль контейнера nginx
из-под пользователя root
:
docker compose exec --user=root nginx sh
Выполняем:
apk add mc
exit
Заходим в sh-консоль контейнера nginx
из-под пользователя bitrix
:
docker compose exec --user=bitrix nginx sh
Редактируем файл /etc/nginx/ssl/ssl.conf
:
mcedit /etc/nginx/ssl/ssl.conf
Меняем настройки для опций ssl_*
:
ssl_certificate /ssl/wildcard.dns.proqacf.fun/certificates/proqacf.fun.crt;
ssl_certificate_key /ssl/wildcard.dns.proqacf.fun/certificates/proqacf.fun.key;
ssl_trusted_certificate /ssl/wildcard.dns.proqacf.fun/certificates/proqacf.fun.issuer.crt;
ssl_dhparam /ssl/dhparam.pem;
Выходим из консоли контейнера и проверяем настройки nginx
:
docker compose exec --user=bitrix nginx sh -c "nginx -t"
Если никаких ошибок нет, перезапускаем контейнер nginx
:
docker compose restart nginx
Итог: после настройки выше переходим на сайт по URL с доменом b24.proqacf.fun
, используя https
и порт 8589
в URL:
https://b24.proqacf.fun:8589/
Работа сайта перешла на безопасную схему, используется https
, ssl
, wss
и т.д. Никаких дополнительных манипуляций внутри контейнеров не требуется.
Для входа в консоль контейнера используется следующий шаблон команды:
docker compose exec [--user=[пользователь]] [сервис] [оболочка]
Где:
пользователь
: пользователь ОС внутри контейнера:- если пусто и ничего не указывать, берется поведение по умолчанию
- для пользователя
bitrix
шаблон команды принимает вид--user=bitrix
- для пользователя
root
шаблон команды выглядит как--user=root
сервис
: имя сервиса, указанное в файлеdocker-compose.yml
, примерmysql
,nginx
,php
и т.д.оболочка
: тип запускаемой оболочки внутри контейнера, примерsh
,bash
,ash
и т.д.
В результате возможны варианты вида:
- заходим в bash-консоль контейнера
mysql
, пользователя не указываем:
docker compose exec mysql bash
- заходим в sh-консоль контейнера
php
из-под пользователяbitrix
:
docker compose exec --user=bitrix php sh
- заходим в sh-консоль контейнера
php
из-под пользователяroot
:
docker compose exec --user=root php sh
Также можно выполнять команды, указав параметр -c
и саму команду, пример запроса id
:
docker compose exec --user=root redis sh -c "id"
Заходим в bash-консоль контейнера mysql
, выполняя команду входа в консоль mysql
из-под пользователя root
базы данных:
docker compose exec mysql bash -c "mysql -u root -p"
Вводим пароль суперпользователя root
, который был создан вами в главе Пароли к базам данных MySQL и PostgreSQL. Его значение хранится в файле .env_sql
.
Выполняем SQL-запросы. Для выхода вводим exit
.
Заходим в bash-консоль контейнера postgres
, выполняя команду входа в консоль psql
из-под пользователя postgres
базы данных:
docker compose exec --user=postgres postgres bash -c "psql"
Вводим пароль суперпользователя postgres
, который был создан вами в главе Пароли к базам данных MySQL и PostgreSQL. Его значение хранится в файле .env_sql
.
Выполняем SQL-запросы. Для выхода вводим \q
.
Заходим в sh-консоль контейнера memcached
, запуская консоль nc
, указывая хост 127.0.0.1
и порт 11211
:
docker compose exec --user=root memcached sh -c "nc 127.0.0.1 11211"
Выполняем запросы (пример, stats
). Для выхода вводим exit
.
Заходим в sh-консоль контейнера redis
, запуская консоль redis-cli
, указывая хост 127.0.0.1
и порт 6379
:
docker compose exec --user=root redis sh -c "redis-cli -h 127.0.0.1 -p 6379"
Выполняем запросы (пример, ping
или KEYS *
). Для выхода вводим exit
.
Конечно же, встает вопрос "как мне запустить свои разработки" рядом с проектом или внутри него.
Есть два пути, позволяющие это сделать:
- создать отдельный
docker-compose-my.yml
файл, разместить код внутри файла - описать тома, сервисы, сеть и т.д.
Тогда во всех командах указываем .yml
файлы через опцию -f
, пример:
docker compose -f docker-compose.yml -f docker-compose-my.yml ps
- интеграция в существующий
docker-compose.yml
файл проекта - добавить тома, сервисы, указать сеть и т.д.
Для примера, запустим Valkey, добавив его в проект в существующий yml
файл.
На странице valkey на DockerHub-е находим нужный нам тег, пример 7.2.9-alpine
.
Редактируем docker-compose.yml
файл:
- в раздел
volumes
добавляем описание тома:
valkey_data:
driver: local
- в раздел
services
добавляем описание сервиса:
valkey:
image: valkey/valkey:7.2.9-alpine
container_name: dev_valkey
restart: unless-stopped
command: valkey-server
env_file:
- .env
# ports:
# - "6379:6379"
volumes:
- valkey_data:/data
init: true
cgroup: private
security_opt:
- no-new-privileges
cap_drop:
- ALL
cap_add:
- CHOWN
- SETUID
- SETGID
tmpfs:
- /tmp:noexec,nodev,nosuid
- /var/tmp:noexec,nodev,nosuid
- /dev/shm:noexec,nodev,nosuid
networks:
dev:
aliases:
- valkey
Запускаем контейнеры, оставляем их работать в фоне:
docker compose up -d
Заходим в sh-консоль контейнера valkey
, запуская консоль valkey-cli
, указывая хост 127.0.0.1
и порт 6379
:
docker compose exec --user=root valkey sh -c "valkey-cli -h 127.0.0.1 -p 6379"
Выполняем запросы (пример, ping
или KEYS *
). Выходим exit
.
Итого: мы успешно запустили новый контейнер valkey
, проверили его работу. Теперь его можно использовать для хранения кеша или хранения сессий по примеру, как описано выше в главе Memcache и Redis.
По умолчанию в проекте используются следующие программы и их версии:
Memcached 1.6.x
Redis 7.2.x
PostgreSQL 16.x
Percona Server 8.0.x
PHP 8.2.x
Nginx 1.28.x
Sphinx 2.2.11
Lego 4.23.x
Проект позволяет использовать альтернативные версии программ в случае, если текущие версии не удовлетворяют требованиям.
Доступные альтернативные версии Redis: 7.4.x
, 8.0.x
.
Разберем пример использования версии 7.4.x
вместо текущей версии 7.2.x
.
До первого запуска проекта редактируем файл docker-compose.yml
, в разделе services
находим сервис redis
. В строку с текущей версией 7.2.x
добавляем #
, в строке с версией 7.4.x
убираем #
. Итоговый вид:
#image: redis:7.2.9-alpine
image: redis:7.4.4-alpine
#image: redis:8.0.2-alpine
Запускаем все контейнеры, оставляем их работать в фоне:
docker compose up -d
Таким образом Redis будет использовать контейнер с версией 7.4.4
.
Для версии 8.0.x
настройку выполняем аналогичным образом.
Доступные альтернативные версии PostgreSQL: 14.x
, 15.x
, 17.x
.
Разберем пример использования версии 17.x
вместо текущей версии 16.x
.
До первого запуска проекта редактируем файл docker-compose.yml
, в разделе services
находим сервис postgres
. В строку с текущей версией 16.x
добавляем #
, в строке с версией 17.x
убираем #
. Итоговый вид:
#image: postgres:14.18-bookworm
#image: postgres:15.13-bookworm
#image: postgres:16.9-bookworm
image: postgres:17.5-bookworm
Запускаем все контейнеры, оставляем их работать в фоне:
docker compose up -d
Таким образом PostgreSQL будет использовать контейнер с версией 17.5
.
Для версий 14.x
или 15.x
настройку выполняем аналогичные образом.
Доступные альтернативные версии MySQL (Percona Server): 8.4.x
.
Разберем пример использования версии 8.4.x
вместо текущей версии 8.0.x
.
До первого запуска проекта редактируем файл docker-compose.yml
, в разделе services
находим сервис mysql
. В строку с текущей версией 8.0.x
добавляем #
, в строке с версией 8.4.x
убираем #
. Итоговый вид:
#image: quay.io/bitrix24/percona-server:8.0.42-v1-rhel
image: quay.io/bitrix24/percona-server:8.4.5-v1-rhel
Запускаем все контейнеры, оставляем их работать в фоне:
docker compose up -d
Таким образом MySQL будет использовать контейнер с версией 8.4.5
.
Доступные альтернативные версии PHP: 8.3.x
, 8.4.x
.
Разберем пример использования версии 8.3.x
вместо текущей версии 8.2.x
.
До первого запуска проекта редактируем файл docker-compose.yml
, в разделе services
находим сервис php
.
В строку с текущей версией 8.2.x
добавляем #
, в строке с версией 8.3.x
убираем #
:
php:
#image: quay.io/bitrix24/php:8.2.28-fpm-v1-alpine
image: quay.io/bitrix24/php:8.3.22-fpm-v1-alpine
#image: quay.io/bitrix24/php:8.4.8-fpm-v1-alpine
В секции volumes
в строку с текущей версией .../82/...
добавляем #
, в строке с версией .../83/...
убираем #
:
volumes:
#- ./confs/php82/etc/:/usr/local/etc/
- ./confs/php83/etc/:/usr/local/etc/
#- ./confs/php84/etc/:/usr/local/etc/
Продолжаем редактировать файл docker-compose.yml
, в разделе services
находим сервис cron
. Повторяем настройку таким же образом, как описано для сервиса php
выше.
Запускаем все контейнеры, оставляем их работать в фоне:
docker compose up -d
Таким образом PHP и Cron будут использовать контейнеры с версией 8.3.x
. Читать и применять настройки из одного каталога для версии 8.3.x
.
Для версии 8.4.x
все шаги выше выполняем аналогичным образом.
Наша цель - подготовить или собрать максимально совместимые и готовые образы для продуктов компании 1С-Битрикс, запускающие набор ПО в контейнерах.
Там где возможно будем использовать официальные Docker образы ПО, теги для которых будем брать с DockerHub:
PostgreSQL
: https://hub.docker.com/_/postgresRedis
: https://hub.docker.com/_/redisMemcached
: https://hub.docker.com/_/memcached
В этот список попадают (формат название
:полный_тег_с_указанием_версии_и_ос
):
postgres:16.9-bookworm
redis:7.2.9-alpine
memcached:1.6.38-alpine
Можно предварительно скачать ПО из списка выше с помощью команд:
docker pull postgres:16.9-bookworm
docker pull redis:7.2.9-alpine
docker pull memcached:1.6.38-alpine
Caution
Внимание! Сборку образов необходимо проводить в продукте Docker Desktop
в связи с наличием в сборщике двух архитектур: x86_64
(для amd64
) и aarch64
(для arm64
).
Также нам понадобятся:
- база данных MySQL:
- используем стабильный образ
percona/percona-server:8.0.42
/percona/percona-server:8.4.5
- добавляем слоем сверху конфигурацию бд
- собираем
bitrix24/percona-server:8.0.42-v1-rhel
/bitrix24/percona-server:8.4.5-v1-rhel
- используем стабильный образ
- веб-сервер:
- используем стабильный образ
nginx:1.28.0-alpine-slim
- добавляем модули слоем сверху
- собираем
bitrix24/nginx:1.28.0-v1-alpine
- используем стабильный образ
- интерпретатор PHP-кода:
- готового совместимого образа PHP нет
- берем по умолчанию образ
php:8.2.28-fpm-alpine
/php:8.3.22-fpm-alpine
/php:8.4.8-fpm-alpine
и добавляем то, что нам надо через пару слоев сверху - собираем
bitrix24/php:8.2.28-fpm-v1-alpine
/bitrix24/php:8.3.22-fpm-v1-alpine
/bitrix24/php:8.4.8-fpm-v1-alpine
- поиск:
- готового образа Sphinx нет, но есть собранный пакет
sphinx
на базеAlpine Linux
в официальном репозитории ОС - собираем
bitrix24/sphinx:2.2.11-v1-alpine
, установив пакет
- готового образа Sphinx нет, но есть собранный пакет
- Push-сервер:
- готового образа нет
- используем образ NodeJS 22-ой версии
- используем исходники
push-server-0.4.0
- собираем
bitrix24/push:3.1-v1-alpine
- сервис для бесплатных SSL-сертификатов от
LetsEncrypt
:- используем стабильный образ
goacme/lego:v4.23.1
- добавляем логику слоем сверху
- собираем
bitrix24/lego:4.23.1-v1-alpine
- используем стабильный образ
- генератор самоподписных SSL-сертификатов:
- небольшой образ с пакетами на базе
Alpine Linux
- собираем
bitrix24/ssl:1.0-v1-alpine
- небольшой образ с пакетами на базе
Список официальных Docker образов, которые будем брать с DockerHub:
Percona Server
: https://hub.docker.com/r/percona/percona-serverNginx
: https://hub.docker.com/_/nginxPHP
: https://hub.docker.com/_/phpNodeJS
: https://hub.docker.com/_/nodeAlpine
: https://hub.docker.com/_/alpineLego
: https://hub.docker.com/r/goacme/lego
Для сборки нам понадобятся следующие образы (их можно предварительно скачать, используя команды):
docker pull percona/percona-server:8.0.42
docker pull percona/percona-server:8.4.5
docker pull nginx:1.28.0-alpine-slim
docker pull php:8.2.28-fpm-alpine
docker pull php:8.3.22-fpm-alpine
docker pull php:8.4.8-fpm-alpine
docker pull node:22
docker pull node:22-alpine
docker pull alpine:3.21
docker pull goacme/lego:v4.23.1
Собираем образы, в названии используем bitrix24
:
bitrix24/sphinx
:
cd env-docker/sources/bxsphinx2211/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/sphinx:2.2.11-v1-alpine --no-cache .
bitrix24/push
:
cd env-docker/sources/bxpush31/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/push:3.1-v1-alpine --no-cache .
bitrix24/php
для версии8.2.x
:
cd env-docker/sources/bxphp8228/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/php:8.2.28-fpm-v1-alpine --no-cache .
bitrix24/php
для версии8.3.x
:
cd env-docker/sources/bxphp8322/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/php:8.3.22-fpm-v1-alpine --no-cache .
bitrix24/php
для версии8.4.x
:
cd env-docker/sources/bxphp848/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/php:8.4.8-fpm-v1-alpine --no-cache .
bitrix24/nginx
:
cd env-docker/sources/bxnginx1280/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/nginx:1.28.0-v1-alpine --no-cache .
bitrix24/percona-server
для версии8.0.x
:
cd env-docker/sources/bxpercona8042/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/percona-server:8.0.42-v1-rhel --no-cache .
bitrix24/percona-server
для версии8.4.x
:
cd env-docker/sources/bxpercona845/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/percona-server:8.4.5-v1-rhel --no-cache .
bitrix24/lego
:
cd env-docker/sources/bxlego4231/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/lego:4.23.1-v1-alpine --no-cache .
bitrix24/ssl
:
cd env-docker/sources/bxssl10/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t bitrix24/ssl:1.0-v1-alpine --no-cache .
Во всех образах bitrix24
в названии тега указывается v1
, состоит из:
- общая отметка версии, указывается буквой
v
- номер сборки, начинается с цифры
1
Caution
Внимание! Информация о сборке модулей для Nginx предоставляется для ознакомления. Повторять шаги ниже не требуется.
В образе веб-сервера bitrix24/nginx
используются следующие модули:
brotli
geoip
geoip2
headers-more
image-filter
lua
ndk
njs
perl
xslt
zip
Модули собираются на базе стабильного образа nginx:1.28.0-alpine-slim
, используя официальный образ Nginx с DockerHub:
Образ Nginx можно предварительно скачать, используя команду:
docker pull nginx:1.28.0-alpine-slim
Для сборки потребуется Dockerfile
от версии 1.28.0
, найти который можно на GitHub.
Скачиваем файл для версии 1.28.0 по ссылке: https://github.com/nginx/docker-nginx/blob/7f1d49f6f222f7e588a9066fd53a0ce43c3466a5/stable/alpine/Dockerfile
Модифицируем файл, добавляем нужные модули по списку выше и служебную часть. Пример всех изменений файла для версии 1.28.0 можно найти в папке /sources/nginx1280modules/
.
Запускаем сборку образа nginx_modules
, указываем две архитектуры amd64
и arm64
в команде:
cd env-docker/sources/nginx1280modules/
docker buildx build --platform linux/arm64,linux/amd64 --provenance=false -f Dockerfile -t nginx_modules:1.28.0-v1-alpine --no-cache .
После нужно запустить два контейнера, используя собранный образ выше. По одному для каждой архитектуры: amd64
и arm64
.
Для amd64
выполняем команду:
docker run --platform=linux/amd64 -d --name=nginxmodules1280testingamd64 -it nginx_modules:1.28.0-v1-alpine
Для arm64
выполняем команду:
docker run --platform=linux/arm64 -d --name=nginxmodules1280testingarm64 -it nginx_modules:1.28.0-v1-alpine
Собранные модули Nginx будут доступны в каталоге /root/packages/
у каждого запущенного контейнера.
Внутри контейнера переходим в каталог /root/packages/
, архивируем содержимое и забираем zip-файл:
- для
amd64
выполняем:
apk add mc zip
cd /root/packages/
zip -r nginxmodules_amd64.zip *
exit
- для
arm64
выполняем:
apk add mc zip
cd /root/packages/
zip -r nginxmodules_arm64.zip *
exit
Останавливаем и удаляем контейнеры, они больше не нужны.
Для amd64
выполняем команду:
docker container stop nginxmodules1280testingamd64 && docker container rm nginxmodules1280testingamd64
Для arm64
выполняем команду:
docker container stop nginxmodules1280testingarm64 && docker container rm nginxmodules1280testingarm64
Содержимое обоих архивов (nginxmodules_amd64.zip
и nginxmodules_arm64.zip
) размещаем в репозитории bitrix-tools/nginx-modules
на GitHub.
Каждый zip архив содержит:
- каталог с названием архитектуры:
x86_64
(дляamd64
) илиaarch64
(дляarm64
) - файлы модулей в формате пакетов ОС
Alpine Linux
-*.apk
- модули, собранные для работы Nginx в режиме отладки (debug), содержат
dbg
в названии файла - файл индекс репозитория -
APKINDEX.tar.gz
- rsa ключ подписи файлов модулей в репозитории -
abuild-key.rsa.pub
Собранные модули для Nginx будут использоваться при сборке образа bitrix24/nginx
.
Механизм сборки для версии 1.28.0
можно найти в файле /sources/bxnginx1280/Dockerfile
.