Авторский проект IT-специалиста Олега Барабанова Персональные публикации на тему IT и не только…

Удаленная разработка с использованием VSCode и расширения Remote Development

В последнее время для разработки веб-приложений я все чаще стал использовать именно VSCode. Причин у этого решения много, но одна из основных заключается в хорошей работе средств удаленной разработки Remote Development.

Сразу отмечу, что IntelliJ IDEA также предоставляет подобный функционал, но появился он относительно недавно, имеет ощутимо более высокие требования к ресурсам и на данный момент имеет репутацию не самого стабильного решения. Тем не менее разработчики активно работают в этом направлении и думаю вскоре доведут общий функционал для удаленной разработки до более стабильного состояния.

Причина необходимости в средствах удаленной разработки

В силу специфики работ, мне часто приходится разрабатывать в разных местах и на разных системах. Это может быть как мощный стационарный компьютер, так и удобный офисный ноутбук и мобильный Windows-планшет (или ноутбук-трансформер) в поездках, при этом я должен на любой системе работать комфортно с проектами любой сложности. В общем должно быть организовано удаленное автоматизованное рабочее место (АРМ), доступное везде.

Нередко подобную проблему решают по старинке, работая с удаленной системой через RDP, VNC, X2Go и пр. Подобные решения конечно универсальны, но имеют свои недостатки:

Конечно, если вам необходимо удаленное рабочее место широкого профиля (например дополнительно с IDE запускать сторонние редакторы и пр.), то тогда только подобные решения и подойдут.

Что касается различных WebIDE, то они мне не очень подходят, т.к. очень неудобны, медлительны, нестабильны (могут конфликтовать с теми же блокировщиками рекламы или с механизмом "засыпания" вкладок браузера для экономии памяти) и имеют бедный функционал.

Расширение Remote Development в VSCode

В итоге, я для части рабочих задач остановился на применении VSCode с Remote Development Extension Pack, который представляет собой группу из нескольких расширений: Remote - SSH, Remote - Tunnels, Dev Containers, WSL.

Расширение "Remote - SSH"

Remote - SSH — расширение, реализующее функционал удаленной разработки через SSH. В качестве клиента и сервера используется широкопопулярный OpenSSH.

Т.к. это расширение использует SSH как транспорт, то неудивительно, что разработчики расширения не стали переизобретать велосипед и все вопросы авторизации и аутентификации, политик безопасности и пр. также переложили на SSH.

Расширение "Remote - Tunnel"

Remote - Tunnels — позволяет организовать удаленную разработку без использования SSH и позволяет организовать удаленную разработку с использованием веб-версии VSCode, при этом авторизация осуществляется средствами GitHub.

На данный момент ничего по данному расширению по существу сказать не могу, поскольку в работе не использую его (я предпочитаю использовать возможности SSH и соответственно мне больше подходит расширение "Remote - SSH").

Расширение "Dev Containers"

Dev Containers — расширение, позволяющее вести удобную разработку с использованием средств контейнеризации на базе Docker. Помимо работы непосредственно с Docker контейнерами, расширение умеет работать с Docker Compose и добавляет в контекстное меню кнопки поднятия и отключения связанных контейнеров:

В контекстном меню, которое вспывает при нажатии на конфиг-файл Docker Compose есть команды Up/Down/Restart, но нет Start/Stop, что может быть неудобно, т.к. не всегда нужно удалять за собой связанные контейнеры, а достаточно просто остановить их.

В таком случае, простую остановку/запуск можно сделать через контекстное меню при нажатии на название группы контейнеров:

Также можно воспользоваться командой в редакторе (по умолчанию через комбинацию ctrl+shift+p): ">Docker Containers: Compose Stop" или просто через терминал, набрав docker compose stop. Аналогичные действия и для команды start.

Расширение "WSL"

WSL — расширение, позволяющее разрабатывать Linux-приложение через одноименную подсистему WSL (Windows Subsystem for Linux). Лично у меня данное расширение обычно отключено, поскольку я стараюсь избегать в разработке использования WSL.

Преимущества связки VSCode + Remote Development Extension Pack

Данная связка имеет свои преимущества:

Касательно установки расширений на сервер есть одно неочевидное замечание. Расширение должно поддерживать версию VSCode с которого вы подсоединяетесь к серверу, а иначе оно может не запуститься. Такая коллизия может произойти, например, в том случае, когда вы установили все самые новые расширения на сервере с обновленной VSCode, а потом к этому же серверу подсоединились со старой версии редактора. К сожалению, вы можете не узнать о конфликтах версий, поскольку редактор никак специально об этом не предупреждает, расширения могут просто не запуститься.

Под всю эту конфигурацию я арендую VDS, с условием почасовой оплаты за ресурсы, что в свою очередь дает мне определенные плюсы:

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

VSCode, Remote Development и проброс портов

Иногда необходимо получить доступ к локальным (т.е. не общедоступным) портам удаленной машины. В таком случае поможет проброс портов посредством создания SSH-туннеля.

Расширение Remote Development предоставляет простой интерфейс для проброса:

Тем не менее, никто не запрещает это делать просто через консоль.

Заключение

В данной статье я просто хотел обратить внимание на один из многих программных инструментов, который я использую в разработке. Должен признать, что когда-то к VSCode я относился с некоторым скептицизмом, но по мере развития данного редактора и его инфраструктуры, мое мнение о нем стало меняться в положительную сторону.

Некоторым VSCode + Remote Development я советовал в ответах на qna.habr.com (тут и тут) и судя по всему - им оно вполне подошло. А вообще, как и любое другое программное решение, комплекс из VSCode и Remote Development стоит рассматривать с учетом совокупности плюсов и минусов их применимости относительно ваших задач помноженное на здравый смысл, ведь именно здравый смысл — ключ к верному выбору решения.