Use Dev Proxy em contentores de desenvolvimento e Codespaces do GitHub

De relance
Objetivo: Instalar Dev Proxy num contentor de desenvolvimento ou em Codespaces do GitHub
Tempo: 10 minutos
Pré-requisitos: Um projeto com devcontainer.json ficheiro, Docker ou GitHub Codespaces

Se desenvolveres num dev container ou em Codespaces do GitHub, podes instalar o Dev Proxy usando a funcionalidade Dev Proxy Dev Container. Esta funcionalidade instala o Dev Proxy no contentor e, após a criação do contentor, gera um certificado de raiz do Dev Proxy exclusivo do contentor e adiciona o certificado como fidedigno. Não precisas de seguir os passos da primeira execução para confiares no certificado por ti próprio.

Adicione a funcionalidade Dev Proxy ao seu contentor de desenvolvimento

Para instalar o Dev Proxy no seu contentor de desenvolvimento, adicione a Funcionalidade do Dev Proxy à secção features do seu ficheiro .devcontainer/devcontainer.json:

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

Reconstrua o contentor ou crie um novo codespace para aplicar a alteração. Depois de o contentor iniciar, verifique se o Dev Proxy está instalado:

devproxy --version

Note

A funcionalidade é versionada 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 version opção.

Configurar a Funcionalidade

A Funcionalidade suporta as seguintes opções:

Option Description Tipo Default
version Versão Proxy de desenvolvimento para instalar: latest, beta, ou uma versão específica como 4.0.0 ou v4.0.0. cadeia (de caracteres) latest
trustCertificate Depois de criado o contentor, gerar um certificado raiz Dev Proxy único para o contentor e confiar nele em todo o sistema e para 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 as funcionalidades de pré-visualização mais recentes, defina version para beta. Quando instalas uma versão beta, a Funcionalidade também adiciona o comando devproxy-beta.

Se usar Dev Proxy numa configuração de contentor partilhado, considere fixar Dev Proxy numa versão específica, em vez de latest ou beta. Desta forma, garante-se que todos os que trabalham no projeto usam a mesma versão do Dev Proxy.

Como a funcionalidade gere o certificado raiz

O Dev Proxy utiliza um certificado raiz para desencriptar o tráfego HTTPS. A Feature não gera o certificado quando gera a imagem. Se o fizesse, o certificado e a sua chave privada acabariam numa camada de imagem, e todos os utilizadores da mesma imagem ou pré-compilação do Codespaces partilhariam a mesma autoridade certificadora de confiança.

Em vez disso, após a criação do contentor (postCreateCommand), a Funcionalidade:

  1. Executa-se devproxy cert ensure como utilizador remoto para gerar um certificado raiz único do contentor.
  2. Adiciona o certificado ao armazenamento de certificados do sistema (/usr/local/share/ca-certificates), para que o curl, o .NET e outras ferramentas que utilizem a loja do sistema confiem nele.

Alguns runtimes não utilizam a loja de certificados do sistema, por isso a Feature define as seguintes variáveis de ambiente para as apontar para o pacote CA do sistema (/etc/ssl/certs/ca-certificates.crt):

Variável 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 detido pela root e permite ao utilizador remoto executá-lo com sudo sem palavra-passe. Se não quiser que a Funcionalidade gere e confie no certificado, defina trustCertificate para false:

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

Importante

A funcionalidade não configura keystores Java, por isso as aplicações Java não confiam no certificado raiz do Proxy de Desenvolvimento.

Python 3.13 e versões posteriores permitem verificação rigorosa de certificados, que rejeita os certificados que o Dev Proxy v3 e anteriores geram para hosts intercetados. Para chamar APIs através de Dev Proxy a partir de Python 3.13 ou mais recentes, use Dev Proxy v4 ou mais recente.

Utilizar o Dev Proxy no contentor de desenvolvimento

A Funcionalidade não inicia o Dev Proxy, nem define as variáveis de ambiente HTTP_PROXY ou HTTPS_PROXY para todo o contentor. As variáveis de proxy ao nível do contentor encaminhariam o tráfego dos gestores de pacotes, do git e do próprio VS Code através do Dev Proxy, o que faz com que deixem de funcionar quando o Dev Proxy não está em execução.

Para usar o Dev Proxy, inicie-o num terminal no dev container com o seu ficheiro de configuração:

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

Depois, configura a aplicação que estás a testar para usar o Dev Proxy. Por exemplo, para encaminhar pedidos de uma Node.js app através do Dev Proxy, inicie a aplicação com a HTTPS_PROXY variável de ambiente:

HTTPS_PROXY=http://127.0.0.1:8000 npm start

Para mais informações sobre como configurar a sua aplicação para usar Dev Proxy, consulte o guia da sua stack, como Use Dev Proxy com Node.js aplicações ou Use Dev Proxy com .NET aplicações.

Pacote de Proxy de Desenvolvimento

A funcionalidade adiciona a extensão Dev Proxy Toolkit ao VS Code no contentor de desenvolvimento. Se não quiseres instalar a extensão, exclui-a no teu ficheiro devcontainer.json:

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

Imagens suportadas

A funcionalidade suporta imagens baseadas em Debian e Ubuntu em x64 e arm64. Imagens Alpine e outras baseadas em musl não são suportadas.

Ver também