Как развернуть сервер 1С:Предприятие и PostgreSQL в Docker: преимущества, недостатки и решение проблем с лицензированием?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Развертывание 1С в контейнерах Docker становится все более популярным решением среди системных администраторов и DevOps-инженеров. Это обусловлено потребностью в автоматизации тестирования, желанием изолировать различные версии платформы и ускорить процесс развертывания окружений для разработки. В данной статье мы подробно разберем, как подойти к этой задаче, с какими трудностями придется столкнуться и как их эффективно преодолеть.

Зачем использовать Docker для 1С: основные сценарии

Прежде чем приступать к технической реализации, давайте выясним, для чего это может быть полезно. Рассмотрим основные сценарии, в которых Docker дает ощутимые преимущества:

  1. Непрерывная интеграция и доставка (CI/CD). Это, пожалуй, главный кейс. Мы можем автоматизировать процессы с CI/CD, автоматически поднимать контейнер с нужной версией 1С, прогонять дымовые или сценарные тесты и сразу после этого удалять окружение. Это гарантирует чистоту тестов.
  2. Изоляция версий. Проанализируем ситуацию: вам нужно одновременно поддерживать проекты на версиях 8.3.18, 8.3.22 и 8.3.25. В классической схеме установка нескольких версий сервера 1С на одну ОС может вызвать конфликты портов и библиотек. В Docker каждый сервер живет в своем изолированном пространстве.
  3. Быстрый старт для разработчиков. Мы можем подготовить один docker-compose.yaml файл, с помощью которого новый сотрудник развернет всю инфраструктуру (1С + СУБД + веб-сервер) одной командой, не тратя время на ручную настройку.

Проблема лицензирования и способы ее решения

Разберем самый острый вопрос: программные лицензии 1С крайне чувствительны к изменению параметров «железа». В Docker идентификаторы контейнера (такие как MAC-адрес или UUID системы) могут меняться при каждом перезапуске, что приводит к «слету» лицензий. Рассмотрим варианты решения этой проблемы:

Вариант 1: Использование сервера лицензирования. Выясним наиболее стабильный промышленный метод. Мы можем вынести службу лицензирования на отдельный физический сервер или стабильную виртуальную машину вне Docker. Контейнеры с сервером 1С будут обращаться к этому серверу по сети за получением ключей. Для настройки среды разработчика пригодятся рецепты по установке комьюнити-лицензии на сервер 1С без графического интерфейса.

Вариант 2: Фиксация MAC-адреса. В конфигурационном файле docker-compose мы можем жестко закрепить MAC-адрес за конкретным контейнером. Посмотрим на пример настройки сетевого интерфейса:


services:
  1c-server:
    image: my-1c-image:8.3.22
    networks:
      1c-net:
        ipv4_address: 172.16.0.10
    mac_address: 02:42:ac:11:00:0a

Вариант 3: Проброс USB-ключей. Если вы используете аппаратную защиту, необходимо пробросить USB-устройство внутрь контейнера. Это делается с помощью параметра --device при запуске контейнера, однако стоит помнить, что при обновлении ядра хостовой системы настройки могут потребовать корректировки.

Особенности настройки сети и портов

Сервер 1С использует специфический набор портов, который необходимо правильно прокинуть наружу. Проанализируем стандартную схему: основной порт агента — 1540, порт менеджера кластера — 1541, и диапазон рабочих процессов — 1560-1591.

Рассмотрим два подхода к настройке сети:

  1. Режим Host. Использование network_mode: host позволяет контейнеру использовать сетевой стек хоста напрямую. Это упрощает настройку, так как не нужно пробрасывать каждый порт отдельно, и снимает проблемы с именами серверов (DNS), но снижает уровень изоляции контейнера.
  2. Bridge с пробросом портов. Если мы хотим сохранить изоляцию, нам придется перечислить все используемые порты. Важно: убедитесь, что hostname контейнера внутри сети Docker совпадает с именем, по которому к нему будут обращаться клиенты, иначе кластер 1С не сможет корректно перенаправлять запросы.

Подготовка базы данных PostgreSQL для 1С в Docker

Выясним важный нюанс: стандартный образ PostgreSQL из Docker Hub не подходит для работы с 1С. Фирма «1С» вносит в СУБД специфические патчи для корректной работы с блокировками и кодировками.

Проанализируем шаги по подготовке базы:

Рассмотрим пример секции для базы данных в docker-compose.yaml:


db:
  image: postgres:14-1c
  environment:
    POSTGRES_PASSWORD: mysecretpassword
  volumes:
    - /var/lib/1c/db-data:/var/lib/postgresql/data
  restart: always

Плюсы и минусы решения: итоговый анализ

Подводя итог нашему исследованию, выделим сильные и слабые стороны использования Docker в экосистеме 1С.

Плюсы:

Минусы:

Таким образом, мы видим, что Docker для 1С — это мощный инструмент в руках опытного администратора, особенно полезный в процессах разработки и тестирования. Однако для эксплуатации высоконагруженных «продакшн»-систем следует подходить к нему с осторожностью, уделяя особое внимание вопросам отказоустойчивости и лицензирования.

← На главную