Как реализовать возможность запускать пользовательский код на сервере и отдавать результат?
Всем привет, надеюсь, я выбрал более менее релевантные теги. Ситуация такая: мне нужно сделать функционал, схожий с сайтами типа leetcode или codewars.
Задача минимум: дать пользователю возможность решать задачи на python, js и sql. Все, что касается реализации интерфейса и взаимодействия по АПИ мне понятно, разработчик-то я в общем-то опытный, но есть нюансы касательно организации изолированного запуска кода на разных языках, которые я хочу понять.
Какие шаблоны или устоявшиеся практики есть для решения подобного рода сценариев?
1. Правильно я представляю, что для каждой технологии из перечисленных в идеале держать отдельную VPS-ку?
2. Как обеспечить невозможность сломать систему вредоносным кодом?
3. Как именно условный сервис по изолированному запуску python-кода будет принимать код, запускать его и отдавать ответ? Типа какие тесты пройдены, а какие зафейлены, сколько времени ушло на выполнение и так далее.
Пока что оставлю вопрос в такой редакции. Возможно, некоторые уточняющие вопросы направят мои формулировки в нужное русло.
SeokkySss, советую посмотреть на ejudge, ну и наверное можно поискать другие системы для проведения олимпиад. Там даже ядро патчат, чтобы испытуемая программа вообще ничего лишнего не могла сделать.
Проще всего поискать готовые решения и либо использовать их либо посмотреть на реализацию и сделать по аналогии. А так - использовать Docker или любой аналог. Ставим на сервер докер, настраиваем отдельные контейнеры для каждого ЯП с максимальной изоляцией от ОС и хостовой ОС (например ограничить интернет, запретить запуск системных приложений и прочее). Полученный от пользователя код передаем в контейнер, например как файл в примонтированном каталоге, запускаем скрипт для выполнения кода, сохраняем результат и возвращаем его пользователю.