Использование Vagrant и Ansible для разворачивания тестовой инфраструктуры

20.10.21

Администрирование - Администрирование веб-серверов

В статье опишу порядок настройки набора виртуальных машин для отладки сервисов 1С и связанных с ними.

Вводные

  • Желание освоить подход Инфраструктура как код (wikipedia)
  • Хостовая машина с Windows 10
  • Наличие рабочих удаленных виртуальных машин (KVM и LXC)
  • Необходимость создавать за раз нескольких связанных VM
  • При тестировании по возможности использовать наработки сообщества

Про WSL2 знаю, не устраивает одна виртуальная машина с ubuntu которая непонятно где и как установлена. Docker Desktop удобен для разработки микросервисов и подобному, мне нужен набор VM с настроенными "монолитами" потому что эту связку могу безболезненно переносить в инфраструктуру клиента.

 

Задача

Развернуть сервер 1С с возможностью аутентификации по OpenID Connect.

В качестве сервера аутентификации буду использовать https://www.keycloak.org/

 

Вариант решения

Установка, настройка виртуальной машины.

Распространенные под windows: Hyper-V, VMWare, VirtualBox. При решении "в лоб" вручную создается VM, скачивается установочный образ ОС, производится установка, первоначальная настройка. Немного упрощает процесс наличие подготовленных VM с ОС, например для Hyper-V, но донастройку нужно проводить вручную.

Решением подзадачи является использования системы управления виртуальными машинами https://www.vagrantup.com/. Vagrant по сути набор скриптов на Ruby, который обрабатывает декларативное описание и умеет взаимодействовать с API виртуальных машин. В качестве системы виртуализации использую VirtualBox, потому с ним наиболее продвинутая интеграция. Для каждой из систем виртуализации есть своя специфика взаимодействия, например для Hyper-V можно указать только один сетевой интерфейс, остальные добавляются PowerShell скриптом.

Наиболее часто использую Ubuntu 20.04, поэтому обычный конфиг

Vagrant.configure("2") do |config|
  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://vagrantcloud.com/search.
  config.vm.define "srv1c01" do |srv1c01|
   srv1c01.vm.box = "ubuntu/focal64"
   srv1c01.vm.hostname = "srv1c01.malikov.lan"
   srv1c01.vm.network "public_network", bridge: "Realtek PCIe GbE Family Controller"
   srv1c01.vm.provision "shell", path: "bootstrap.sh"
  end
end

По умолчанию для VirtualBox создается подключение к приватной сети и пробрасывается SSH порт до основного хоста. Добавляю публичную сеть для использования DHCP от своего роутера MikroTik c преобразованием в DNS (пример для MikroTik). Сетевых интерфейсов на моем ПК несколько (от OVPN например), поэтому указываю нужный в параметре bridge, название беру из вывода утилиты от VirtualBox:

VBoxManage.exe list bridgedifs

По умолчанию для VirtualBox создается пользователь vagrant с доступом только по ключу, секретная часть хранится в подпапке проекта ".vagrant". Мне удобнее заходить через putty и в дальнейшем к хостам будет подключаться ansible, поэтому добавляю на создаваемый хост открытую часть своего ключа:

cat /vagrant/authorized_keys >> /home/vagrant/.ssh/authorized_keys

Блок provision отрабатывает только при создании VM или при пересборке при указании ключа --provision. Использую специфику работы с VirtualBox, в которой по умолчанию в целевую машину монтируется текущая папка проекта в "/vagrant".

 

Обновление установка пакетов

Устанавливать пакеты, делать настройки возможно

  • Вручную
  • Скомпоновав набор команд в скрипты
  • Описав декларативно и передав в систему управления конфигурациями

Для установки сервера 1С "вручную"

Скачиваю с https://releases.1c.ru/ дистрибутив сервер 1С для DEB, 

Загружаю дистрибутив на виртуальную машину

vagrant upload c:\Users\Aleksandr\Downloads\deb64_8_3_17_2306.tar.gz /home/vagrant/ srv1c01

Распаковываю, устанавливаю

sudo apt update
tar -xvzf deb64*.tar.gz
sudo dpkg -i 1c-enterprise*.deb

 

Настройка через декларативное описание

Для управления конфигурациями использую https://www.ansible.com/, потому что он относительно прост не требует "агентов" на управляемых машинах.

Конфиг для VM под Ansible, монтирую папку ansible для размещения в ней playbook-ов.

