Skip to content

Instantly share code, notes, and snippets.

@isumix
Last active August 22, 2022 07:58
Show Gist options
  • Save isumix/22015ae08aa462979fa9a3258f0a1dca to your computer and use it in GitHub Desktop.
Save isumix/22015ae08aa462979fa9a3258f0a1dca to your computer and use it in GitHub Desktop.
Безопасное окружение для разработчика

Недавно я задался вопросом безопасности своего дев. окружения - vscode nodejs git yarn npm... Как известно пакеты и их зависимости представляют обширный вектор для атак. Тоже самое можно сказать и про Visual Studio Code с его плагинами и средствами автоматизации, и про другие утилиты. По сути это все есть ящик пандоры с доступом к вашей системе.

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

В голове все это время крутилось: "контейнеры", поэтому решение не заставило себя долго ждать. В общем недавно у нас появилась возможность запускать сервер для vscode и подключаться к нему из своей локальной версии vscode используя remote расширение или вообще через броузер.

Я решил пойти по последнему пути что избавило от загрузки electron. Также я предпочитаю использовать open-source решения.

Для запуска нам понадобится установленный docker.

Запустите эту команду в консоли и направьте свой броузер на http://127.0.0.1:10201

docker run -d -p 127.0.0.1:10201:3000 lscr.io/linuxserver/openvscode-server:latest

image

Чтобы сохранять настройки редактора а также подключить каталог проекта нужно примомонтировать два каталога:

  -v /path/to/vscode/config:/config  -v /path/to/your/project:/project

Чтобы права подключенных файлов в linux были как у текущего пользователя:

  -e PUID=$(id -u)  -e PGID=$(id -g)

Чтобы использовать nodejs и npm добавьте параметр:

  -e "DOCKER_MODS=linuxserver/mods:code-server-nvm|linuxserver/mods:code-server-npmglobal"

Если вы хотите запустить сервер в контейнере и сделать его доступным в локальной системе:

  -p 127.0.0.1:8080:80

Чтобы наоборот, иметь доступ к локальному сервису из контейнера, используйте хост host.docker.internal и добавьте:

  --add-host host.docker.internal:host-gateway

Также можно объединить локальную сеть и сеть контейнера, тогда проброску портов можно опустить:

  --network host

А теперь все вместе:

docker run -d \
  -p 127.0.0.1:10201:3000 \
  -v /path/to/vscode/config:/config \
  -v /path/to/your/project:/project \
  -e PUID=$(id -u) \
  -e PGID=$(id -g) \
  -p 127.0.0.1:8080:80 \
  --add-host host.docker.internal:host-gateway \
  -e "DOCKER_MODS=linuxserver/mods:code-server-nvm|linuxserver/mods:code-server-npmglobal" \
  lscr.io/linuxserver/openvscode-server:latest

Создайте ярлык веб приложения редактора:

image

Установите галочку чтобы оно открывалось в отдельном окне:

image

И редактор откроется как нативное приложение:

image

Теперь можно добавить его в системный трэй:

image

У меня все, безопасного вам кодинга!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment