Как стать автором
Обновить

VSСode. Как настроить окружение для разработки в Docker на удаленном сервере через SSH

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров18K

Этот туториал рассчитан на людей, которые недавно вошли в коммерческую разработку и только начинают свою трудовую деятельность. Не исключаю, что ветеранам он также может быть полезен.

Для того, чтобы вести разработку на удаленной машине в Docker-контейнере, необходимо:

  1. Иметь удаленный доступ по протоколу SSH к машине с ОС Ubuntu

  2. Иметь установленный Docker на удаленной машине

  3. Установленный VSСode на локальной машине

  4. Настроенный доступ по протоколу SSH к github

  5. Копия репозитория на удаленной машине, сделанная через git clone

В нашем примере п.5 будет fork от pytorch-lightning. Я буду работать через mac OS.

Для работы в контейнере на удаленной машине, нужно сделать следующее:

  1. Открыть на локальной машине редактор VSСode и установить расширение Remote Development. В результате должны появиться следующие компоненты (нам потребуются первые два):
    - Remote Containers или Dev Containers - инструменты для разработки внутри Docker-контейнера
    - Remote - SSH - инструменты для разработки на удаленной машине с обменом данных по протоколу SSH
    - WSL - расширение для работы в Linux-среде через Windows (Windows Subsystem for Linux)

    Вот так примерно будет выглядеть окно для работы с расширениями
    Вот так примерно будет выглядеть окно для работы с расширениями
  2. Подключиться через SSH к удаленной машине через VSСode. Для этого выберем Command Palette из меню View, вводим > и выбираем команду Remote SSH: Connect to Host....

    Вот так примерно будет выглядеть палитра команд (Command Palette)
    Вот так примерно будет выглядеть палитра команд (Command Palette)

    После этого необходимо выбрать хост или ввести команду, по которой вы подключаетесь в терминале.

    Выбираем хост из предложенных. Список решил закрыть по причине безопасности
    Выбираем хост из предложенных.
    Список решил закрыть по причине безопасности
    А тут вводим команду подключение, как в терминале
    А тут вводим команду подключение, как в терминале

    Если нужного хоста нет, необходимо также указать расположение конфигурации SSH-клиента. Обычно, это ~/.ssh/config

    Окно выбора конфигурации SSH
    Окно выбора конфигурации SSH

    После настройки можно зайти на машину через IDE

  3. Открыть репозиторий через Docker-контейнер. Для этого:
    - Зайдем в репозиторий

    Это можно сделать через меню
    Это можно сделать через меню
    И выбрать репозиторий
    И выбрать репозиторий

    - Создаем папку .devcontainer
    - Создаем файлы devcontainer.json и Dockerfile.dev.

    devcontainer.json хранит метаданные для настройки окружения для разработки в виде словаря. Подробнее можно почитать здесь. Потребуются следующие параметры:
    - name - имя проекта, которое будет отображаться в самом редакторе. В текущем примере это i.lucky_dev_lightning
    - context - контекст, в котором будет идти разработка (иными словами, репозиторий, который будет корневым). В текущем примере, это просто .. (уходим на уровень выше папки .devcontainer)
    - dockerFile - имя docker-файла, по которому будет создаваться образ → сам контейнер. В текущем примере это Dockerfile.dev.
    - extensions - перечень расширений, которые необходимы для работы над проектом. Более детально про расширения можно посмотреть здесь. Имена расширений здесь имеют следующий вид:
    <EXTENSION_NAME>@<VERSION>
    Здесь важно фиксировать версию каждого расширения, потому что может случиться неожиданная ситуация, в результате которой работа может затянутся (встроенный линтер внезапно начнет выдавать ошибки, которых раньше не было, тесты не начнут заводиться из редактора и пр.). Обычно для работы с проектами на Python я использую следующий набор расширений:

    [
      "ms-python.python@2022.18.2", // для работы на Python
      "eamodio.gitlens@12.1.1", // надстройка для работы с git
      "GrapeCity.gc-excelviewer@4.2.55", // редактор таблиц
      "njpwerner.autodocstring@0.6.1", // автодобавление docsting
      "KevinRose.vsc-python-indent@1.17.0", // автовыравнивание
      "RobbOwen.synthwave-vscode@0.1.14", // просто цветовая схема (можно не брать)
      "kaih2o.python-resource-monitor@0.1.9" // мониторинг использования RAM/CPU (можно не брать)
    ]

    - runArgs - список параметров, которые будут использовать для команды run контейнера. В текущем примере я использую:

    [
      "--name",
      "i.lucky_dev_lightning"
    ]

    - remoteUser - задание non-root пользователя такого же, который используется Вами на удаленной машине.

  4. Выбрать Command Palette из меню View, вводим > и выбираем команду Remote-Containers: Open Folder in Container...

    Выбираем Remote-Containers: Open Folder in Container...
    Выбираем Remote-Containers: Open Folder in Container...
    и репозиторий
    и репозиторий
  5. Подождать, пока соберется контейнер

    Примерно такие логи должны отображаться
    Примерно такие логи должны отображаться
  6. После успешной сборки образа и запуска контейнера можно открыть терминал и убедиться по командной строке, что мы в контейнере

    Репозиторий теперь находится в workspace, а не в open-cource. Также видно, что в имени машины стоит ID контейнера 9a5e52adda9a
    Репозиторий теперь находится в workspace, а не в open-cource. Также видно, что в имени машины стоит ID контейнера 9a5e52adda9a

    Обратите внимание на название проекта (в IDE) и на название контейнера (через docker ps -a). Теперь проще ориентироваться среди запущенных контейнеров и среди нескольких проектов на VSСode.

  7. Profit!=)

Если туториал окажется полезен/недостает деталей, пишите, буду рад обратной связи! Есть также мысли сделать похожие туториалы на других ОС (Ubuntu, Windows 11).

Теги:
Хабы:
Всего голосов 14: ↑13 и ↓1+12
Комментарии23

Публикации

Истории

Работа

Data Scientist
57 вакансий
Python разработчик
139 вакансий

Ближайшие события