Vagrant.configure("2") do |config|
  config.vm.define "controlnode" do |controlnode|
    controlnode.vm.box = "ubuntu/focal64"
    controlnode.vm.hostname = "controlnode"
    controlnode.vm.network "public_network", bridge: "Realtek PCIe GbE Family Controller"
    controlnode.vm.provision "shell", path: "bootstrap.sh"
    config.vm.synced_folder "ansible/", "/home/vagrant/ansible"
  end
end

 

Скрипт по установке Ansible. Источники гуглю, например по "install ansible ubuntu 20.04", обычно хватает статей на digitalocean.com

sudo apt-add-repository ppa:ansible/ansible
sudo apt install ansible -y

# Переношу закрытую чать ключа для доступа к остальным VM
sudo cp /home/vagrant/ansible/insecure_private_key /home/vagrant/.ssh/id_rsa
sudo chmod 700 /home/vagrant/.ssh/id_rsa

 

Чтобы каждый раз не загружать весь архив с дистрибутивом распаковал его и разместил на доступном с VM FTP. После использовал ansible playbook:

---
- hosts: "onec_srv"
  become: true
  vars:
    ansible_ssh_private_key_file: "/home/vagrant/.ssh/id_rsa"
    disr_url: "https://selcdn.ru/distrib/srv1c"
    version_1c: "8.3.18-1661"
    version_1c_dot: "8.3.18.1661"
  tasks:
    # apt update upgrade
    - name: Update all packages to their latest version
      ansible.builtin.apt:
        update_cache: yes
        name: "*"
        state: latest

    - name: "1C Install a .deb package"
      ansible.builtin.apt:
        deb: "{{ disr_url }}/1c-enterprise-{{ version_1c_dot }}-{{ item }}_{{ version_1c }}_amd64.deb"
      loop:
        - common
        - server
        - ws

с указанием файла hosts

[onec_srv]
server.malikov.lan ansible_user=vagrant

Аутентификация работает через связку "ansible_user=vagrant" и ansible_ssh_private_key_file:

 

Для сервиса keykloack использую отдельную VM

  config.vm.define "auth" do |auth|
    auth.vm.box = "ubuntu/focal64"
    auth.vm.hostname = "auth"
    auth.vm.network "public_network", bridge: "Realtek PCIe GbE Family Controller"
    auth.vm.provision "shell", path: "bootstrap.sh"
  end

Для настройки использую https://github.com/malikov-pro/ansible-role-keycloak, в репозитории описана роль которую можно переиспользовать подключив её в основной playbook сам репозиторий загрузить в подпапку /roles/keycloak

---
- hosts: "auth"
  roles:
    - keycloak
  vars:
    keycloak_admin_password: "123456"

 

Если есть готовая сборка под docker, а под VM нет готового скрипта

Например сервис PlanUML, работает через maven как собирать с ходу непонятно, но есть готовый докер контейнер, тогда на VM собрать

  • Руками https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-ru
  • Небольшим скриптом ansible https://medium.com/@pierangelo1982/install-docker-with-ansible-d078ad7b0a54
  • Проработанной ролью https://github.com/geerlingguy/ansible-role-docker

После запустить вручную сервис

docker run -d -p 8080:8080 plantuml/plantuml-server:jetty

Если поискать еще то найдется готовая сборка https://github.com/ansible-playbooks-mamono210/plantuml-server, которая переиспользует роль с docker описанную выше. Заявлено под CentOS, переделать её под Ubuntu думаю не сложно.

 

Итог

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

Настройку сервисов 1С и Keycloack опишу в отдельной статье.

Благодарю за внимание.

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструменты администратора БД Администрирование веб-серверов 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Программа для Windows автоматически проверяет выбранные базы 1С:Фреш, скачивает новые ZIP-архивы и контролирует хранение последних и ежемесячных копий. Поддерживает ручное создание копий, управление настройками резервного копирования в сервисе, Планировщик заданий Windows, уведомления об ошибках, журнал, статистику и обновление с возможностью отката. Прерванная загрузка безопасно продолжается через HTTP Range, а готовый файл проходит проверку ZIP.

1 стартмани

16.10.2026    387    2    tgr123    0    

5

Администрирование СУБД Администрирование веб-серверов Системный администратор Разработчик 1С 8.3 Россия Бесплатно (free)

Пользователь не подключается к кластеру 1С или веб-публикации, а ping ничего не говорит о нужном порте. Краткая памятка: telnet, PsPing, tcping и Test-NetConnection с разных точек сети и типовые порты 8.3.

07.10.2026    515    lyudm42ever    0    

3

