Использование Dev Proxy в контейнерах разработки и GitHub Codespaces

На первый взгляд
Цель: Установить Dev Proxy в контейнере разработки или GitHub Codespaces
Время: 10 минут
Предварительные требования: Проект с файлом devcontainer.json, Docker или GitHub Codespaces

При разработке в контейнере разработки или в GitHub Codespaces можно установить Dev Proxy с помощью функции контейнера разработки Dev Proxy. Компонент устанавливает Dev Proxy в контейнере и после создания контейнера создает корневой сертификат Dev Proxy, уникальный для контейнера, и делает его доверенным. Вам не нужно выполнять действия при первом запуске, чтобы самостоятельно добавить сертификат в доверенные.

Добавьте функцию Dev Proxy в контейнер разработки

Чтобы установить Dev Proxy в контейнере разработки, добавьте Feature Dev Proxy в раздел features файла .devcontainer/devcontainer.json:

{
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
  "features": {
    "ghcr.io/dotnet/dev-proxy/dev-proxy:1": {}
  }
}

Перестройте контейнер или создайте новый codespace, чтобы применить это изменение. После запуска контейнера убедитесь, что Dev Proxy установлен:

devproxy --version

Note

Эта функция имеет отдельное версионирование от Dev Proxy. ghcr.io/dotnet/dev-proxy/dev-proxy:1 относится к версии 1 Feature. Чтобы выбрать версию Dev Proxy для установки, используйте параметр version.

Настроить функцию

Функция поддерживает следующие параметры:

Вариант Description Type По умолчанию
version Версия Dev Proxy для установки: latest, beta или определенная версия, например 4.0.0 или v4.0.0. string latest
trustCertificate После создания контейнера создайте корневой сертификат Dev Proxy, уникальный для контейнера, и добавьте его в доверенные на уровне системы и в распространённых средах выполнения. boolean true

Например, чтобы установить определенную версию Dev Proxy, используйте следующую конфигурацию:

{
  "features": {
    "ghcr.io/dotnet/dev-proxy/dev-proxy:1": {
      "version": "4.0.0"
    }
  }
}

Чтобы попробовать новейшие предварительные возможности, установите version в значение beta. При установке бета-версии Feature также добавляет команду devproxy-beta.

Если вы используете Dev Proxy в общей конфигурации контейнера разработки, попробуйте закрепить Dev Proxy на определённой версии вместо latest или beta. Таким образом, все пользователи, работающие над проектом, используют одну и ту же версию Dev Proxy.

Как функция обрабатывает корневой сертификат

Dev Proxy использует корневой сертификат для расшифровки трафика HTTPS. Функция не создает сертификат при сборке образа. Если бы это произошло, сертификат и его закрытый ключ в конечном итоге оказались бы в слое образа, и все пользователи, использующие один и тот же образ или предварительную сборку Codespaces, совместно использовали бы один и тот же доверенный центр сертификации.

Вместо этого после создания контейнера (postCreateCommand) функция:

  1. Запускается devproxy cert ensure от имени пользователя удаленной системы для создания корневого сертификата, уникального для контейнера.
  2. Добавляет сертификат в хранилище системных сертификатов (/usr/local/share/ca-certificates), чтобы curl, .NET и другие средства, использующие системное хранилище, доверяли ему.

Некоторые среды выполнения не используют системное хранилище сертификатов, поэтому функция задает следующие переменные среды, чтобы указать им на системный набор сертификатов УЦ (/etc/ssl/certs/ca-certificates.crt):

Переменная Используется кем
NODE_EXTRA_CA_CERTS Node.js
REQUESTS_CA_BUNDLE Python requests
SSL_CERT_FILE Python и другие средства на основе OpenSSL

Чтобы доверять сертификату, компонент устанавливает вспомогательный скрипт, принадлежащий пользователю root, и позволяет удаленному пользователю запускать его с помощью sudo без пароля. Если вы не хотите, чтобы функция создавала сертификат и добавляла его в доверенные, установите для trustCertificate значение false:

{
  "features": {
    "ghcr.io/dotnet/dev-proxy/dev-proxy:1": {
      "trustCertificate": false
    }
  }
}

Important

Функция не настраивает хранилища ключей Java, поэтому Java приложения не доверяют корневому сертификату Dev Proxy.

Python 3.13 и более поздние версии включают строгую проверку сертификатов, которая отклоняет сертификаты, создаваемые Dev Proxy v3 и более ранними версиями для перехватываемых узлов. Чтобы вызывать API через Dev Proxy из Python 3.13 или более поздней версии, используйте Dev Proxy v4 или более поздней версии.

Используйте Dev Proxy в контейнере разработки

Функция не запускает прокси разработки и не задает переменные среды HTTP_PROXY или HTTPS_PROXY для всего контейнера. Переменные прокси-сервера на уровне контейнера будут направлять диспетчеры пакетов, git и собственный трафик VS Code через Dev Proxy, из-за чего они перестают работать, когда Dev Proxy не запущен.

Чтобы использовать Dev Proxy, запустите его в терминале в контейнере разработки с помощью файла конфигурации:

devproxy --config-file .devproxy/devproxyrc.json

Затем настройте приложение, которое вы тестируете, для использования Dev Proxy. Например, чтобы маршрутизировать запросы из приложения Node.js через Dev Proxy, запустите приложение с переменной среды HTTPS_PROXY:

HTTPS_PROXY=http://127.0.0.1:8000 npm start

Дополнительные сведения о настройке приложения для использования Dev Proxy см. в руководстве для вашего стека, например Использование Dev Proxy с приложениями Node.js или Использование Dev Proxy с приложениями .NET.

Набор инструментов прокси разработки

Эта функция добавляет расширение Dev Proxy Toolkit в VS Code в контейнере разработки. Если вы не хотите установить расширение, исключите его в файле devcontainer.json :

{
  "features": {
    "ghcr.io/dotnet/dev-proxy/dev-proxy:1": {}
  },
  "customizations": {
    "vscode": {
      "extensions": ["-garrytrinder.dev-proxy-toolkit"]
    }
  }
}

Поддерживаемые изображения

Функция поддерживает образы Debian и основанные на Ubuntu для x64 и arm64. Образы Alpine и другие образы на основе musl не поддерживаются.

См. также