---
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).