Dev Proxy használata a Docker Compose használatával

Egy pillantással
Cél: Dev Proxy használata a Docker Compose használatával
Idő: 20 perc
Beépülő modulok: Különböző
Előfeltételek:Dev Proxy, Docker és Docker Compose telepítése

Ha a Dockerrel fejleszt alkalmazásokat, érdemes lehet a Dev Proxy használatával tesztelni, hogy az alkalmazás hogyan kezeli az API-hibákat, a szabályozást vagy az API-válaszokat. Ez a cikk bemutatja, hogyan használhatja a Dev Proxyt a Docker Compose használatával két forgatókönyvben:

  • A gazdaszámítógépen futó fejlesztői proxy, egy tárolóban lévő alkalmazás
  • Egy tárolóban futó fejlesztői proxy az alkalmazástároló mellett

1. forgatókönyv: Dev Proxy a gazdagépen, alkalmazás a tárolóban

Ebben a forgatókönyvben a Dev Proxyt közvetlenül a számítógépen futtatja, miközben az alkalmazás docker-tárolóban fut. Ez a megközelítés akkor hasznos, ha aktívan fejleszt, és közvetlenül szeretné használni a Dev Proxyt.

Az alkalmazástároló konfigurálása

Hozzon létre egy docker-compose.yaml fájlt, amely konfigurálja az alkalmazást a gazdagépen futó dev proxy használatára:

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"

Fejlesztői proxy indítása a gazdagépen

Az alkalmazástároló elindítása előtt indítsa el a Dev Proxyt a gazdagépen. MacOS és Linux rendszeren kösse a Dev Proxyt az összes hálózati adapterhez:

devproxy --ip-address 0.0.0.0

Windows rendszeren a Dev Proxyt a szokásos módon indíthatja el:

devproxy

TLS/SSL-tanúsítványok kezelése

Amikor az alkalmazás HTTPS-kérelmeket küld a Dev Proxyn keresztül, a tárolónak megbízhatónak kell lennie a Dev Proxy tanúsítványában. Két lehetőség áll rendelkezésre:

1. lehetőség: Tanúsítványérvényesítés letiltása (csak fejlesztés esetén)

A gyors teszteléshez letilthatja a tanúsítványérvényesítést az alkalmazásban. Node.js alkalmazások esetében állítsa be a NODE_TLS_REJECT_UNAUTHORIZED=0 környezeti változót (amely már szerepel az előző példában). .NET-alkalmazások esetén konfigurálhatja a HTTP-ügyfelet úgy, hogy kihagyja a tanúsítványérvényesítést.

Caution

Soha ne tiltsa le a tanúsítványérvényesítést az éles kódban.

2. lehetőség: Bízzon meg a tároló fejlesztői proxytanúsítványában

Az éles környezethez hasonló beállításhoz telepítse a Dev Proxy tanúsítványt a tárolódba. Először exportálja a tanúsítványt a gazdagépről, és adja hozzá a Docker image-hez. Részletes lépéseket a Dockerben futó .NET-alkalmazások fejlesztői proxy használata című témakörben talál.

Az alkalmazás indítása

Indítsa el az alkalmazástárolót:

docker compose up

Az alkalmazás mostantól az összes HTTP- és HTTPS-forgalmat a gazdagépen futó Dev Proxyn keresztül irányítja át.

2. forgatókönyv: Fejlesztői proxy és alkalmazás külön tárolókban

Ebben a fejlettebb forgatókönyvben a Dev Proxy és az alkalmazás is Docker-tárolókban fut. Ez a megközelítés CI/CD-folyamatok esetén, vagy teljes körű tárolóalapú fejlesztési környezet esetén hasznos.

A tanúsítványkötet létrehozása

Mindkét tárolónak hozzá kell férnie a Fejlesztői proxy tanúsítványhoz. Hozzon létre egy Docker-kötetet a megosztáshoz:

docker volume create devproxy-cert

A belépésipont-szkript létrehozása

Hozzon létre egy szkriptet entrypoint.sh , amely telepíti a Dev Proxy tanúsítványt az alkalmazástároló indításakor:

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

A szkript végrehajthatóvá tétele:

chmod +x entrypoint.sh

Az alkalmazás Dockerfile létrehozása

Hozzon létre egy Dockerfile az alkalmazás számára, amely tartalmazza a tanúsítványtelepítés előfeltételeit.

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

A Docker Compose konfigurációjának létrehozása

Hozzon létre egy docker-compose.yaml fájlt, amely mindkét szolgáltatást meghatározza:

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:

Fejlesztői proxy konfigurációs fájljának létrehozása

Hozzon létre egy devproxyrc.json fájlt ugyanabban a könyvtárban, mint a következő 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"
    }
  ]
}

A tárolók indítása

Indítsa el mindkét tárolót a Docker Compose használatával:

docker compose up

A Dev Proxy először elindul, és létrehozza a tanúsítványát. Az alkalmazástároló megvárja a tanúsítványt, telepíti, majd elindítja az alkalmazást. Az alkalmazás minden HTTP- és HTTPS-kérését a dev proxy irányítja át.

A fejlesztői proxy használata

Mivel a Dev Proxy egy tárolóban fut, többféleképpen is használhatja:

A terminál használata

Csatolja a Dev Proxy tárolóhoz:

docker attach <container-name>

A Dev Proxy API használata

A Dev Proxy API a 8897-es porton érhető el. Használatával programozott módon vezérelheti a dev proxyt:

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

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

További információ: Dev Proxy API.

Lásd még