Usa Dev Proxy com o Docker Compose

De relance
Objetivo: Usa Dev Proxy com o Docker Compose
Tempo: 20 minutos
Plugins: Vários
Pré-requisitos:Configurar Dev Proxy, Docker e Docker Compose instalados

Ao desenvolver aplicações com Docker, pode querer usar Dev Proxy para testar como a sua aplicação lida com erros de API, throttling ou para simular respostas de API. Este artigo mostra-te como usar Dev Proxy com o Docker Compose em dois cenários:

  • Proxy de desenvolvimento a correr na tua máquina anfitriã, aplicação num contentor
  • Proxy de desenvolvimento a correr num container juntamente com o container da sua aplicação

Cenário 1: Proxy de desenvolvimento no host, aplicação no contentor

Neste cenário, executa o Dev Proxy diretamente na sua máquina enquanto a aplicação corre num contentor Docker. Esta abordagem é útil quando está a desenvolver ativamente e quer interagir diretamente com o Proxy de Desenvolvimento.

Configure o seu contentor de aplicações

Crie um docker-compose.yaml ficheiro que configure a sua aplicação para usar o Proxy de Desenvolvimento a correr no seu 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"

Inicie Proxy de Desenvolvimento no seu host

Antes de iniciar o teu contentor de aplicações, inicia o Dev Proxy na tua máquina anfitriã. No macOS e Linux, vincule o Dev Proxy a todas as interfaces de rede:

devproxy --ip-address 0.0.0.0

No Windows, podes iniciar o Dev Proxy normalmente:

devproxy

Lidar com certificados TLS/SSL

Quando a sua aplicação faz pedidos HTTPS através do Dev Proxy, o contentor precisa de confiar no certificado Dev Proxy. Tem duas opções:

Opção 1: Desativar a validação de certificados (apenas desenvolvimento)

Para testes rápidos, pode desativar a validação de certificados na sua aplicação. Para Node.js aplicações, defina a NODE_TLS_REJECT_UNAUTHORIZED=0 variável de ambiente (já incluída no exemplo anterior). Para aplicações .NET, pode configurar o seu cliente HTTP para saltar a validação de certificados.

Atenção

Nunca desative a validação de certificados em código de produção.

Opção 2: Confiar no certificado Dev Proxy no contentor

Para uma configuração mais semelhante à produção, instala o certificado Dev Proxy no teu contentor. Primeiro, exporta o certificado do teu host e adiciona-o à tua imagem Docker. Consulte Usar Proxy de Desenvolvimento com aplicações .NET a correr no Docker para passos detalhados.

Inicie a sua candidatura

Inicie o seu contentor de aplicação:

docker compose up

A sua aplicação agora encaminha todo o tráfego HTTP e HTTPS através do Dev Proxy a correr no seu host.

Cenário 2: Proxy de desenvolvimento e aplicação em contentores separados

Neste cenário mais avançado, tanto o Proxy de Desenvolvimento como a sua aplicação correm em contentores Docker. Esta abordagem é útil para pipelines CI/CD ou quando se pretende um ambiente de desenvolvimento totalmente containerizado.

Crie o volume de certificado

Ambos os contentores precisam de acesso ao certificado Dev Proxy. Crie um volume Docker para o partilhar:

docker volume create devproxy-cert

Criar o script de entrada

Crie um entrypoint.sh script que instale o certificado Dev Proxy quando o seu contentor de aplicação inicia:

#!/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

Criar a aplicação Dockerfile

Crie um Dockerfile formulário para a sua candidatura que inclua os pré-requisitos para 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 ficheiro 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 Dev Proxy

Crie um devproxyrc.json ficheiro no mesmo diretório do seu docker-compose.yaml:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.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 contentores com o Docker Compose:

docker compose up

O Dev Proxy começa primeiro e gera o seu certificado. O teu contentor de aplicação espera pelo certificado, instala-o e depois inicia a aplicação. Todos os pedidos HTTP e HTTPS da sua aplicação são agora encaminhados através do Dev Proxy.

Interagir com Dev Proxy

Como o Dev Proxy corre num contentor, pode interagir com ele de várias formas:

Utilização do terminal

Anexar ao contentor Dev Proxy:

docker attach <container-name>

Usando a API de Proxy Dev

A API Dev Proxy está exposta na porta 8897. Podes usá-lo para controlar o Proxy de Desenvolvimento de forma programática:

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

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

Para mais informações, consulte Dev Proxy API.

Consulte também