Docker Compose ile Dev Proxy kullanma

Bir bakışta
Hedef: Docker Compose ile Dev Proxy kullanma
Süre: 20 dakika
Eklentiler: Çeşitli
Önkoşullar:Dev Proxy kurulumu yapılmış, Docker ve Docker Compose yüklü

Docker ile uygulama geliştirirken, uygulamanızın API hatalarını nasıl ele aldığını, sınırlandırma ile veya sahte API yanıtlarıyla nasıl başa çıktığını test etmek için Dev Proxy kullanmayı düşünebilirsiniz. Bu makalede, Docker Compose ile Geliştirme Proxy'sini iki senaryoda nasıl kullanacağınız gösterilmektedir:

  • Konak makinenizde çalışan Dev Proxy, kapsayıcıda uygulama
  • Uygulama kapsayıcınızın yanında bir kapsayıcıda Dev Proxy çalışıyor.

Senaryo 1: Ana bilgisayarda Geliştirme Proxy'si, kapsayıcıda uygulama

Bu senaryoda, uygulamanız bir Docker kapsayıcısında çalışırken Dev Proxy'yi doğrudan makinenizde çalıştırırsınız. Bu yaklaşım, etkin bir şekilde geliştirme yaparken ve Doğrudan Geliştirme Proxy'si ile etkileşime geçmek istediğinizde kullanışlıdır.

Uygulama kapsayıcınızı yapılandırma

Uygulamanızı ana bilgisayarınızda çalışan Geliştirme Proxy'sini kullanacak şekilde yapılandıran bir docker-compose.yaml dosya oluşturun:

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"

Bilgisayarınızda Dev Proxy'yi başlatın

Uygulama kapsayıcınızı başlatmadan önce konak makinenizde Dev Proxy'yi başlatın. macOS ve Linux'ta Dev Proxy'yi tüm ağ arabirimlerine bağlayın:

devproxy --ip-address 0.0.0.0

Windows'ta Geliştirme Proxy'sini normal şekilde başlatabilirsiniz:

devproxy

TLS/SSL sertifikalarını işleme

Uygulamanız Geliştirme Ara Sunucusu aracılığıyla HTTPS istekleri yaptığında kapsayıcının Geliştirme Ara Sunucusu sertifikasına güvenmesi gerekir. İki seçeneğiniz vardır:

1. Seçenek: Sertifika doğrulamayı devre dışı bırakma (yalnızca geliştirme)

Hızlı test için, uygulamanızda sertifika doğrulamayı devre dışı bırakabilirsiniz. Node.js uygulamalar için ortam değişkenini NODE_TLS_REJECT_UNAUTHORIZED=0 ayarlayın (önceki örnekte zaten var). .NET uygulamaları için, HTTP istemcinizi sertifika doğrulamayı atacak şekilde yapılandırabilirsiniz.

Dikkat

Üretim kodunda sertifika doğrulamayı hiçbir zaman devre dışı bırakma.

2. Seçenek: Kapsayıcıdaki Geliştirme Ara Sunucusu sertifikasına güvenme

Daha üretim benzeri bir kurulum için Dev Proxy sertifikasını kapsayıcınıza yükleyin. İlk olarak, sertifikayı ana bilgisayarınızdan dışarı aktarın ve Docker görüntünüze ekleyin. Ayrıntılı adımlar için bkz. Docker'da çalışan .NET uygulamalarıyla Dev Proxy kullanma .

Uygulamanızı başlatma

Uygulama kapsayıcınızı başlatın:

docker compose up

Uygulamanız artık tüm HTTP ve HTTPS trafiğini ana bilgisayarınızda çalışan Dev Proxy aracılığıyla yönlendirir.

Senaryo 2: Ayrı kapsayıcılarda Geliştirme Proxy'si ve uygulaması

Bu daha gelişmiş senaryoda hem Dev Proxy hem de uygulamanız Docker kapsayıcılarında çalışır. Bu yaklaşım CI/CD işlem hatları için veya tamamen kapsayıcılı bir geliştirme ortamı istediğinizde kullanışlıdır.

Sertifika birimini oluşturma

Her iki kapsayıcının da Dev Proxy sertifikasına erişmesi gerekir. Paylaşmak için bir Docker birimi oluşturun:

docker volume create devproxy-cert

Giriş noktası betiğini oluşturma

Uygulama kapsayıcınız başlatıldığında Dev Proxy sertifikasını yükleyen bir entrypoint.sh betik oluşturun:

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

Betiği yürütülebilir yapın:

chmod +x entrypoint.sh

Dockerfile uygulamasını oluşturma

Uygulamanız için sertifika yükleme önkoşullarını içeren bir Dockerfile oluşturun:

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

Docker Compose yapılandırmasını oluşturma

Her iki hizmeti de tanımlayan bir docker-compose.yaml dosya oluşturun:

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:

Dev Proxy yapılandırma dosyası oluşturma

devproxyrc.json dosyasıyla aynı dizinde bir docker-compose.yaml dosyası oluşturun.

{
  "$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"
    }
  ]
}

Kapsayıcıları başlatın

Docker Compose ile her iki kapsayıcıyı da başlatın:

docker compose up

Geliştirme Proxy'si önce başlar ve sertifikasını oluşturur. Uygulama kapsayıcınız sertifikayı bekler, yükler ve uygulamanızı başlatır. Uygulamanızdan gelen tüm HTTP ve HTTPS istekleri artık Geliştirme Proxy'si aracılığıyla yönlendirilir.

Dev Proxy ile etkileşim kurma

Geliştirme Proxy'si bir kapsayıcıda çalıştığından, onunla çeşitli yollarla etkileşim kurabilirsiniz:

Terminali kullanma

Geliştirme Ara Sunucusu kapsayıcısına bağlan:

docker attach <container-name>

Dev Proxy API'sini kullanma

Dev Proxy API'si 8897 numaralı bağlantı noktasında kullanıma sunulur. Geliştirme Proxy'sini program aracılığıyla denetlemek için kullanabilirsiniz:

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

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

Daha fazla bilgi için Geliştirme Proxy API'si bölümüne bakın.

Ayrıca bakınız