Compartilhar via


Usar o Proxy de Desenvolvimento com o Docker Compose

Visão geral
Objetivo: Usar o Proxy de Desenvolvimento com o Docker Compose
Tempo: 20 minutos
Plugins: Vários
Pré-requisitos:Configurar o Dev Proxy, o Docker e o Docker Compose instalados

Ao desenvolver aplicativos com o Docker, talvez você queira usar o Proxy de Desenvolvimento para testar como seu aplicativo lida com erros de API, limitação ou simular respostas de API. Este artigo mostra como usar o Proxy de Desenvolvimento com o Docker Compose em dois cenários:

  • Proxy de desenvolvimento em execução em seu computador host, aplicativo em um contêiner
  • Proxy de desenvolvimento em execução em um contêiner ao lado do contêiner do aplicativo

Cenário 1: Proxy de Desenvolvimento no host, aplicativo no contêiner

Nesse cenário, você executa o Proxy de Desenvolvimento diretamente em seu computador enquanto seu aplicativo é executado em um contêiner do Docker. Essa abordagem é útil quando você está desenvolvendo ativamente e deseja interagir diretamente com o Proxy de Desenvolvimento.

Configurar o contêiner do aplicativo

Crie um docker-compose.yaml arquivo que configure seu aplicativo para usar o Proxy de Desenvolvimento em execução no host:

services:
  app:
    build: .
    environment:
      # Point to Dev Proxy on the host machine
      - HTTPS_PROXY=http://host.docker.internal:8000
      - HTTP_PROXY=http://host.docker.internal:8000
      # For Node.js applications
      - NODE_TLS_REJECT_UNAUTHORIZED=0
    extra_hosts:
      # Ensure host.docker.internal resolves correctly on Linux
      - "host.docker.internal:host-gateway"

Iniciar o Proxy de Desenvolvimento em seu host

Antes de iniciar o contêiner do aplicativo, inicie o Proxy de Desenvolvimento no computador host. No macOS e no Linux, associe o Proxy de Desenvolvimento a todas as interfaces de rede.

devproxy --ip-address 0.0.0.0

No Windows, você pode iniciar o Proxy de Desenvolvimento normalmente:

devproxy

Manipular certificados TLS/SSL

Quando seu aplicativo faz solicitações HTTPS por meio do Proxy de Desenvolvimento, o contêiner precisa confiar no certificado de Proxy de Desenvolvimento. Você tem duas opções:

Opção 1: Desabilitar validação de certificado (somente desenvolvimento)

Para testes rápidos, você pode desabilitar a validação de certificado em seu aplicativo. Para aplicativos Node.js, defina a variável de NODE_TLS_REJECT_UNAUTHORIZED=0 ambiente (já incluída no exemplo anterior). Para aplicativos .NET, você pode configurar seu cliente HTTP para ignorar a validação de certificado.

Cuidado

Nunca desabilite a validação de certificado no código de produção.

Opção 2: confiar no certificado do Dev Proxy no contêiner

Para uma configuração mais semelhante à produção, instale o certificado de Proxy de Desenvolvimento em seu contêiner. Primeiro, exporte o certificado do host e adicione-o à imagem do Docker. Consulte Usar o Proxy de Desenvolvimento com aplicativos .NET em execução no Docker para obter etapas detalhadas.

Iniciar seu aplicativo

Inicie o contêiner do aplicativo:

docker compose up

Seu aplicativo agora roteia todo o tráfego HTTP e HTTPS por meio do Proxy de Desenvolvimento em execução no host.

Cenário 2: Proxy de desenvolvimento e aplicativo em contêineres separados

Nesse cenário mais avançado, o Proxy de Desenvolvimento e seu aplicativo são executados em contêineres do Docker. Essa abordagem é útil para pipelines de CI/CD ou quando você deseja um ambiente de desenvolvimento totalmente em contêineres.

Criar o volume de certificados

