Розгортання 1С-Бітрікс в Docker

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розгортання 1С-Бітрікс в Docker
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розгортання 1С-Бітрікс у Docker

Розгортання 1С-Бітрікс у Docker

Офіційна позиція 1С-Бітрікс щодо Docker: «використовуйте BitrixVM». На практиці це означає, що Docker-розгортання потребує ручного налаштування — немає офіційного образу, немає docker-compose від вендора. Зате дає відтворюване середовище, ізоляцію залежностей і можливість однаково запускати проект на ноутбуці розробника, у CI/CD і на production.

Головний нюанс: 1С-Бітрікс вимагає конкретні версії PHP (8.1–8.2 для актуальних редакцій), специфічні PHP-розширення (iconv, mbstring, gd, opcache, memcached), і запис у файлову систему — що суперечить принципу immutable containers. Вирішувано, але з розумінням компромісів.

Структура 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 розширення, потрібні 1С-Бітрікс
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

# OPcache
RUN docker-php-ext-install opcache

WORKDIR /var/www/html

# Створюємо користувача з таким самим UID як на хості
ARG UID=1000
RUN adduser -u $UID -D -S -G www-data bitrix
USER bitrix

Конфігурація PHP для 1С-Бітрікс

; 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"

Вирішення проблеми stateful файлів

1С-Бітрікс зберігає у файловій системі: завантажені файли (upload/), кеш (bitrix/cache/), конфігурацію (.settings.php). Стратегії:

Named volumes (вище у docker-compose) — дані живуть у Docker volume, переживають пересоздання контейнерів. Проблема: перенесення даних між хостами потребує volume backup.

Bind mounts для даних, named volume для коду:

volumes:
  - ./src:/var/www/html:ro          # код (read-only)
  - uploads_data:/var/www/html/upload  # завантаження
  - cache_data:/var/www/html/bitrix/cache  # кеш

S3 для upload — найбільш cloud-native підхід. 1С-Бітрікс підтримує S3-сумісні сховища через модуль. Контейнери стають дійсно stateless.

CI/CD з Docker

# .github/workflows/deploy.yml (фрагмент)
deploy:
  steps:
    - name: Build PHP image
      run: docker build -t registry.example.com/bitrix-php:${{ github.sha }} ./docker/php

    - name: Push to registry
      run: docker push registry.example.com/bitrix-php:${{ github.sha }}

    - name: Deploy to production
      run: |
        ssh deploy@prod "
          cd /opt/bitrix &&
          docker-compose pull &&
          docker-compose up -d --no-deps php-fpm nginx &&
          docker-compose exec php-fpm php /var/www/html/bitrix/modules/main/cli/healthcheck.php
        "

Специфіка production

Логи. Bitrix пише логи у файли. У Docker логи мають іти в stdout/stderr для збирання через Docker logging driver:

// /bitrix/php_interface/init.php
define('LOG_FILENAME', 'php://stderr');

Завдання за розкладом (агенти). Cron всередині контейнера або окремий контейнер:

cron:
  build: ./docker/php
  volumes:
    - bitrix_files:/var/www/html
  command: crond -f -d 8

Налагодження. Xdebug лише у development-збірці:

# docker/php/Dockerfile.dev
FROM registry.example.com/bitrix-php:latest
RUN pecl install xdebug && docker-php-ext-enable xdebug
COPY xdebug.ini /usr/local/etc/php/conf.d/

Терміни

Базове Docker-середовище для розробки — 2–3 дні. Production-ready конфігурація з CI/CD, моніторингом і S3 для файлів — 7–14 днів.