Владелец магазина потратил неделю, пытаясь перенести сайт на новый сервер, пока не упаковал Битрикс в Docker-контейнер. Разбираем, как за час развернуть магазин, не зависеть от окружения и забыть про «на моей машине всё работает».
Владелец магазина одежды позвонил в понедельник: «Сергей, я переезжаю на новый VPS, но сайт не стартует — то версия PHP не та, то модули не ставятся. Что делать?» Мы упаковали его сайт в Docker-контейнер и развернули на новом сервере за час. Теперь окружение везде одинаковое, а развёртывание сводится к одной команде. Сегодня разбираем, как битрикс docker помогает избежать проблем с окружением, как собрать свой образ и запустить магазин в контейнере, даже если вы никогда не работали с Docker.
Почему Docker для интернет-магазина на Битрикс — это практично
Переезд магазина на новый сервер часто превращается в неделю мучений: нужно поставить ту же версию PHP, те же модули, настроить MySQL с теми же параметрами. А если серверов несколько — админ сходит с ума. Docker решает эту проблему, упаковывая приложение и всё его окружение в изолированный контейнер. Этот контейнер запускается одинаково на любом сервере, будь то VPS, выделенная машина или ноутбук разработчика. Для магазина на Битрикс это означает, что вы можете протестировать новую версию PHP или обновление ядра на точной копии боевого окружения, не ломая продакшен.
Кроме того, Docker упрощает масштабирование. Если в горячий сезон нужно добавить ещё один веб-сервер, вы просто запускаете ещё один контейнер. Не нужно снова проходить квест по настройке ОС. Всё, что нужно, уже описано в Dockerfile и docker-compose.yml. Как результат, битрикс docker становится стандартом для команд, которые ценят предсказуемость и скорость развёртывания. Кстати, если вы ещё не знакомы с азами настройки сервера, загляните в нашу статью про BitrixVM — она поможет понять, с чего начать.
Docker контейнер битрикс: что внутри и как собрать свой образ
Создание docker контейнера битрикс начинается с написания Dockerfile. Это текстовый файл, в котором по шагам описано, как собрать образ. Минимальный образ включает: базовую ОС (обычно Ubuntu или Debian), веб-сервер (Apache или Nginx), PHP нужной версии с расширениями (gd, mbstring, curl, zip и другими), а также саму CMS. Вот как может выглядеть базовый Dockerfile:
FROM ubuntu:22.04
RUN apt update && apt install -y apache2 php8.1 php8.1-mysql php8.1-gd php8.1-curl php8.1-zip php8.1-mbstring
COPY ./bitrix /var/www/html
EXPOSE 80
CMD ["apache2ctl", "-D", "FOREGROUND"]
Этот образ можно собрать командой docker build -t my-bitrix . и запустить
docker run -p 80:80 my-bitrix. Через минуту сайт будет доступен. Разумеется, для реального магазина
нужно добавить cron, настроить кеширование, прикрутить базу данных. Но суть та же: вы один раз описываете окружение
и дальше воспроизводите его на любом сервере. На этапе сборки docker контейнера битрикс стоит убедиться, что все
нужные PHP-модули установлены, иначе после перехода на новый сервер вы получите ошибки, как тот самый владелец
магазина одежды.
Развертывание битрикс docker: пошаговая инструкция с нуля
Чтобы выполнить развертывание битрикс docker с нуля, проделайте три простых шага. Первый — подготовьте папку с
файлами сайта. Проще всего скопировать текущую установку Битрикса в директорию, которая будет монтироваться в
контейнер. Второй — настройте базу данных. Её можно запустить в отдельном контейнере MySQL командой
docker run --name bitrix-db -e MYSQL_ROOT_PASSWORD=secret -d mysql:8.0. Третий — напишите Dockerfile и
docker-compose.yml, как мы покажем дальше, и выполните docker-compose up -d. Магазин запущен.
Важно позаботиться о постоянном хранилище для загружаемых файлов. Если контейнер удалится, всё его содержимое пропадёт. Поэтому папки /upload и /bitrix/cache нужно монтировать с хостовой машины через volumes. Также не забудьте про cron-задания: для выполнения агентов Битрикс на cron можно использовать отдельный контейнер или добавить cron внутрь основного образа. При правильном развертывании битрикс docker вы получаете идентичные окружения для разработки, тестирования и продакшена, а время развёртывания сокращается с дней до минут.
Docker для 1с битрикс: тонкости и подводные камни
Несмотря на все плюсы, docker для 1с битрикс таит несколько подводных камней. Первый — кэширование. Битрикс по умолчанию использует файловый кэш, который в контейнере может работать медленно из-за слоёв файловой системы. Решение: вынести кэш в Redis или Memcache, запущенные в отдельных контейнерах, и настроить монтирование папки кэша на том хоста с быстрой файловой системой. Второй — обмен с 1С. Механизм обмена предполагает, что файлы выгрузки кладутся в определённую директорию. Если контейнер перезапустится, эти файлы должны сохраниться, поэтому папку /upload/1c_exchange тоже нужно монтировать снаружи.
Третий — сессии. По умолчанию сессии хранятся в файлах. При масштабировании на несколько контейнеров нужно переключить хранение сессий в Redis или базу данных, иначе пользователь будет терять авторизацию при переключении между контейнерами. Четвёртый — мониторинг. Стандартные агенты Битрикс внутри контейнера могут не запускаться, если cron настроен неправильно. Мы в «Апельсин Код» обычно выносим cron в отдельный сервис и мониторим его выполнение. Если вы хотите глубже разобраться в настройке производительности, прочитайте наш гайд по кешированию.
docker-compose битрикс: запускаем всё вместе
Для полноценного магазина одного контейнера недостаточно. Нужна связка из веб-сервера, PHP-обработчика, базы данных и, возможно, Redis. docker-compose битрикс позволяет описать все эти сервисы в одном YAML-файле и запускать их одной командой. Вот пример минимального docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "80:80"
volumes:
- ./bitrix:/var/www/html
- uploads:/var/www/html/upload
depends_on:
- db
- redis
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: bitrix
volumes:
- db-data:/var/lib/mysql
redis:
image: redis:7
volumes:
uploads:
db-data:
Этот файл описывает три сервиса: веб-приложение, базу данных и Redis. При запуске docker-compose up -d
все три контейнера стартуют одновременно, база данных инициализируется, а веб-сервер подключается к ней по имени
сервиса (db). Для работы с несколькими контейнерами нужно настроить Bitrix на подключение к MySQL по хосту "db", а
Redis — по хосту "redis". После этого сайт готов к работе. docker-compose битрикс также упрощает масштабирование:
чтобы запустить два веб-контейнера, достаточно добавить docker-compose up --scale web=2. Всё это делает
инфраструктуру гибкой и управляемой.
Битрикс docker — не панацея, но мощный инструмент для тех, кто хочет предсказуемости и лёгкости развёртывания. Если вам нужна помощь в контейнеризации или аудите текущего сервера, закажите бесплатный аудит — мы поможем собрать образ, настроить окружение и обеспечим бесперебойную работу магазина.