Управление веб-сайтами с публикациями 1С из GitLab

Управление веб-сайтами с публикациями 1С из GitLab

Прошло уже несколько лет с того момента, как команда 42Clouds решила перейти на платформу Linux. Процесс практически закончен, и мы хотели бы поделиться решением некоторых возникших проблем. Одной из таких проблем стало управление размещением веб-публикаций информационных баз 1С.

В нашем облаке веб-публикации работают на веб-серверах Apache под управлением ОС Debian. Нагрузка маршрутизируется, балансируется и резервируется на фронтенд-серверах с HAProxy. Развёрнуто несколько таких систем для разных окружений и проектов.

article-image

Создание новой веб-публикации и внесение изменений в существующую, а также определение подходящего сервера для её размещения – всё это стало нетривиальной задачей.

Основным инструментом для управления веб-публикациями стал Ansible, а хранилищем самих публикаций и описания инфраструктуры – Gitlab. С помощью Ansible мы получили унифицированное и масштабируемое управление инфраструктурой всех проектов и окружений, а Gitlab предоставил хранилище с возможностью совместной работы над публикациями информационных баз 1С.

Публикации информационных баз 1С представляют собой xml-файлы, генерируемые Конфигуратором 1С, а настройки веб-сервера Apache для конкретной публикации можно получить с помощью утилиты webinst от 1С. Автоматизировать шаблонные изменения публикаций и файлов конфигурации больших трудностей не вызвало. Главным “камнем преткновения” стали вопросы: как разработчику выбрать “правильный” веб-сервер и как ему настраивать маршрутизацию на фронтенд-серверах с HAProxy. Решением стал промежуточный слой абстракции с описанием правил размещения публикаций на YAML.

Все публикации собраны и описаны в одном массиве со следующими полями для каждой публикации:

  • vrd

    Имя xml-файла с параметрами публикации 1С. Файл нужно сгенерировать в "Конфигураторе 1С" и поместить в каталог VRD. Файл при размещении на целевом сервере обрабатывается шаблонизатором jinja2.

    В файле можно заменить в теге point значение pubdst на строку {{ www1C_tclient_url }} – при разворачивании будет подставлена ссылка на подходящий дистрибутив "тонкого клиента" 1С.

    В этом поле можно указать имя подкаталога из VRD. В этом случае его содержимое будет рекурсивно скопировано в каталог публикации на сервере публикаций. Файлы с расширением .j2 будут при копировании обработаны шаблонизатором, расширение .j2 при этом будет удалено. Такой способ описания публикации позволяет разместить на сервере публикаций любые дополнительные файлы, включая файл с настройками .htaccess, или файлы хранилища конфигураций 1С. Файл описания публикации можно разместить в каталоге под именем default.vrd .

  • url

    Виртуальный каталог на веб-сервере для входа в публикацию. Например, значение base1 сделает публикацию доступной по адресу httр://webserver/base1 .

    Публикацию можно "привязать" только к определённому имени сервера, указав это имя перед именем публикации: www2.srv/base1 – публикация будет доступна по ссылке httр://www2.srv/base1. Возможно указать только имя сайта с '/' в конце.

    Значение должно быть уникальным среди всех публикаций.

  • group

    Имя группы серверов, выполняющих публикацию. Серверы разбиваются на группы по версии платформы 1С.

    Публикация размещается на серверах при совпадении группы сервера и группы публикации.

  • access

    Необязательное поле. Доступ к публикации ограничивается пользователями из указанной группы доступа.

Вот пример для тестового окружения одного из проектов:

article-image

Нам удалось реализовать управление не только веб-публикациями 1С, но и другими веб-сервисами, и даже статичным контентом, размещённым на веб-серверах. Коллеги из команд разработки могут самостоятельно управлять своими сайтами. Все изменения автоматически применяются выделенным сервером – контроллером Ansible.

Дальнейшие шаги – переход от контроллера Ansible к использованию Gitlab CI/CD и расширенное управление инфраструктурой из Terraform.

Комментарии для сайта Cackle