Konfiguracja Docker
Ten rozdział opisuje konfigurację docker-compose dołączoną do projektu AI Proxy, która umożliwia uruchomienie usługi lokalnie lub w kontenerze deweloperskim. Rozwiązanie Docker jest szczególnie przydatne dla:
- lokalnego rozwoju bez pełnej infrastruktury Azure,
- środowisk testowych,
- wdrożeń Self-hosted,
- demonstracji i prototypowania.
Dostępne warianty Docker Compose
W katalogu scripts/docker/ znajdują się następujące warianty plików docker-compose:
- docker-compose-basic-pem.yml - podstawowa konfiguracja używająca certyfikatu w formacie PEM,
- docker-compose-basic-pfx.yml - podstawowa konfiguracja używająca certyfikatu w formacie PFX,
- docker-compose-applicationinsights.yml - konfiguracja z integracją Application Insights do monitorowania.
Struktura usługi AI-proxy
Główna usługa Docker dla AI Proxy zawiera następujące elementy:
Obraz
image: docker-dev.webcon.pl/webcon/aiproxy:<version_tag>
lub dla lokalnych buildów:
image: localbuild
Nazwa kontenera
container_name: ai-proxy
Polityka restartu
restart: unless-stopped
Kontener automatycznie restartuje się w przypadku awarii, chyba że został zatrzymany ręcznie.
Konfiguracja Portów
ports:
- "5298:8080" # HTTP
- "7033:8081" # HTTPS
- Port hosta
5298jest mapowany na port kontenera8080(HTTP). - Port hosta
7033jest mapowany na port kontenera8081(HTTPS). - Dostosuj porty hosta, jeśli kolidują z innymi usługami na maszynie.
Zmienne środowiskowe
Docker Compose ustawia następujące zmienne środowiskowe dla kontenera:
Podstawowe Zmienne
environment:
- ASPNETCORE_ENVIRONMENT=Production
- AppConfiguration__SelfHosted__Certificate__Path=/app/https/certificate.pem
- Logging__LogLevel__Default=Information
- Logging__LogLevel__Microsoft=Warning
Opis zmiennych:
ASPNETCORE_ENVIRONMENT- środowisko ASP.NET Core (Development,Staging,Production),AppConfiguration__SelfHosted__Certificate__Path- ścieżka do certyfikatu TLS wewnątrz kontenera,Logging__LogLevel__Default- domyślny poziom logowania,Logging__LogLevel__Microsoft- poziom logowania dla namespace'ów Microsoft.
Zmienne dla trybu Self-hosted
Dla uruchomienia w trybie Self-hosted, dodaj:
environment:
- AppConfiguration__SelfHosted__Enabled=true
- AppConfiguration__UseAzureKeyVault=false
Woluminy (volumes)
Woluminy montują pliki z hosta do kontenera.
Certyfikat TLS (PEM)
volumes:
- ./certificates/certificate.pem:/app/https/certificate.pem:ro
Certyfikat TLS (PFX)
volumes:
- ./certificates/certificate.pfx:/app/https/certificate.pfx:ro
:rooznacza read-only (tylko do odczytu).- Upewnij się, że plik certyfikatu istnieje w katalogu
./certificates/przed uruchomieniem kontenera.
Plik konfiguracyjny AI
volumes:
- ./aiconfiguration.json:/app/aiconfiguration.json:ro
- Gdy
UseAzureKeyVault = true, plik musi zawierać nazwy sekretów Key Vault (NIE rzeczywiste klucze). - Gdy
UseAzureKeyVault = false, plik musi zawierać wszystkie wymagane sekrety (tylko dla środowisk lokalnych/testowych).
Przykładowa konfiguracja Docker Compose
Wariant z Certyfikatem PEM
version: '3.8'
services:
ai-proxy:
image: localbuild
container_name: ai-proxy
restart: unless-stopped
ports:
- "5298:8080"
- "7033:8081"
environment:
- ASPNETCORE_ENVIRONMENT=Development
- AppConfiguration__SelfHosted__Enabled=true
- AppConfiguration__SelfHosted__Certificate__Path=/app/https/certificate.pem
- AppConfiguration__UseAzureKeyVault=false
- Logging__LogLevel__Default=Information
- Logging__LogLevel__Microsoft=Warning
volumes:
- ./certificates/certificate.pem:/app/https/certificate.pem:ro
- ./aiconfiguration.json:/app/aiconfiguration.json:ro
Wariant z Certyfikatem PFX
version: '3.8'
services:
ai-proxy:
image: localbuild
container_name: ai-proxy
restart: unless-stopped
ports:
- "5298:8080"
- "7033:8081"
environment:
- ASPNETCORE_ENVIRONMENT=Development
- AppConfiguration__SelfHosted__Enabled=true
- AppConfiguration__SelfHosted__Certificate__Path=/app/https/certificate.pfx
- AppConfiguration__SelfHosted__Certificate__Password=YourCertificatePassword
- AppConfiguration__UseAzureKeyVault=false
- Logging__LogLevel__Default=Information
volumes:
- ./certificates/certificate.pfx:/app/https/certificate.pfx:ro
- ./aiconfiguration.json:/app/aiconfiguration.json:ro
Uruchamianie Docker Compose
Przygotowanie środowiska
Przed uruchomieniem kontenera upewnij się, że:
- Docker Desktop (lub Docker Engine) jest uruchomiony.
- Pliki certyfikatu istnieją -
./certificates/certificate.pemlub./certificates/certificate.pfx. - Plik konfiguracyjny AI
./aiconfiguration.jsonistnieje i zawiera poprawną konfigurację (nazwy sekretów Key Vault lub rzeczywiste wartości w trybie offline). - Porty 5298 i 7033 są dostępne.
Uruchomienie z repozytorium
Z katalogu głównego repozytorium (gdzie znajduje się folder scripts):
cd .\scripts\docker
docker-compose -f docker-compose-basic-pem.yml up -d
lub dla wersji z PFX:
docker-compose -f docker-compose-basic-pfx.yml up -d
Sprawdzanie logów
Aby zobaczyć logi w czasie rzeczywistym:
docker-compose logs -f ai-proxy
Aby zobaczyć ostatnie logi:
docker-compose logs --tail=100 ai-proxy
Zatrzymanie i usunięcie kontenerów
docker-compose down
Aby dodatkowo usunąć woluminy:
docker-compose down -v
Generowanie certyfikatów testowych
Dla środowisk deweloperskich możesz wygenerować self-signed certyfikat.
Generowanie certyfikatu PEM (Linux/macOS/PowerShell)
# Generowanie klucza prywatnego i 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/
Generowanie certyfikatu PFX (Windows/PowerShell)
# Generowanie certyfikatu używając PowerShell
$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 Docker
Problem:
Kontener nie startuje.
Objawy:
- kontener zatrzymuje się natychmiast po uruchomieniu,
- brak odpowiedzi na portach 5298/7033.
Rozwiązanie:
# Sprawdź logi kontenerа
docker-compose logs ai-proxy
# Sprawdź status kontenera
docker ps -a
# Sprawdź konfigurację
docker inspect ai-proxy
Typowe przyczyny:
- brakujący plik certyfikatu,
- nieprawidłowa ścieżka do certyfikatu w zmiennej środowiskowej,
- błędy w pliku
aiconfiguration.json, - porty są zajęte na hoście.
Problem:
Błąd dostępu do plików
Objawy:
- błędy o braku uprawnień do odczytu plików,
- kontener nie może załadować certyfikatu lub konfiguracji.
Rozwiązanie:
# Sprawdź uprawnienia do plików
Get-Acl .\certificates\certificate.pem
# Sprawdź ustawienia Docker Desktop
# Docker Desktop > Settings > Resources > File Sharing
# Dodaj katalog projektu do udostępnionych
Problem:
Porty zajęte
Objawy:
- błąd podczas uruchamiania: "port is already allocated".
Rozwiązanie:
# Znajdź proces używający portu
netstat -ano | findstr :7033
# Zatrzymaj proces lub zmień porty w docker-compose.yml
ports:
- "5299:8080" # Zmieniony port hosta
- "7034:8081" # Zmieniony port hosta
Problem:
Błędy certyfikatu SSL
Objawy:
- błędy SSL/TLS podczas próby połączenia,
- przeglądarka pokazuje ostrzeżenie o certyfikacie.
Rozwiązanie:
# Zweryfikuj format certyfikatu
openssl x509 -in ./certificates/certificate.pem -text -noout
# Upewnij się, że ścieżka w zmiennej środowiskowej jest poprawna
# Sprawdź, czy kontener widzi plik
docker exec ai-proxy ls -l /app/https/
Problem:
Błędy konfiguracji AI
Objawy:
- aplikacja startuje, ale nie może połączyć się z dostawcami AI,
- błędy w logach o brakujących sekretach.
Rozwiązanie:
# Sprawdź zawartość pliku konfiguracji
cat .\aiconfiguration.json
# Zweryfikuj, czy:
# 1. UseAzureKeyVault=false w trybie Self-hosted
# 2. Wszystkie wymagane sekrety są w pliku
# 3. Format JSON jest poprawny
# Zrestartuj kontener po poprawkach
docker-compose restart ai-proxy
Lista kontrolna przed uruchomieniem
- Docker Desktop/Engine jest uruchomiony.
- Plik
./certificates/certificate.pemlub.pfxistnieje i jest poprawny. - Plik
./aiconfiguration.jsonistnieje i zawiera poprawną konfigurację. - Sekrety w konfiguracji odpowiadają trybowi pracy(
UseAzureKeyVault=falsedla Self-hosted). - Porty 5298 i 7033 są wolne (lub dostosowano mapowanie w docker-compose.yml).
- Zmienne środowiskowe są poprawnie ustawione.
- Ścieżki do woluminów są poprawne.
Monitorowanie kontenerów
Podstawowe metryki
# Status kontenerów
docker ps
# Użycie zasobów
docker stats ai-proxy
# Procesy w kontenerze
docker top ai-proxy
# Inspekcja szczegółowa
docker inspect ai-proxy
Integracja z Application Insights
Dla pełnego monitorowania, użyj wariantu z Application Insights:
environment:
- ApplicationInsights__ConnectionString=${APP_INSIGHTS_CONNECTION_STRING}
Backup i Recovery
Backup konfiguracji
# Backup plików konfiguracyjnych
$backupDate = Get-Date -Format "yyyyMMdd"
Copy-Item .\aiconfiguration.json ".\backups\aiconfiguration_$backupDate.json"
Copy-Item .\certificates\* ".\backups\certificates_$backupDate\"
Restore konfiguracji
# Przywracanie z backupu
$restoreDate = "20260115"
Copy-Item ".\backups\aiconfiguration_$restoreDate.json" .\aiconfiguration.json
Copy-Item ".\backups\certificates_$restoreDate\*" .\certificates\