Задать вопрос
@SeokkySss

Как реализовать возможность запускать пользовательский код на сервере и отдавать результат?

Всем привет, надеюсь, я выбрал более менее релевантные теги. Ситуация такая: мне нужно сделать функционал, схожий с сайтами типа leetcode или codewars.

Задача минимум: дать пользователю возможность решать задачи на python, js и sql. Все, что касается реализации интерфейса и взаимодействия по АПИ мне понятно, разработчик-то я в общем-то опытный, но есть нюансы касательно организации изолированного запуска кода на разных языках, которые я хочу понять.

Какие шаблоны или устоявшиеся практики есть для решения подобного рода сценариев?

1. Правильно я представляю, что для каждой технологии из перечисленных в идеале держать отдельную VPS-ку?
2. Как обеспечить невозможность сломать систему вредоносным кодом?
3. Как именно условный сервис по изолированному запуску python-кода будет принимать код, запускать его и отдавать ответ? Типа какие тесты пройдены, а какие зафейлены, сколько времени ушло на выполнение и так далее.

Пока что оставлю вопрос в такой редакции. Возможно, некоторые уточняющие вопросы направят мои формулировки в нужное русло.
  • Вопрос задан
  • 1066 просмотров
Подписаться 3 Простой 4 комментария
Пригласить эксперта
Ответы на вопрос 3
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Проще всего поискать готовые решения и либо использовать их либо посмотреть на реализацию и сделать по аналогии. А так - использовать Docker или любой аналог. Ставим на сервер докер, настраиваем отдельные контейнеры для каждого ЯП с максимальной изоляцией от ОС и хостовой ОС (например ограничить интернет, запретить запуск системных приложений и прочее). Полученный от пользователя код передаем в контейнер, например как файл в примонтированном каталоге, запускаем скрипт для выполнения кода, сохраняем результат и возвращаем его пользователю.
Ответ написан
fenrir1121
@fenrir1121
Начни с документации
Когда приходилось реализовывать похожий функционал с питоном использовал nsjail. Задаешь ограничения, закидываешь в него код, получаешь результат.
Ответ написан
Комментировать
Negash
@Negash
Невнимателен, Технарь
Argo workflow?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы