Usar o Proxy de Desenvolvimento em contêineres de desenvolvimento e GitHub codespaces

Visão geral
Meta: Instalar o Proxy de Desenvolvimento em um contêiner de desenvolvimento ou GitHub codespaces
Tempo: 10 minutos
Pré-requisitos: Um projeto com um devcontainer.json arquivo, Docker ou codespaces de GitHub

Se você desenvolver em um contêiner de desenvolvimento ou em GitHub Codespaces, poderá instalar o Dev Proxy usando o Dev Proxy Dev Container Feature. O recurso instala o Dev Proxy no contêiner e, depois que o contêiner é criado, gera um certificado raiz do Dev Proxy exclusivo para o contêiner e confia nele. Você não precisa seguir as etapas da primeira execução para confiar no certificado por conta própria.

Adicionar o Recurso de Proxy de Desenvolvimento ao seu contêiner de desenvolvimento

Para instalar o Dev Proxy no contêiner de desenvolvimento, adicione o Dev Proxy Feature à seção features do arquivo .devcontainer/devcontainer.json:

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

Reconstrua o contêiner ou crie um novo codespace para aplicar a alteração. Depois que o contêiner for iniciado, verifique se o Dev Proxy está instalado:

devproxy --version

Note

O recurso é versionado separadamente do Dev Proxy. ghcr.io/dotnet/dev-proxy/dev-proxy:1 refere-se à versão 1 da Funcionalidade. Para escolher qual versão do Dev Proxy instalar, use a opção version.

Configurar o recurso

O Recurso dá suporte às seguintes opções:

Opção Description Tipo Default
version Versão do Proxy de Desenvolvimento a ser instalada: latest, betaou uma versão específica como 4.0.0 ou v4.0.0. cadeia latest
trustCertificate Depois que o contêiner for criado, gere um certificado raiz do Proxy de Desenvolvimento exclusivo para o contêiner e confie nele em todo o sistema e em runtimes comuns. boolean true

Por exemplo, para instalar uma versão específica do Dev Proxy, use a seguinte configuração:

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

Para experimentar os recursos de visualização mais recentes, defina version como beta. Quando você instala uma versão beta, a Funcionalidade também adiciona o comando devproxy-beta.

Se você usar o Dev Proxy em uma configuração de contêiner de desenvolvimento compartilhado, considere fixar o Dev Proxy em uma versão específica, em vez de latest ou beta. Dessa forma, você garante que todos que trabalham no projeto usem a mesma versão do Dev Proxy.

Como a funcionalidade lida com o certificado raiz

O Proxy de Desenvolvimento usa um certificado raiz para descriptografar o tráfego HTTPS. O recurso não gera o certificado quando gera a imagem. Se isso acontecesse, o certificado e sua chave privada acabariam em uma camada de imagem, e todos que usam a mesma imagem ou o prebuild do Codespaces compartilhariam a mesma autoridade de certificação confiável.

Em vez disso, depois que o contêiner é criado (postCreateCommand), o recurso:

  1. É executado devproxy cert ensure como o usuário remoto para gerar um certificado raiz exclusivo para o contêiner.
  2. Adiciona o certificado ao repositório de certificados do sistema (/usr/local/share/ca-certificates), para que curl, .NET e outras ferramentas que usam o repositório do sistema confiem nele.

Alguns runtimes não usam o repositório de certificados do sistema, portanto, o recurso define as seguintes variáveis de ambiente para apontá-las para o pacote de AC do sistema (/etc/ssl/certs/ca-certificates.crt):

Variable Usado por
NODE_EXTRA_CA_CERTS Node.js
REQUESTS_CA_BUNDLE Python requests
SSL_CERT_FILE Python e outras ferramentas baseadas em OpenSSL

Para confiar no certificado, a funcionalidade instala um script auxiliar de propriedade do root e permite que o usuário remoto o execute com sudo sem uma senha. Se você não quiser que a Funcionalidade gere e confie no certificado, defina trustCertificate como false:

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

Importante

O Recurso não configura os repositórios de chaves do Java, portanto, os aplicativos Java não confiam no certificado raiz do Proxy de Desenvolvimento.

Python 3.13 e versões mais recentes habilitam a verificação estrita de certificados, que rejeita os certificados que o Dev Proxy v3 e versões anteriores geram para hosts interceptados. Para chamar APIs por meio do Dev Proxy a partir do Python 3.13 ou mais recente, use o Dev Proxy v4 ou mais recente.

Usar o Dev Proxy no contêiner de desenvolvimento

O recurso não inicia o Proxy de Desenvolvimento e não define as HTTP_PROXY ou variáveis de ambiente HTTPS_PROXY para o contêiner inteiro. As variáveis de proxy em todo o contêiner roteariam o tráfego dos gerenciadores de pacotes, do git e do próprio VS Code por meio do Dev Proxy, o que interrompe essas ferramentas quando o Dev Proxy não está em execução.

Para usar o Dev Proxy, inicie-o em um terminal no contêiner de desenvolvimento com o arquivo de configuração:

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

Em seguida, configure o aplicativo que você está testando para usar o Proxy de Desenvolvimento. Por exemplo, para rotear solicitações de um aplicativo Node.js por meio do Dev Proxy, inicie o aplicativo com a variável de ambiente HTTPS_PROXY:

HTTPS_PROXY=http://127.0.0.1:8000 npm start

Para obter mais informações sobre como configurar seu aplicativo para usar o Dev Proxy, consulte o guia para sua pilha, como Usar Dev Proxy com aplicativos Node.js ou Usar Dev Proxy com aplicativos .NET.

Kit de ferramentas de proxy para desenvolvimento

O recurso adiciona a extensão Dev Proxy Toolkit ao VS Code no contêiner de desenvolvimento. Se você não quiser instalar a extensão, exclua-a no seu arquivo devcontainer.json:

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

Imagens suportadas

O recurso dá suporte a imagens baseadas em Debian e Ubuntu em x64 e arm64. Imagens Alpine e outras baseadas em musl não são compatíveis.

Consulte também