Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
A colpo d'occhio
Obiettivo: Usare il proxy di sviluppo con Docker Compose
Tempo: 20 minuti
Plugin: Vari
Prerequisiti: ConfigurareIl Proxy di sviluppo, Docker e Docker Compose installati
Quando si sviluppano applicazioni con Docker, è possibile usare Dev Proxy per testare il modo in cui l'app gestisce gli errori dell'API, la limitazione o le risposte fittizie dell'API. Questo articolo illustra come usare Dev Proxy con Docker Compose in due scenari:
- Dev Proxy in esecuzione nel computer host, app in un contenitore
- Dev Proxy in esecuzione in un contenitore insieme al contenitore dell'app
Scenario 1: Dev Proxy nell'host, app nel contenitore
In questo scenario si esegue Dev Proxy direttamente nel computer mentre l'applicazione viene eseguita in un contenitore Docker. Questo approccio è utile quando si sviluppa attivamente e si vuole interagire direttamente con Dev Proxy.
Configurare il contenitore dell'applicazione
Crea un docker-compose.yaml file che configuri l'applicazione per l'uso del proxy di sviluppo in esecuzione nell'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"
Avviare Dev Proxy nell'host
Prima di avviare il contenitore dell'applicazione, avviare Dev Proxy nel computer host. In macOS e Linux associare Dev Proxy a tutte le interfacce di rete:
devproxy --ip-address 0.0.0.0
In Windows è possibile avviare il proxy di sviluppo normalmente:
devproxy
Gestire i certificati TLS/SSL
Quando l'applicazione effettua richieste HTTPS tramite Dev Proxy, il contenitore deve considerare attendibile il certificato del proxy di sviluppo. È possibile procedere in due modi:
Opzione 1: Disabilitare la convalida del certificato (solo sviluppo)
Per i test rapidi, è possibile disabilitare la convalida dei certificati nell'applicazione. Per le applicazioni Node.js, impostare la NODE_TLS_REJECT_UNAUTHORIZED=0 variabile di ambiente (già inclusa nell'esempio precedente). Per le applicazioni .NET, è possibile configurare il client HTTP per ignorare la convalida del certificato.
Attenzione
Non disabilitare mai la convalida del certificato nel codice di produzione.
Opzione 2: Considerare attendibile il certificato del proxy di sviluppo nel contenitore
Per un'installazione più simile alla produzione, installare il certificato Dev Proxy nel container. Prima di tutto, esportare il certificato dall'host e aggiungerlo all'immagine Docker. Per informazioni dettagliate, vedere Usare Dev Proxy con applicazioni .NET in esecuzione in Docker .
Avviare l'applicazione
Avviare il contenitore dell'applicazione:
docker compose up
L'applicazione ora instrada tutto il traffico HTTP e HTTPS tramite Dev Proxy in esecuzione nell'host.
Scenario 2: Proxy di sviluppo e app in contenitori separati
In questo scenario più avanzato, sia Dev Proxy che l'applicazione vengono eseguiti nei contenitori Docker. Questo approccio è utile per le pipeline CI/CD o quando si vuole un ambiente di sviluppo completamente in contenitori.
Creare il volume del certificato
Entrambi i contenitori devono accedere al certificato del proxy di sviluppo. Creare un volume Docker per condividerlo:
docker volume create devproxy-cert
Creare lo script del punto di ingresso
Crea uno entrypoint.sh script che installa il certificato del proxy di sviluppo quando il contenitore dell'applicazione si avvia.
#!/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 "$@"
Rendere eseguibile lo script:
chmod +x entrypoint.sh
Creare il Dockerfile dell'applicazione
Creare un Dockerfile per l'applicazione che includa i prerequisiti di installazione del certificato:
# 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"]
Creare la configurazione di Docker Compose
Creare un docker-compose.yaml file che definisce entrambi i servizi:
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:
Creare un file di configurazione del proxy di sviluppo
Creare un devproxyrc.json file nella stessa directory di 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"
}
]
}
Avvia i contenitori
Avviare entrambi i contenitori con Docker Compose:
docker compose up
Dev Proxy viene avviato per primo e viene generato il relativo certificato. Il contenitore dell'applicazione attende il certificato, lo installa e quindi avvia l'applicazione. Tutte le richieste HTTP e HTTPS dall'applicazione vengono ora instradate tramite Dev Proxy.
Interagire con il proxy di sviluppo
Poiché Dev Proxy viene eseguito in un contenitore, è possibile interagire con esso in diversi modi:
Uso del terminale
Connettersi al contenitore Dev Proxy:
docker attach <container-name>
Uso dell'API del proxy di sviluppo
L'API del proxy di sviluppo è esposta sulla porta 8897. È possibile usarlo per controllare il proxy di sviluppo a livello di codice:
# Start recording
curl -X POST http://localhost:8897/proxy/recording/start
# Stop recording
curl -X POST http://localhost:8897/proxy/recording/stop
Per altre informazioni, vedere Dev Proxy API.