Использование виртуальной машины «Битрикс» в Docker позволяет решить одну проблему. Bitrix изначально заточен исключительно под CentOS, однако компании и отдельные разработчики используют в своих решениях абсолютно разные ОС на основе Linux, в том числе и Ubuntu. Поэтому перенос виртуальной машины на Docker для многих становится насущной необходимостью. К счастью, описанная ниже инструкция подойдет для любой из Линукс-подобных систем: главное, чтобы у вас уже была настроенная виртуальная машина.
Для сборки виртуальной машины нам понадобятся Nginx, PHP-FPM и MySQL, желательно последних версий. Директория, в которой расположено ядро Bitrix, корневая и потому должна быть расположена в каталоге с аналогичным именем. Идентификаторы UID и GID пользователя для Nginx и PHP-FPM должны быть 101:101. О том, как это проверить и исправить, если идентификаторы другие, смотрите ниже.
Дальнейший процесс мы решили для вашего удобства разбить на несколько простых этапов, сделав пошаговую инструкцию. Итак, проверьте, выполнены ли требования к каждому приложению.
Nginx должен быть установлен по пути /var/www/bitrix
в контейнере. Взаимодействие с контейнером организуется через envsubst
, а также используются переменные окружения. Конфиг. файл главного сайта также должен быть упакован в контейнер и располагаться по пути /var/www/bitrix/conf
. Там же должны находиться шаблоны dbconn
и settings
.
Для запуска образа Nginx в Docker сначала откроем нужный порт следующей инструкцией:
docker run -p 101:101 nginx
Далее осталось ввести IP вашего сервера в браузере, и, если всё сделано правильно, вы увидите надпись крупным шрифтом: Welcome to nginx!
с комментарием, что приложение успешно установлено и работает.
Используйте аналогичный путь установки: /var/www/bitrix
. Конфиг. файл conf/override.ini
должен содержать настройки сервера. Также используйте дополнительные расширения (gd
, mysqli
, opcache
, xml
, zip
и ldap
), которые обеспечат запуск «Битрикса».
vds
UID и GID пользователя для MySQL должны быть 1001:1001. Директорию data
с информацией по базе данных нужно поместить на хост и назначить аналогичные UID и GID. Для проверки занятых UID и GID используем инструкцию id
, а затем с проверкой по конкретному пользователю (в нашем случае id timeweb
, но у вас, естественно, имя пользователя будет другим):
timeweb@timeweb:~$ id
uid=1000(timeweb) gid=100(timeweb) groups=1000(timeweb), 4(adm),...
timeweb@timeweb:~$ id timeweb
uid=1000(timeweb) gid=100(timeweb) groups=1000(timeweb), 4(adm),...
Если у нужного нам пользователя UID и GID другие, назначаем ему правильные. Но перед этим рекомендуется сделать бэкапы файлов с информацией об UID и GID. Они находятся в директориях /etc/passwd
и /etc/group
. Теперь меняем все идентификаторы (в том числе и группы) следующими инструкциями:
timeweb@timeweb:~$ groupmod -g 1001 timeweb
timeweb@timeweb:~$ usermod -u 1001 -g 1001 timeweb
И проверяем, всё ли в порядке, уже знакомой нам командой:
timeweb@timeweb:~$ id timeweb
uid=1001(timeweb) gid=1001(timeweb) groups=1001(timeweb)
Далее стандартный конфиг. файл z_bx_custom.cnf
расположите в директории config/
. Дамп базы данных поместите в директорию docker-entrypoint-initdb.d
. В этом случае после первого запуска произойдет корректный импорт файлов sql.gz
. В шаблоне init.sql.template
, расположенном в той же директории, есть скрипт SQL, выполняющий замены на основе доменного имени ресурса. База данных создается также при первом запуске, причем вместе с парой логин-пароль для доступа, которая берется из файла .env
, расположенного в корневом каталоге ls -la
(о том, какие значения нужно изменить в этом файле, речь пойдет ниже).
Чтобы во время работы не возникало проблем с изменением файлов, нужно установить атрибут SGID на директорию с кодом. Это делает следующая инструкция (подставьте имя своей директории вместо your_code_directory
):
timeweb@timeweb:~$ chmod u+s your_code_directory
Также рекомендуем ознакомиться с официальной документацией от разработчиков продукта «1C-Битрикс: Виртуальная машина». Однако учтите, что если вы будете использовать иное окружение, подключая какие-то другие сервисы, то специалисты службы поддержки Bitrix не всегда смогут помочь вам. Дело в том, что Docker не является официально поддерживаемым инструментом «1C-Битрикс: Виртуальная машина». А мы приступаем к установке.
Размещаем в корневой директории bitrix/
основной каталог. Если дамп базы данных достаточно велик, его можно предварительно сжать через декомпрессор. Теперь создаем скрипт инициализации и выполняем его однократно, используя следующие настройки.
Делаем init.sh
исполняемым, сам файл находится в каталоге /system/etc/init.sh
:
chmod +x init.sh
Готовим директории MySQL и SQL, эта и следующие инструкции выполняются через sudo
:
./init.sh db
Устанавливаем пользователя:
./init.sh owner $bitrix
Устанавливаем права – подождите несколько минут:
./init.sh perm
Очищаем кеш:
./init.sh clear-cache
Будем делать это через встроенный инструмент Docker-Compose, позволяющий работать со сложными контейнерами. Сборку образов нетрудно сделать при помощи такой инструкции:
docker-compose -f docker-compose.build.yaml build
Файл будет выглядеть примерно так (подставьте ваши значения вместо нулей, подберите безопасные пароли и укажите нужные пути в вашей системе):
services:
db:
image: mysql:0.0
volumes:
- db_data:C:\...\dcompose
environment:
MYSQL_ROOT_PASSWORD: rootbitrix
MYSQL_DATABASE: bitrix
MYSQL_USER: bitrix
MYSQL_PASSWORD: bitrix
bitrix:
depends_on:
- db
image: bitrix:00.0.0
ports:
- 0000:0000
extra_hosts:
000.000.0.0
environment:
BITRIX_DB_HOST: db:0000
BITRIX_DB_USER: bitrix
BITRIX_DB_PASSWORD: bitrix
Задаем переменную окружения в .env
для домена, доступного на хост-машине по IP 127.0.0.1, и меняем регистрационные данные пользователя, если это требуется. Здесь же можно добавить и ключ API. Используйте следующие переменные и укажите свои значения:
ENVIRONMENT=bitrix
USERNAME=bitrix
PASSWORD=bitrix
API_KEY=xxxx
Изменяем файл docker-compose.yaml
в PHP-FPM, выставляя локальный IP в пункте extra_hosts
. И теперь запускаем Docker инструкцией:
docker-compose up -d
Всё готово, осталось только зайти на сайт и приступить к работе. По умолчанию адрес ресурса будет http://default.com:80
.
Разверните «Битрикс» на своем VDS/VPS
Перенос виртуальной машины «Битрикс» в Docker позволяет разработчикам не привязываться к инфраструктуре клиента, а также обеспечивает единые конфигурационные параметры окружения. Это избавляет специалистов от постоянной перенастройки окружения в процессе разработки.
Осталось добавить, что представленная выше реализация работы «1C-Битрикс: Виртуальная машина» в Docker, разумеется, не является единственно возможной. Однако она наиболее простая. Но желающие могут найти и другие варианты. Например, на GitHub доступны:
Каждое из этих решений имеет свою специфику. Например, BitrixDock можно развернуть на Windows через виртуальную машину Ubuntu. А BIaaC уже «обернут» в Docker-Compose, что делает его максимально переносимым и удобным в сопровождении. Также предоставляется набор сценариев, в том числе повторное развертывание сайта и резервное копирование.
Вот еще бесплатное решение: https://gitlab.com/bitrix-docker/server
Спасибо!