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



@SeokkySss

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

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

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

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

Пока что оставлю вопрос в такой редакции. Возможно, некоторые уточняющие вопросы направят мои формулировки в нужное русло.


Решения вопроса 0


Ответы на вопрос 2



@VoidVolker

Проще всего поискать готовые решения и либо использовать их либо посмотреть на реализацию и сделать по аналогии. А так — использовать Docker или любой аналог. Ставим на сервер докер, настраиваем отдельные контейнеры для каждого ЯП с максимальной изоляцией от ОС и хостовой ОС (например ограничить интернет, запретить запуск системных приложений и прочее). Полученный от пользователя код передаем в контейнер, например как файл в примонтированном каталоге, запускаем скрипт для выполнения кода, сохраняем результат и возвращаем его пользователю.



@fenrir1121

Когда приходилось реализовывать похожий функционал с питоном использовал nsjail. Задаешь ограничения, закидываешь в него код, получаешь результат.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *