Удаленная разработка с использованием VSCode и расширения Remote Development
В последнее время для разработки веб-приложений я все чаще стал использовать именно VSCode. Причин у этого решения много, но одна из основных заключается в хорошей работе средств удаленной разработки Remote Development.
Сразу отмечу, что IntelliJ IDEA также предоставляет подобный функционал, но появился он относительно недавно, имеет ощутимо более высокие требования к ресурсам и на данный момент имеет репутацию не самого стабильного решения. Тем не менее разработчики активно работают в этом направлении и думаю вскоре доведут общий функционал для удаленной разработки до более стабильного состояния.
Причина необходимости в средствах удаленной разработки
В силу специфики работ, мне часто приходится разрабатывать в разных местах и на разных системах. Это может быть как мощный стационарный компьютер, так и удобный офисный ноутбук и мобильный Windows-планшет (или ноутбук-трансформер) в поездках, при этом я должен на любой системе работать комфортно с проектами любой сложности. В общем должно быть организовано удаленное автоматизованное рабочее место (АРМ), доступное везде.
Нередко подобную проблему решают по старинке, работая с удаленной системой через RDP, VNC, X2Go и пр. Подобные решения конечно универсальны, но имеют свои недостатки:
- необходимость на удаленной системе настраивать RDP/VNC/X2Go/.... с настройкой политик безопасности.
- необходимость на удаленной системе устанавливать графическую подсистему;
- необходимость в стабильном широкополосном соединении, с более-менее адекватными задержками до сервера, что является проблемным в случае работы через LTE.
- не очень приятное отображение вследствии сжатия передаваемого потока с потерями.
- мелкие, но досадные баги, как например проблемы с переключением раскладки на 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
Данная связка имеет свои преимущества:
- Официальная разработка и поддержка Microsoft, что дает основание полагать, что дает надежду на то, что данныое решение не будет заброшено и будет развиваться и дальше.
- Передача данных, шифрование, авторизация и аутентификация ведется стандартными средствами SSH;
- Расширения VSCode можно устанавливать как локально, так и на сервере, тем самым перенеся большую часть нагрузки на сервер;
- Простота развертывания на сервере - данное расширение при подключении к удаленному серверу само производит всю первоначальную инициализацию, включая скачивание и настройку VSCode-server.
- Стабильная и быстрая работа, даже при не самом стабильном интернете (тот же LTE);
Касательно установки расширений на сервер есть одно неочевидное замечание. Расширение должно поддерживать версию VSCode с которого вы подсоединяетесь к серверу, а иначе оно может не запуститься. Такая коллизия может произойти, например, в том случае, когда вы установили все самые новые расширения на сервере с обновленной VSCode, а потом к этому же серверу подсоединились со старой версии редактора. К сожалению, вы можете не узнать о конфликтах версий, поскольку редактор никак специально об этом не предупреждает, расширения могут просто не запуститься.
Под всю эту конфигурацию я арендую VDS, с условием почасовой оплаты за ресурсы, что в свою очередь дает мне определенные плюсы:
- Сервер доступен из любого места и в любое время.
- На сервере в любое время доступен мощный широкополосный канал.
- Оплата происходит только за те мощности, которые вам необходимы, т.е. если мне нужно немного ресурсов - я запускаю скромную по мощности машину и соответственно почасовая оплата небольшая. Если же я понимаю, что сегодня мне нужна будет мощная по производительности система, я меняю на соответствующий тариф, перезапускаю по необходимости систему и получаю рабочая система с необходимой мне большой производительностью, но правда и почасовые затраты увеличиваются.
Проблема выбора VDS, хостера и датацентра является темой отдельной статьи, поскольку для комфортной удаленной разработки очень важны отзывчивость всей системы, а некоторые хостеры злоупотребляют оверселлингом и у них перегружена дисковая подсистема, у каких-то датацентры далеко и поэтому некомфортные сетевые задержки и пр. В общем к данному выбору подходите с умом.
VSCode, Remote Development и проброс портов
Иногда необходимо получить доступ к локальным (т.е. не общедоступным) портам удаленной машины. В таком случае поможет проброс портов посредством создания SSH-туннеля.
Расширение Remote Development предоставляет простой интерфейс для проброса:
Тем не менее, никто не запрещает это делать просто через консоль.
Заключение
В данной статье я просто хотел обратить внимание на один из многих программных инструментов, который я использую в разработке. Должен признать, что когда-то к VSCode я относился с некоторым скептицизмом, но по мере развития данного редактора и его инфраструктуры, мое мнение о нем стало меняться в положительную сторону.
Некоторым VSCode + Remote Development я советовал в ответах на qna.habr.com (тут и тут) и судя по всему - им оно вполне подошло. А вообще, как и любое другое программное решение, комплекс из VSCode и Remote Development стоит рассматривать с учетом совокупности плюсов и минусов их применимости относительно ваших задач помноженное на здравый смысл, ведь именно здравый смысл — ключ к верному выбору решения.