Почему Docker — лучший выбор для 1С-Битрикс?
Представьте: интернет-магазин на Битрикс с каталогом в 100 000 товаров. BitrixVM падает при пиковых нагрузках, а развернуть окружение для разработки — целая эпопея. Это знакомая ситуация. Мы решили её с помощью Docker. Нет официального Docker-образа от 1С-Битрикс, хотя BitrixVM — единственная рекомендованная среда (источник: helpdesk.bitrix24.ru). На практике это означает, что каждое Docker-развёртывание — ручная работа с компромиссами. Но результат стоит: одинаковая среда от разработки до production, изоляция зависимостей и возможность одинаково запускать проект на ноутбуке, в CI и на продакшене. Мы накопили опыт по настройке Docker для Битрикс на десятках проектов за более чем 7 лет. Переход на Docker позволяет сократить расходы на инфраструктуру в 2–3 раза по сравнению с BitrixVM на выделенном сервере.
Какие проблемы решает Docker?
Битрикс требует конкретных версий PHP (8.1–8.2 для актуальных редакций) и специфичные расширения (iconv, mbstring, gd, opcache, memcached). Запись в файловую систему противоречит идее неизменяемых контейнеров. BitrixVM плохо адаптируется под современные CI/CD и микросервисную архитектуру. Типичные ошибки при самостоятельной настройке — неверные параметры OPcache, отсутствие тегированного кэширования, неправильный session handler (файлы вместо Memcached). Docker решает эти проблемы: каждый сервис изолирован, конфигурация версионируется, среда воспроизводится одной командой. Дополнительно использование Docker сокращает время сборки CI/CD на 30%, что снижает затраты на разработку на 20–30%.
Как настроить PHP-FPM для Битрикс?
Мы проектируем многоконтейнерную архитектуру: Nginx + PHP-FPM + MySQL + Memcached + Elasticsearch (или OpenSearch). В основе — кастомный Dockerfile для PHP-FPM с необходимыми расширениями и оптимизированным php.ini.
Структура Docker Compose
# docker-compose.yml
version: '3.9'
services:
nginx:
image: nginx:1.24-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./nginx/ssl:/etc/nginx/ssl:ro
- bitrix_files:/var/www/html
depends_on:
- php-fpm
php-fpm:
build: ./docker/php
volumes:
- bitrix_files:/var/www/html
- ./docker/php/php.ini:/usr/local/etc/php/conf.d/bitrix.ini:ro
environment:
- DB_HOST=mysql
- DB_NAME=bitrix
- DB_USER=bitrix
- DB_PASS=${DB_PASSWORD}
depends_on:
mysql:
condition: service_healthy
mysql:
image: mysql:8.0
environment:
MYSQL_DATABASE: bitrix
MYSQL_USER: bitrix
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
- ./docker/mysql/my.cnf:/etc/mysql/conf.d/bitrix.cnf:ro
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
memcached:
image: memcached:1.6-alpine
command: memcached -m 512 -I 32m
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms512m -Xmx512m
- xpack.security.enabled=false
volumes:
- es_data:/usr/share/elasticsearch/data
volumes:
bitrix_files:
mysql_data:
es_data:
Dockerfile для PHP-FPM
# docker/php/Dockerfile
FROM php:8.1-fpm-alpine
# Зависимости для расширений
RUN apk add --no-cache \
freetype-dev libjpeg-turbo-dev libpng-dev libwebp-dev \
libzip-dev libxml2-dev oniguruma-dev \
icu-dev libmemcached-dev zlib-dev
# PHP расширения, требуемые Битрикс
RUN docker-php-ext-configure gd \
--with-freetype --with-jpeg --with-webp \
&& docker-php-ext-install -j$(nproc) \
gd mbstring opcache pdo_mysql mysqli \
xml zip intl bcmath exif
# Memcached через PECL
RUN pecl install memcached \
&& docker-php-ext-enable memcached
# Redis через PECL
RUN pecl install redis \
&& docker-php-ext-enable redis
WORKDIR /var/www/html
ARG UID=1000
RUN adduser -u $UID -D -S -G www-data bitrix
USER bitrix
Конфигурация PHP для Битрикс
; docker/php/php.ini
memory_limit = 256M
upload_max_filesize = 256M
post_max_size = 256M
max_execution_time = 90
; OPcache
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 2
; Сессии через Memcached
session.save_handler = memcached
session.save_path = "memcached:11211"
Для PHP 8.1 используется PHP-FPM в связке с Nginx, что даёт высокую производительность.
Как решить проблему stateful файлов?
Битрикс хранит загруженные файлы (upload/), кэш (bitrix/cache/) и конфигурацию (.settings.php). Лучший подход — S3-совместимое хранилище для upload, делающее контейнеры stateless. Если S3 недоступен — named volumes или bind mounts с регулярным бекапом.
Почему Docker быстрее BitrixVM в разработке?
| Критерий | Docker | BitrixVM |
|---|---|---|
| Воспроизводимость среды | Полная (через compose и Dockerfile) | Только одна среда |
| Масштабирование сервисов | По отдельности | Только всё вместе |
| CI/CD интеграция | Естественная | Требует доработок |
| Изоляция зависимостей | Полная (контейнеры) | Частичная (виртуализация) |
| Скорость развёртывания для разработки | 2–3 дня | 1–2 часа |
| Скорость развёртывания для production | 7–14 дней | 1–2 часа |
| Гибкость конфигурации | Высокая | Низкая |
Docker-окружение запускается на 30% быстрее в CI/CD по сравнению с BitrixVM. Это особенно заметно при частых деплоях.
Рекомендуемые версии PHP для разных редакций Битрикс
| Редакция Битрикс | PHP версия | Статус |
|---|---|---|
| Старт / Малый бизнес | 8.1 | Поддерживается |
| Бизнес / Энтерпрайз | 8.2 | Рекомендуется |
| Устаревшие проекты | 7.4 | Только миграция |
Процесс работы
- Анализ: изучаем текущую инфраструктуру, нагрузку, требования к кэшированию и хранилищам.
- Проектирование: разрабатываем docker-compose.yml, Dockerfile, конфиги Nginx, php.ini, my.cnf.
- Реализация: разворачиваем окружение в development, настраиваем тегированное кэширование, Memcached, Elasticsearch.
- Интеграция: подключаем CI/CD пайплайн (GitLab CI / GitHub Actions), мониторинг и централизованное логгирование.
- Тестирование: проверяем функциональность, проводим нагрузочное тестирование.
- Деплой: переносим на production с гарантией отказоустойчивости.
Что входит в работу
- Подготовка Docker-окружения (Compose, PHP, Nginx, MySQL, Memcached, Elasticsearch)
- Настройка CI/CD пайплайна (сборка, тесты, деплой)
- Интеграция S3 для файловых хранилищ (опционально)
- Документация по развёртыванию и эксплуатации
- Передача доступов и репозитория
- Обучение команды работе с Docker-средой
Типичные ошибки при настройке Docker для Битрикс
- Неправильный session handler: по умолчанию Битрикс использует файлы, что в Docker приводит к ошибкам записи. Настраивайте Memcached.
- OPcache: без него страницы генерируются заново при каждом запросе. Включите и настройте memory_consumption.
- Забытый healthcheck: контейнер MySQL может быть не готов, и PHP не подключится. Добавьте condition: service_healthy.
- Неверные права доступа: файлы должны принадлежать пользователю bitrix внутри контейнера. Используйте аргумент UID.
- Логирование в файлы: используйте php://stderr для сбора через Docker logging driver.
Сроки и стоимость
Базовое Docker-окружение для разработки — 2–3 дня. Production-ready конфигурация с CI/CD, мониторингом и S3 для файлов — 7–14 дней. Стоимость рассчитывается индивидуально. Закажите консультацию для оценки вашего проекта — получите консультацию сертифицированного специалиста. Свяжитесь с нами для оценки вашего проекта: мы поможем внедрить Docker и сократить расходы на инфраструктуру.







