Докеризацией OSTIS занялись официально и более серьёзно, так что скорее всего вы ищете этот репозиторий.
Это инструкция по запску локального сервера ims.ostis в Docker контейнере.
Такой способ позволяет одной командой запускать сервер на любой операционной системе и не требует локальной установки проекта, при этом гораздо проще манипулировать несколькими базами или запускать их параллельно. Шанс появления проблем с запуском сервера сводится к минимуму, так как он происходит в заранее подготовленном изолированном контейнере.
Установить Docker:
При установке на Windows может потребоваться включить виртуализацию в биосе. Так же для Windows лучше использовать bash эмулятор, например GitBash. В CMD или PowerShell тоже можно. Но не нужно :)
Склонировать этот репозиторий:
git clone https://github.com/ARtoriouSs/docker-ims.ostis.git
cd docker-ims.ostis
Есть два варианта: запускать просто базу / агенты на SCP или запускать агенты на pseudo-SCP:
Запустить run.sh:
./run.sh /путь/к/папке/с/базой [--noupdate] [--port=$port]
/путь/к/папке/с/базой — это относительный или абсолютный путь к папке, где лежат все файлы, которые должны быть в базе. Скорее всего, это будет что-то вроде ~/ostis/kb. --noupdate это необязательный аргумент, который предотвратит обновление репозиториев при сборке контейнера. Его стоит использовать, если в репозитории системы попали нерабочие изменения. Состояние репозиториев образа можно найти здесь. --port= это необязательный аргумент, который принимает значение порта, который будет слушать сервер, например, если выполнить ./run.sh ostis/kb --port=7000
, то сервер будет доступен на localhost:7000. По стандарту используется порт 8000. Можно также посмотреть ./run.sh --help
.
Чтобы выключить сервер нужно нажать ctrl + C или ctrl + Z.
После этого можно внести изменения в базу и повторить шаг 2.
Запустить run_pseudo_scp.sh:
./run_pseudo_scp.sh /путь/к/папке/с/кодом [--noupdate] [--executable=$executable] [--tests-dir=$tests_dir]
/путь/к/папке/с/кодом — это относительный или абсолютный путь к папке, где лежит код pseudo-SCP программы, в ней должен быть файл CMakeLists.txt, а так же директория graph с тестами. Если директория с тестами называется иначе, нужно задать её название в параметре --tests-dir, но она в любом случае должна быть внутри директории с кодом (докер не позволяет копировать что-либо вне контекста сборки). Параметр --executable позволяет задать название исполняемого файла, по стандарту это wave, можно изменить в CMakeLists.txt. --noupdate, как описано выше предотвращает обновление репозиториев при сборке. Если делать всё по методичке и ничего не менять, кроме собственно кода, то запуск должен свестись к простому ./run_pseudo_scp.sh /путь/к/папке/с/кодом
.
Касательно самого кода:
- Важно правильно указать пути в функции main (см. методичку):
params.repo_path = "/ostis/kb.bin";
params.config_file = "/ostis/config/sc-web.ini";
params.ext_path = "/ostis/sc-machine/bin/extensions";
- Стоит иметь ввиду, что запустить среду разработки в контейнере нельзя, так что дебажить придётся сиаутами.
Когда код отработает, он напечатает в консоль вывод и сам выйдет из контейнера.
После этого можно внести изменения в код и повторить шаг 2.
Скрипт clean.sh удаляет все оставшиеся контейнеры. Это почти полностью выполняется в начале run.sh, так что при каждом новом запуске всё лишнее будет удаляться, но в самом конце развлечений лучше сделать дополнительно:
./clean.sh
В run_pseudo_scp.sh очистка выполняется и в начале, и в конце, поэтому чистить вручную необязательно.
Также можно посмотреть содержимое kb в уже собранной и запущенной системе, например, чтобы убедиться, что в контейнер попали правильные файлы. Для этого пока контейнер запущен в новой вкладке:
./show_kb.sh
Все найденные проблемы и их возможные решения будут тут.
С точки зрения правильной организации docker контейнеров этот репозиторий далеко не в лучшем состоянии. Так вышло потому, что делал я это когда только начинал изучать докер, да и сама система довольно специфична. Сейчас у меня особо нет времени и мотивации заниматься рефакторингом, поэтому если кто-то хочет внести свой вклад в оптимизацию, то буду рад принять пулл реквест. Кстати, коммиты сюда можно включать в курсач :)
Актуальные проблемы описаны в открытых issues, тут же можно предложить свои идеи или замечания.
P.S. Идейный вдохновитель Маша :)