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

Создание новой веб-публикации и внесение изменений в существующую, а также определение подходящего сервера для её размещения – всё это стало нетривиальной задачей.
Основным инструментом для управления веб-публикациями стал 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
Необязательное поле. Доступ к публикации ограничивается пользователями из указанной группы доступа.
Вот пример для тестового окружения одного из проектов:

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