- Показать как можно разделить 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 и был взят отсюда.