Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Как установить виртуальную машину Битрикс в Docker на Ubuntu

Роман Андреев
Роман Андреев
Технический писатель
13 марта 2023 г.
1733
7 минут чтения
Средний рейтинг статьи: 5

Использование виртуальной машины «Битрикс» в Docker позволяет решить одну проблему. Bitrix изначально заточен исключительно под CentOS, однако компании и отдельные разработчики используют в своих решениях абсолютно разные ОС на основе Linux, в том числе и Ubuntu. Поэтому перенос виртуальной машины на Docker для многих становится насущной необходимостью. К счастью, описанная ниже инструкция подойдет для любой из Линукс-подобных систем: главное, чтобы у вас уже была настроенная виртуальная машина.

Перенос виртуальной машины «Битрикс» в Docker

Для сборки виртуальной машины нам понадобятся Nginx, PHP-FPM и MySQL, желательно последних версий. Директория, в которой расположено ядро Bitrix, корневая и потому должна быть расположена в каталоге с аналогичным именем. Идентификаторы UID и GID пользователя для Nginx и PHP-FPM должны быть 101:101. О том, как это проверить и исправить, если идентификаторы другие, смотрите ниже. 

Дальнейший процесс мы решили для вашего удобства разбить на несколько простых этапов, сделав пошаговую инструкцию. Итак, проверьте, выполнены ли требования к каждому приложению.

Шаг 1. Настраиваем Nginx

Nginx должен быть установлен по пути /var/www/bitrix в контейнере. Взаимодействие с контейнером организуется через envsubst, а также используются переменные окружения. Конфиг. файл главного сайта также должен быть упакован в контейнер и располагаться по пути /var/www/bitrix/conf. Там же должны находиться шаблоны dbconn и settings.

Для запуска образа Nginx в Docker сначала откроем нужный порт следующей инструкцией:

docker run -p 101:101 nginx

Далее осталось ввести IP вашего сервера в браузере, и, если всё сделано правильно, вы увидите надпись крупным шрифтом: Welcome to nginx! с комментарием, что приложение успешно установлено и работает.

Шаг 2. Настраиваем PHP-FPM

Используйте аналогичный путь установки: /var/www/bitrix. Конфиг. файл conf/override.ini должен содержать настройки сервера. Также используйте дополнительные расширения (gd, mysqli, opcache, xml, zip и ldap), которые обеспечат запуск «Битрикса».

Шаг 3. Настраиваем MySQL

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)

Шаг 4. Завершаем подготовку

Далее стандартный конфиг. файл 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-Битрикс: Виртуальная машина». А мы приступаем к установке.

Шаг 5. Приступаем к установке виртуальной машины Bitrix в Docker

Размещаем в корневой директории 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 

Шаг 6. Собираем образы

Будем делать это через встроенный инструмент 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

Шаг 7. Настраиваем файл окружения

Задаем переменную окружения в .env для домена, доступного на хост-машине по IP 127.0.0.1, и меняем регистрационные данные пользователя, если это требуется. Здесь же можно добавить и ключ API. Используйте следующие переменные и укажите свои значения:

ENVIRONMENT=bitrix
USERNAME=bitrix
PASSWORD=bitrix
API_KEY=xxxx

Шаг 8. Завершаем установку

Изменяем файл docker-compose.yaml в PHP-FPM, выставляя локальный IP в пункте extra_hosts. И теперь запускаем Docker инструкцией:

docker-compose up -d

Всё готово, осталось только зайти на сайт и приступить к работе. По умолчанию адрес ресурса будет http://default.com:80.

Заключение

Перенос виртуальной машины «Битрикс» в Docker позволяет разработчикам не привязываться к инфраструктуре клиента, а также обеспечивает единые конфигурационные параметры окружения. Это избавляет специалистов от постоянной перенастройки окружения в процессе разработки.

Осталось добавить, что представленная выше реализация работы «1C-Битрикс: Виртуальная машина» в Docker, разумеется, не является единственно возможной. Однако она наиболее простая. Но желающие могут найти и другие варианты. Например, на GitHub доступны:

Каждое из этих решений имеет свою специфику. Например, BitrixDock можно развернуть на Windows через виртуальную машину Ubuntu. А BIaaC уже «обернут» в Docker-Compose, что делает его максимально переносимым и удобным в сопровождении. Также предоставляется набор сценариев, в том числе повторное развертывание сайта и резервное копирование.

 

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону