- Показать как можно разделить DocHub на различные репозитории в зависимости от их назначения
- Показать как реализовать контейнеризацию выделенных репозиториев на базе Docker
- Показать как можно оптимизировать работу с контейнерами DocHub на примере docker compose
В процессе работы с DocHub стало понятно, что процесс наполнения архитектурного озера данных и процесс реализации и доработки метамодели - это разные процессы. Данные для озера нужно катить часто, а метамодель нужно катить редко и проверять качественно. Если они развертываются в рамках одного процесса, то мы получаем конфликт между скоростью и качеством. Так же нужно учитывать что этими процессами могут заниматься разные люди.
После того как в DocHub была реализована возможность разделения метамодели и данных, было принято решение переструктурировать подход управления DocHub.
Мы определили четыре основных компонента DocHub, каждый из которых, в первую очередь, подразумевает свой процесс разработки, тестирования и развертывания
Такой подход позволяет нам:
- Управлять разными процессами по разному
- Существенно ускорить процесс выкатки изменений (в первую очередь озера данных)
- Улучшить качество метамодели, так как в процесс можно встроить этап полноценного тестирования
- Валидации обновления озера данных в рамках пайплайна развертывания
- Вынесение плагинов в отдельный компонент
Все каталоги находящиеся в корневой директории можно рассматривать как отдельные репозитории.
|- backend - конфигурация бэкенда
| |- dochub - подмодуль ссылающийся на оригинальный репозиторий DocHub (https://github.com/RabotaRu/DocHub)
| |- Dockerfile - настройка контейнера Docker
| |- entrypoint.sh - запуск бэкенда
|- frontend - конфигурация фронтенда
| |- dochub - подмодуль ссылающийся на оригинальный репозиторий DocHub (https://github.com/RabotaRu/DocHub)
| |- Dockerfile - настройка контейнера Docker
| |- entrypoint.sh - наполнение переменных для разных стендов DocHub, запуск nginx со статикой фронтенда
| |- nginx.conf - конфигурация nginx, важный нюанс: фронтенд проксирует бэкенд наружу, т.е. запросы проксируются с браузера через nginx фронтенда в бэкенд
|- manifest - манифесты архитектурного озеры данных
| |- manifest - подмодуль ссылающийся на репозиторий с примером данных DocHubExampleManifest (https://github.com/ValentinKozlov/DocHubExampleManifest)
| |- Dockerfile - настройка контейнера Docker
| |- nginx.conf - настройка nginx через который раздаются данные для бэкенда
|- metamodel - манифесты архитектурного озеры данных
| |- metamodel - подмодуль ссылающийся на репозиторий с примером метамодели DocHubExampleMetamodel (https://github.com/ValentinKozlov/DocHubExampleMetamodel)
| |- Dockerfile - настройка контейнера Docker
| |- nginx.conf - настройка nginx через который раздаются данные для бэкенда
|- docker-compose.yaml - пакетный запуск контейнеров Docker.
|- README.md - описание репозитория
- Клонируйте себе пример
git clone --recurse-submodules https://github.com/cu3blukekc/SwampHub.gitлибо просто клонируйте себе репозиторий, перейдите в него и выполните командыgit submodule init && git submodule update. В случае с Windows используйте для клонирования только PowerShell, также на винде не всегда отрабатывает командаgit clone --recurse-submodules, поэтому выполните следующие шаги:- Выполните команду git clone https://github.com/cu3blukekc/SwampHub.git
- Перейдите в папку SwampHub
cd SwampHub - Выполните команду
git submodule init - Выполните команду
git submodule update(выполняется минут 10-15)
- Создайте в корне пустой файл .env
- Выполните команду docker-compose up или docker compose up (v2)
- Откройте браузер и наберите http://localhost:8080/
- Успех!
- Празднование успеха!
Так как в репозитория часть проекта собирается из подмодулей, то для того чтобы их обновить был написан скрипт update.sh. Зайдите в корень репозитория swamp и запустите скрипт.
Вы можете обновить каждый репозиторий подключенный сабмодулем вручную. Для этого зайдите в нужный репозиторий и выполните команду git pull, но обратите внимание, что такие репозитории клонируются не на дефолтные ветки, а на конкретные коммиты, поэтому перед обновлением измените ветку на основную.
- Удалить секцию подмодуля из .gitmodules
- Выполнить команду git add .gitmodules
- Удалить подмодуль из .git/config
- Из корня репозитория выполнить команду git rm -rf --cached path_to_submodule
- Удалить папку с подмодулем
Для того чтобы сделать reload бэкенда, в DocHub существует отдельная API. Для его работы в backend нужно передать переменную окружения VUE_APP_DOCHUB_RELOAD_SECRET для доступа к перезагрузке данных архитектуры.
- В файле
.envи внесите значение переменнойVUE_APP_DOCHUB_RELOAD_SECRET=все что угодно - Перезапустите контейнер с backend, если он был запущен
- Внесите изменения в озеро данных или в метамодель
- Выполните скрипт
reload_backend.sh - Проверьте что новые изменения подтянулись на портал DocHub
Инструкция развертывания в windows
- Запускаем в Oracle VM VirtualBox и переходим в виртуальную машину с именем
SwampHub_defaul_*(команда "Показать") - Вводим логин и пароль: vagrant / vagrant
- Переходим в каталог
cd /vagrant - Запускаем скрипт запуска
./scripts/run.sh - Запускаем сайт http://localhost:8080
- Вся работа по настройке контейнеров Docker была выполнена Александром Трубниковым https://t.me/cu3blukekc
- Примеры репозиториев с метамоделью, данными и текущая инструкция были адаптированы Валентином Козловым https://t.me/i_frog_i.
- Репозиторий для сборки сервера PlantUML принадлежит Владиславу Маркину https://t.me/vlad_markin и был взят отсюда.