Coder Social home page Coder Social logo

docker-ims.ostis's Introduction

Docker Pulls

Deprecation

Докеризацией OSTIS занялись официально и более серьёзно, так что скорее всего вы ищете этот репозиторий.

Dockerized ims.ostis

Это инструкция по запску локального сервера ims.ostis в Docker контейнере.

Такой способ позволяет одной командой запускать сервер на любой операционной системе и не требует локальной установки проекта, при этом гораздо проще манипулировать несколькими базами или запускать их параллельно. Шанс появления проблем с запуском сервера сводится к минимуму, так как он происходит в заранее подготовленном изолированном контейнере.

Установка и запуск

Шаг 0

Установить Docker:

При установке на Windows может потребоваться включить виртуализацию в биосе. Так же для Windows лучше использовать bash эмулятор, например GitBash. В CMD или PowerShell тоже можно. Но не нужно :)

Шаг 1

Склонировать этот репозиторий:

git clone https://github.com/ARtoriouSs/docker-ims.ostis.git
cd docker-ims.ostis

Шаг 2

Есть два варианта: запускать просто базу / агенты на SCP или запускать агенты на pseudo-SCP:

Для запуска базы или 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.

Для запуска pseudo-SCP агентов

Запустить 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

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

Contributing

С точки зрения правильной организации docker контейнеров этот репозиторий далеко не в лучшем состоянии. Так вышло потому, что делал я это когда только начинал изучать докер, да и сама система довольно специфична. Сейчас у меня особо нет времени и мотивации заниматься рефакторингом, поэтому если кто-то хочет внести свой вклад в оптимизацию, то буду рад принять пулл реквест. Кстати, коммиты сюда можно включать в курсач :)

Актуальные проблемы описаны в открытых issues, тут же можно предложить свои идеи или замечания.

P.S. Идейный вдохновитель Маша :)

docker-ims.ostis's People

Contributors

artoriouss avatar idealasgas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

docker-ims.ostis's Issues

docker-compose

Разделить систему на сервисы (в идеале один контейнер - один процесс)

Размер образа

Можно попробовать мигрировать образ на alpine или что-то подобное, дабы он весил поменьше

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.