Ambos os contêineres precisam de acesso ao certificado de Proxy de Desenvolvimento. Crie um volume do Docker para compartilhá-lo:

docker volume create devproxy-cert

Criar o script do ponto de entrada

Crie um entrypoint.sh script que instale o certificado de Dev Proxy quando o contêiner do aplicativo for iniciado:

#!/bin/bash
set -e

# Wait for the Dev Proxy certificate to be available
echo "Waiting for Dev Proxy certificate..."
while [ ! -f /cert/rootCert.pfx ]; do
  sleep 1
done

# Convert PFX to PEM format
openssl pkcs12 \
  -in /cert/rootCert.pfx \
  -out /usr/local/share/ca-certificates/dev-proxy-ca.crt \
  -clcerts \
  -nokeys \
  -passin pass:""

# Update system certificates
update-ca-certificates

echo "Dev Proxy certificate installed"

# Execute the main command
exec "$@"

Torne o script executável:

chmod +x entrypoint.sh

Crie o Dockerfile do aplicativo

Crie um Dockerfile para o seu aplicativo que inclua os pré-requisitos de instalação do certificado:

# Example for a Node.js application
FROM node:20

# Install certificate tools
RUN apt-get update && apt-get install -y \
    openssl \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Copy application files
COPY package*.json ./
RUN npm install
COPY . .

# Copy entrypoint script
COPY entrypoint.sh /entrypoint.sh

ENTRYPOINT ["/entrypoint.sh"]
CMD ["node", "index.js"]

Criar a configuração do Docker Compose

Crie um docker-compose.yaml arquivo que defina ambos os serviços:

services:
  dev-proxy:
    image: ghcr.io/dotnet/dev-proxy:latest
    ports:
      - "8000:8000"
      - "8897:8897"
    volumes:
      # Mount your Dev Proxy configuration
      - ./devproxyrc.json:/config/devproxyrc.json
      # Share the certificate with the app container
      - devproxy-cert:/home/devproxy/.config/dev-proxy/rootCert
    # Generate the certificate on startup
    command: ["--install-cert"]
    stdin_open: true
    tty: true

  app:
    build: .
    depends_on:
      - dev-proxy
    environment:
      # Point to the Dev Proxy container
      - HTTPS_PROXY=http://dev-proxy:8000
      - HTTP_PROXY=http://dev-proxy:8000
    volumes:
      # Mount the certificate volume
      - devproxy-cert:/cert:ro

volumes:
  devproxy-cert:

Criar um arquivo de configuração do Proxy de Desenvolvimento

Crie um devproxyrc.json arquivo no mesmo diretório que o :docker-compose.yaml

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.0/rc.schema.json",
  "urlsToWatch": [
    "https://api.example.com/*",
    "https://graph.microsoft.com/*"
  ],
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    }
  ]
}

Iniciar os contêineres

Inicie ambos os contêineres com o Docker Compose:

docker compose up

O "Dev Proxy" é iniciado primeiro e gera seu certificado. O contêiner do aplicativo aguarda o certificado, instala-o e inicia o aplicativo. Todas as solicitações HTTP e HTTPS do aplicativo agora são roteada por meio do Proxy de Desenvolvimento.

Interagir com o Proxy Dev

Como o Proxy de Desenvolvimento é executado em um contêiner, você pode interagir com ele de várias maneiras:

Usando o terminal

Anexar ao contêiner do Proxy de Desenvolvimento:

docker attach <container-name>

Usando a API de Proxy de Desenvolvimento

A API de Proxy de Desenvolvimento é exposta na porta 8897. Você pode usá-lo para controlar o Proxy de Desenvolvimento programaticamente:

# Start recording
curl -X POST http://localhost:8897/proxy/recording/start

# Stop recording
curl -X POST http://localhost:8897/proxy/recording/stop

Para obter mais informações, consulte a API de Proxy de Desenvolvimento.

Consulte também