--- tags: Функциональные части --- # Code Editor ```graphviz digraph Arch { E [label="Code Editor"] subgraph cluster_Editor { style=invis node [shape=record] E -> Supervisor Supervisor [label="{Supervisor |{ User1 Editor | ... | UserN Editor}}"] } } ``` Имеет смысл просто взять готовый редактор. Например **VSCode**. Он умеет запускаться удаленно, с доступом к нему из [браузера](https://medium.com/@vedantnimbarte7/how-to-run-visual-studio-code-in-browser-536d93b8e37c). А еще он бесплатный и с лицензией без ограничений. Было бы круто запускать в рамках сессии пользователя отдельный редактор, в котором бы можно было решать задачи по курсам. Можно пойти еще дальше и автоматизировать регистрацию на курс: внутри папки пользователя создается папка под конкретный курс, с заготовленными файлами и **VSCode** это сразу подтянет. Но для этого нужен **Supervisor**, который будет мониторить процессы с запущенными **VSCode**. Для того, чтобы запускать **VSCode** можно воспользоваться [cdr/code-server](https://github.com/cdr/code-server/blob/v3.6.0/doc/install.md#docker). Эта штука умеет запускать **VSCode** внутри **Docker**, таким образом ограничивая доступ к основной файловой системе и дает доступ только до конкретной папки. Плюс можно настраивать пароль, чтобы только пользователь знающий его мог зайти в редактор. **Supervisor** в данном случае – **Docker** сервер, можно использовать его API например из [Python](https://github.com/docker/docker-py) или [Go](https://github.com/fsouza/go-dockerclient).