Чому 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 і скоротити витрати на інфраструктуру.







