Użyj Dev Proxy z Docker Compose

Na pierwszy rzut oka
Celem: Korzystanie z Proxy Dev przy użyciu Docker Compose
Czas: 20 minut
Wtyczki: Różne
Wymagania wstępne: konfigurowanie zainstalowanego serwera proxy deweloperskiego, platformy Docker i narzędzia Docker Compose

Podczas tworzenia aplikacji za pomocą Docker warto użyć Dev Proxy, aby przetestować, jak aplikacja radzi sobie z błędami API, ograniczaniem liczby żądań lub pozorowaniem odpowiedzi API. W tym artykule pokazano, jak używać serwera proxy dev z narzędziem Docker Compose w dwóch scenariuszach:

  • Serwer proxy deweloperski uruchomiony na maszynie hosta, aplikacja w kontenerze
  • Serwer proxy deweloperski działający w kontenerze wraz z kontenerem aplikacji

Scenariusz 1. Tworzenie serwera proxy na hoście, aplikacja w kontenerze

W tym scenariuszu uruchamiasz serwer proxy deweloperów bezpośrednio na maszynie, gdy aplikacja działa w kontenerze platformy Docker. Takie podejście jest przydatne podczas aktywnego opracowywania i bezpośredniej współpracy z Dev Proxy.

Konfigurowanie kontenera aplikacji

Utwórz plik, który konfiguruje aplikację docker-compose.yaml tak, aby korzystała z serwera proxy deweloperskiego uruchomionego na hoście:

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"

Uruchamianie serwera proxy deweloperskiego na hoście

Przed uruchomieniem kontenera aplikacji uruchom serwer proxy deweloperski na maszynie hosta. W systemach macOS i Linux zawiąż Dev Proxy ze wszystkimi interfejsami sieciowymi:

devproxy --ip-address 0.0.0.0

W systemie Windows można normalnie uruchomić serwer proxy deweloperów:

devproxy

Obsługa certyfikatów TLS/SSL

Gdy aplikacja wysyła żądania HTTPS za pośrednictwem serwera proxy deweloperskiego, kontener musi ufać certyfikatowi serwera proxy deweloperów. Dostępne są dwie opcje:

Opcja 1. Wyłączanie weryfikacji certyfikatu (tylko programowanie)

W celu szybkiego testowania możesz wyłączyć walidację certyfikatu w aplikacji. W przypadku aplikacji Node.js ustaw zmienną NODE_TLS_REJECT_UNAUTHORIZED=0 środowiskową (już uwzględnioną w poprzednim przykładzie). W przypadku aplikacji platformy .NET można skonfigurować klienta HTTP, aby pominąć walidację certyfikatu.

Ostrzeżenie

Nigdy nie wyłączaj walidacji certyfikatu w kodzie produkcyjnym.

Opcja 2: Zaufaj certyfikatowi proxy deweloperskiego w kontenerze

Aby uzyskać konfigurację zbliżoną do produkcyjnej, zainstaluj certyfikat Dev Proxy w kontenerze. Najpierw wyeksportuj certyfikat z hosta i dodaj go do obrazu platformy Docker. Aby uzyskać szczegółowe instrukcje, zobacz Use Dev Proxy with .NET applications running in Docker (Używanie serwera proxy deweloperskiego z aplikacjami .NET uruchomionymi na platformie Docker ).

Uruchamianie aplikacji

Uruchom kontener aplikacji:

docker compose up

Aplikacja kieruje teraz cały ruch HTTP i HTTPS za pośrednictwem serwera proxy deweloperskiego uruchomionego na hoście.

Scenariusz 2. Tworzenie serwera proxy i aplikacji w oddzielnych kontenerach

W tym bardziej zaawansowanym scenariuszu zarówno serwer proxy dev, jak i aplikacja są uruchamiane w kontenerach platformy Docker. Takie podejście jest przydatne do CI/CD lub w pełni konteneryzowanego środowiska deweloperskiego.

Tworzenie woluminu certyfikatu

Oba kontenery muszą mieć dostęp do certyfikatu proxy Dev. Utwórz wolumin platformy Docker, aby go udostępnić:

docker volume create devproxy-cert

Utwórz skrypt punktu wejścia

Utwórz skrypt, który instaluje certyfikat Dev Proxy po uruchomieniu kontenera aplikacji:

#!/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 "$@"

Utwórz plik wykonywalny skryptu:

chmod +x entrypoint.sh

Tworzenie pliku Dockerfile dla aplikacji

Utwórz Dockerfile dla swojej aplikacji, który zawiera wymagania wstępne do instalacji certyfikatu:

# 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"]

Tworzenie konfiguracji narzędzia Docker Compose

docker-compose.yaml Utwórz plik definiujący obie usługi:

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:

Tworzenie pliku konfiguracji serwera proxy dev

devproxyrc.json Utwórz plik w tym samym katalogu co plik 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"
    }
  ]
}

Uruchamianie kontenerów

Uruchom oba kontenery za pomocą narzędzia Docker Compose:

docker compose up

Proxy deweloperskie uruchamia się jako pierwsze i generuje swój certyfikat. Kontener aplikacji czeka na certyfikat, instaluje go, a następnie uruchamia aplikację. Wszystkie żądania HTTP i HTTPS z aplikacji są teraz kierowane za pośrednictwem serwera proxy deweloperów.

Interakcja z Dev Proxy

Ponieważ serwer proxy deweloperów działa w kontenerze, możesz z nim korzystać na kilka sposobów:

Korzystanie z terminalu

Podłącz się do kontenera Dev Proxy:

docker attach <container-name>

Korzystanie z interfejsu API dev proxy

Interfejs API serwera proxy dla deweloperów jest dostępny na porcie 8897. Można go użyć do programowego sterowania serwerem proxy deweloperów:

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

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

Aby uzyskać więcej informacji, zobacz Dev Proxy API.

Zobacz także