Konfiguracja Docker
Docker to rekomendowany sposób uruchamiania AI Proxy Self-hosted. Wykorzystanie gotowego obrazu kontenera pozwala ograniczyć złożoność związaną z instalacją platformy .NET, zarządzaniem zależnościami oraz konfiguracją środowiska. Konteneryzacja zapewnia spójne działanie aplikacji w różnych środowiskach — od lokalnego komputera z Docker Desktop, przez serwery produkcyjne, aż po platformy orkiestracyjne, takie jak Kubernetes czy Azure Container Instances.
W tym przewodniku opisano gotowe konfiguracje docker-compose dla trzech głównych scenariuszy: podstawowego wdrożenia z certyfikatem PEM, konfiguracji z certyfikatem PFX zabezpieczonym hasłem oraz bardziej zaawansowanego wariantu z integracją Azure Application Insights na potrzeby monitorowania. Każda z konfiguracji zawiera opis parametrów oraz instrukcję uruchomienia.
Jeśli wdrażasz AI Proxy po raz pierwszy, zalecamy rozpoczęcie od wariantu 1 z certyfikatem PEM. Jest to najprostsza konfiguracja i działa na wszystkich wspieranych platformach.
Wymagania
- Docker Desktop lub Docker Engine,
- certyfikat SSL/TLS (PEM lub PFX),
- plik
aiconfiguration.json.
W środowisku produkcyjnym zalecane jest użycie certyfikatu wystawionego przez zaufane centrum certyfikacji. W środowiskach deweloperskich można użyć certyfikatu self-signed. Przykłady jego przygotowania znajdują się na końcu strony.
Konfiguracje Docker Compose
Poniżej przedstawiono trzy warianty konfiguracji dla różnych scenariuszy wdrożeniowych.
Wariant 1: Certyfikat PEM (docker-compose-basic-pem.yml)
Podstawowa konfiguracja przeznaczona dla certyfikatów w formacie PEM, takich jak certyfikaty Let's Encrypt lub pliki wygenerowane przy użyciu OpenSSL.
name: aiproxy_containers
services:
ai-proxy:
image: webconbps/aiproxy:1.0.0.235
container_name: ai-proxy
restart: unless-stopped
ports:
- "5298:8080"
- "7033:8081"
environment:
- ASPNETCORE_ENVIRONMENT=Production
- AppConfiguration__SelfHosted__Certificate__Path=/app/https/certificate.pem
- Logging__LogLevel__Default=Information
- Logging__LogLevel__Microsoft=Warning
volumes:
- ./certificates/certificate.pem:/app/https/certificate.pem:ro
- ./aiconfiguration.json:/app/aiconfiguration.json:ro
Wariant 2: Certyfikat PFX (docker-compose-basic-pfx.yml)
Konfiguracja przeznaczona dla certyfikatów w formacie PFX zabezpieczonych hasłem. Ten format jest często wykorzystywany w środowiskach Windows.
name: aiproxy_containers
services:
ai-proxy:
image: webconbps/aiproxy:1.0.0.235
container_name: ai-proxy
restart: unless-stopped
ports:
- "5298:8080"
- "7033:8081"
environment:
- ASPNETCORE_ENVIRONMENT=Production
- AppConfiguration__SelfHosted__Certificate__Path=/app/https/certificate.pfx
- AppConfiguration__SelfHosted__Certificate__Password=<hasło>
- Logging__LogLevel__Default=Information
- Logging__LogLevel__Microsoft=Warning
volumes:
- ./certificates/certificate.pfx:/app/https/certificate.pfx:ro
- ./aiconfiguration.json:/app/aiconfiguration.json:ro
Zastąp <hasło> rzeczywistym hasłem do certyfikatu PFX. W środowisku produkcyjnym nie zaleca się wpisywania hasła bezpośrednio w konfiguracji — lepiej użyć Docker secrets.
Wariant 3: Application Insights (docker-compose-applicationinsights.yml)
Konfiguracja rozszerzona o integrację z Azure Application Insights, umożliwiającą monitorowanie wydajności aplikacji, zbieranie logów oraz analizę działania AI Proxy.
name: aiproxy_containers
services:
ai-proxy:
image: webconbps/aiproxy:1.0.0.235
container_name: ai-proxy
restart: unless-stopped
ports:
- "5298:8080"
- "7033:8081"
environment:
- ASPNETCORE_ENVIRONMENT=Production
- AppConfiguration__SelfHosted__Certificate__Path=/app/https/certificate.pem
- 'AppConfiguration__ApplicationInsightsConnectionString=<connection-string>'
- Logging__LogLevel__Default=Information
- Logging__LogLevel__Microsoft=Warning
- Serilog__Using__0=Serilog.Sinks.Console
- Serilog__Using__1=Serilog.Sinks.ApplicationInsights
- Serilog__WriteTo__0__Name=Console
- Serilog__WriteTo__1__Name=ApplicationInsights
- 'Serilog__WriteTo__1__Args__connectionString=<connection-string>'
- Serilog__WriteTo__1__Args__telemetryConverter=Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights
volumes:
- ./certificates/certificate.pem:/app/https/certificate.pem:ro
- ./aiconfiguration.json:/app/aiconfiguration.json:ro
Zastąp <connection-string> rzeczywistym Connection String pobranym z Azure Portal, w sekcji Application Insights > Properties.
Uruchomienie AI Proxy krok po kroku
1. Przygotowanie plików
Utwórz katalog certificates, a następnie umieść w nim plik certyfikatu:
mkdir certificates
# Skopiuj swój certyfikat do ./certificates/certificate.pem (lub .pfx)
Upewnij się, że plik aiconfiguration.json jest w tym samym katalogu co plik docker-compose.
2. Uruchomienie kontenera
docker-compose up -d
3. Sprawdzenie statusu
# Sprawdź czy kontener działa
docker-compose ps
# Zobacz logi
docker-compose logs -f ai-proxy
4. Zatrzymanie
docker-compose down
Generowanie certyfikatów testowych
Na potrzeby środowisk deweloperskich możesz wygenerować certyfikat self-signed.
Certyfikat PEM (OpenSSL)
# Generowanie certyfikatu
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
# Połączenie w jeden plik
cat key.pem cert.pem > certificate.pem
# Przeniesienie do katalogu certificates
mv certificate.pem ./certificates/
Certyfikat PFX (PowerShell)
# Generowanie certyfikatu
$cert = New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\CurrentUser\My" -NotAfter (Get-Date).AddYears(1)
# Eksport do PFX
$password = ConvertTo-SecureString -String "YourPassword123" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath ".\certificates\certificate.pfx" -Password $password
Rozwiązywanie problemów
Kontener nie uruchamia się
# Sprawdź logi
docker-compose logs ai-proxy
# Sprawdź status
docker ps -a
Możliwe przyczyny:
- brak certyfikatu w katalogu
./certificates/, - nieprawidłowy plik
aiconfiguration.json, - porty 5298 lub 7033 są juz zajęte.
Zajęte porty
Jeśli wskazane porty są już używane, zmień ich mapowanie w pliku docker-compose.yml:
ports:
- "5299:8080" # Zmień pierwszy port
- "7034:8081" # Zmień pierwszy port
Następnie sprawdź, który proces korzysta z danego portu:
netstat -ano | findstr :7033
Problemy z certyfikatem
# Sprawdź czy certyfikat jest poprawny
openssl x509 -in ./certificates/certificate.pem -text -noout
# Sprawdź czy kontener widzi plik
docker exec ai-proxy ls -l /app/https/