Администрирование СУБД Администрирование веб-серверов Сервера Системный администратор Разработчик 1С 8.3 Россия Бесплатно (free)

Пошагово собираем двухузловой кластер серверов 1С:Предприятие 8.3.27 на Ubuntu Server 25.04: srv1cv8 и systemd, RAS, добавление worker через RAC, информационная база на внешнем PostgreSQL и публикация веб-клиента через webinst и Apache2.

06.10.2026    703    egor2shub    0    

1

Инструменты администратора БД Администрирование СУБД Администрирование веб-серверов Системный администратор Разработчик 1С 8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Материал для архитектора и администратора 1С, который выбирает СУБД под 8.3. Внутри условия батла PostgreSQL и MS SQL на одном железе, цифры по загрузке DT, контекст Linux-контура и способ повторить замеры через LOG и счётчики СУБД.

29.09.2026    858    panf8210gr    3    

1

Нейросети Администрирование веб-серверов Системный администратор Разработчик 1С 8.3 Бесплатно (free)

Модель подключена к базе 1С через MCP, индикатор в приложении зелёный, а инструмент возвращает ошибку или молчит. Проверьте у себя одним запросом: откройте в браузере адрес вида http://сервер/база/hs/любое-слово: живая база спросит логин, а ответ 409 или 502 значит, что MCP тут ни при чём. Разобрал ответы HTTP-сервиса 1С по этажам: сеть, публикация, модуль веб-сервера, кластер, пользователь базы, сам сервис. 26 сентября из тринадцати подключений не работали три, и все три ломались ниже MCP. Внутри: таблица кодов с местом починки, 500 без текста и проверка модулей конфигуратором, мост, который возвращает ошибку базы успешным ответом, и скрипт на Node, который проходит лестницу сам.

28.09.2026    922    nedomolkov.ivan    0    

0

Администрирование веб-серверов Системный администратор Разработчик 1С 8.3 Бесплатно (free)

В файле публикации 1С есть элемент, которого конфигуратор не пишет, и большинство боевых публикаций живёт без него. Мы собрали стенд и посмотрели, чего это стоит: двенадцать параллельных вызовов, десять прошли одной волной, два ждали вдвое дольше. Отказа не получил никто, и это главное: очередь стоит до сервера 1С, поэтому её не видно ни в метриках кластера, ни в журнале регистрации. Померили четыре вещи - чем задаётся предел одновременности, в каких единицах заданы таймауты пула (документация расходится сама с собой), когда правка файла вступает в силу и сколько на самом деле живёт сеанс против написанного в нём. Дальше - что проверить у себя и почему 502 рядом с 1С не всегда означает, что сервер отвалился.

26.08.2026    2048    nedomolkov.ivan    0    

2

Администрирование веб-серверов Системный администратор Разработчик 1С 8.3 Абонемент ($m)

Веб-публикация работает, но сервисы иногда перестают отвечать, изредка прилетает 500, а после простоя первый вход тянется полминуты. Обработка разбирает файл публикации и живые сеансы сама, а по стороне веб-сервера печатает PowerShell-скрипт администратору и разбирает его ответ обратно. По каждому пункту говорит не что там написано, а чем текущее значение кончится. В настройки IIS ничего не пишет.

10 стартмани

26.08.2026    1196    0    nedomolkov.ivan    0    

0

Администрирование веб-серверов Сервера HighLoad оптимизация Системный администратор Разработчик Бесплатно (free)

Каждый вечер в час закрытия смен 200 касс розничной сети начинали «залипать», и у всех было готовое объяснение: блокировки. Аудит ожиданий в час пика показал: блокировок — ноль. Сессии ждали не друг друга, а свободных потоков: заводские cost threshold for parallelism = 5 и MAXDOP = 0 на 48-ядерном сервере отправляли даже лёгкие запросы разбегаться по всем ядрам, и две трети запросов стояли в очереди за потоками. Разбираем детектив: почему рефлекс «вечером тормозит — значит, блокировки» подменяет диагностику, как читается картина ожиданий, причём тут сосед по инстансу с отчётом на 24 потока и 4,3 часа — и как две динамические настройки без перезапуска сняли проблему в тот же вечер. С чек-листом «блокировки или параллелизм».

28.07.2026    3208    nedomolkov.ivan    4    

10
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Gakuseii 1 22.03.23 08:34 Сейчас в теме
добрый день, ссылка на гитхаб не работает для кк
ну и самое интересное не показано, что содержит bootstrap.sh
Для отправки сообщения требуется регистрация/авторизация