Почему 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 и сократить расходы на инфраструктуру.







