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

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

1С-Бітрікс не проектувався для контейнерної оркестрації. Сесії у файлах, кеш на диску, завантажені файли в upload/, ядро в bitrix/ — усе це «stateful» артефакти, які у Kubernetes потребують спеціальної обробки. Тим не менше завдання розв'язуване, і в production працюють навантажені Бітрікс-сайти в k8s-кластерах.

Основні проблеми при контейнеризації Бітрікс

Сесії. За замовчуванням PHP зберігає сесії у /tmp контейнера. При кількох репліках pod'ів різні запити одного користувача потрапляють на різні pod'и — сесія втрачається. Рішення: перемикаємо сховище сесій на Redis.

У .settings.php Бітрікс:

'session' => [
    'value' => [
        'mode' => 'separated',
        'handlers' => [
            'general' => [
                'type' => 'redis',
                'host' => 'redis-service',
                'port' => 6379,
            ],
        ],
    ],
],

Кеш. CACHE_TYPE=A у компонентах за замовчуванням пише в bitrix/cache/. При кількох репліках кеш не синхронізується. Перемикаємо на Memcached або Redis:

'cache' => [
    'value' => [
        'type' => ['memcache' => 'memcache'],
        'memcache' => [
            'host' => 'memcached-service',
            'port' => 11211,
        ],
    ],
],

Файли. Директорія upload/ повинна бути доступна всім pod'ам. Використовуємо PersistentVolumeClaim з режимом ReadWriteMany (NFS, CephFS, Longhorn у режимі RWX).

Ліцензія. Бітрікс прив'язує ліцензію до IP-адреси або домену, не до MAC-адреси контейнера. При хмарному деплої переконайтеся, що зовнішній IP стабільний або ліцензія оформлена на домен.

Структура Kubernetes-маніфестів

namespace: bitrix-prod
├── Deployment: bitrix-app (PHP-FPM + Nginx sidecar)
├── Service: bitrix-app-svc
├── Ingress: bitrix-ingress (з TLS)
├── StatefulSet: redis (або Redis Operator)
├── StatefulSet: memcached
├── PersistentVolumeClaim: bitrix-upload (RWX)
├── ConfigMap: php-fpm-config
├── ConfigMap: nginx-config
└── Secret: db-credentials

Deployment для PHP-FPM:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bitrix-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: bitrix-app
  template:
    spec:
      containers:
        - name: php-fpm
          image: registry.example.com/bitrix-app:1.2.3
          volumeMounts:
            - name: upload
              mountPath: /var/www/html/upload
            - name: php-fpm-config
              mountPath: /usr/local/etc/php-fpm.d/www.conf
              subPath: www.conf
          env:
            - name: DB_HOST
              valueFrom:
                secretKeyRef:
                  name: db-credentials
                  key: host
        - name: nginx
          image: nginx:1.25-alpine
          ports:
            - containerPort: 80
          volumeMounts:
            - name: upload
              mountPath: /var/www/html/upload
            - name: nginx-config
              mountPath: /etc/nginx/conf.d/default.conf
              subPath: default.conf
      volumes:
        - name: upload
          persistentVolumeClaim:
            claimName: bitrix-upload
        - name: php-fpm-config
          configMap:
            name: php-fpm-config
        - name: nginx-config
          configMap:
            name: nginx-config

Dockerfile для образу Бітрікс

FROM php:8.2-fpm-bullseye

RUN apt-get update && apt-get install -y \
    libzip-dev libpng-dev libjpeg-dev libwebp-dev \
    && docker-php-ext-install pdo_mysql zip gd opcache

RUN pecl install redis && docker-php-ext-enable redis
RUN pecl install memcached && docker-php-ext-enable memcached

COPY php.ini /usr/local/etc/php/conf.d/99-bitrix.ini
COPY --chown=www-data:www-data . /var/www/html

# upload/ монтується як PVC, тому виключаємо з образу
RUN rm -rf /var/www/html/upload

WORKDIR /var/www/html

Важливо: код Бітрікс (bitrix/, local/, публічні php-файли) запікається в образ. upload/ монтується зовні через PVC. Оновлення сайту = сборка нового образу + rolling update Deployment'а.

База даних поза Kubernetes

Базу даних MySQL/PostgreSQL не рекомендується запускати в k8s без спеціалізованих операторів (Percona Operator, CloudNativePG). Простіше використовувати managed-рішення: AWS RDS, Yandex Cloud Managed MySQL, або виділений сервер поза кластером. Бітрікс підключається за стандартним хостом і портом через Secret.

Горизонтальне масштабування

Після вирішення проблем з сесіями та кешем Deployment масштабується командою:

kubectl scale deployment bitrix-app --replicas=5

Або автоматично через HorizontalPodAutoscaler:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: bitrix-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: bitrix-app
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

CI/CD-пайплайн

git push → GitLab CI/CD:
  1. docker build -t registry/bitrix-app:${CI_COMMIT_SHA} .
  2. docker push registry/bitrix-app:${CI_COMMIT_SHA}
  3. kubectl set image deployment/bitrix-app php-fpm=registry/bitrix-app:${CI_COMMIT_SHA}
  4. kubectl rollout status deployment/bitrix-app

Rolling update замінює pod'и по одному — нульовий downtime при деплоях.

Строки

Етап Вміст Строк
Аналіз і підготовка Аудит конфігурації Бітрікс, вибір рішень для сесій/кеша 2–3 дні
Dockerfile + образ Сборка, перевірка працездатності 2–3 дні
k8s-маніфести Deployment, Service, Ingress, PVC, ConfigMap, Secret 3–4 дні
Redis/Memcached Розгортання та налаштування session/cache 1–2 дні
CI/CD Пайплайн сборки та деплоя 2–3 дні
Тестування Навантажувальні тести, перевірка sticky session 2–3 дні

Разом: 2–3 тижні для production-окружения. Для dev/staging — швидше.