---
# System prepended metadata

title: Code Editor
tags: [Функциональные части]

---

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