Ana içeriğe geç

Setup - Infrastructure and Configurations

Bu bölüm, EnQualify back-office uygulamalarının Docker ve Windows IIS üzerinde kurulumu için gerekli adımları açıklamaktadır.

ℹ️ AI ve MediaServer bileşenlerinin kurulumu bu dokümanda yer almaz. İlgili kurulum adımları için bkz. AI Components dokümanı.


Setup With Docker Images

Docker Hub

EnQualify Docker image'ları Docker Hub üzerinde barındırılmaktadır.

  • Private repository'lere erişim için bir kullanıcı hesabı gereklidir.
  • Her image, versiyon numarasıyla etiketlenir (tag).
Bileşen Docker Image
EnQualify Web API docker.io/enqurainc/enqualify-api:tag
EnQualify Web UI docker.io/enqurainc/enqualify-ui:tag
EnQualify Mobile API docker.io/enqurainc/enqualify-mapi:tag
EnQualify Mobile API Proxy docker.io/enqurainc/enqualify-mapip:tag
EnQualify Customer API docker.io/enqurainc/enqualify-capi[customer]:tag
EnQualify Signalling docker.io/enqurainc/enqualify-signalling:tag
EnQualify CoTurn docker.io/enqurainc/enqualify-coturn:tag
EnQualify AI App docker.io/enqurainc/enqualify-aiapp:tag
EnQualify Face Recognition docker.io/enqurainc/enqualifyfacerecognition:tag
EnQualify Passive Liveness docker.io/enqurainc/enqualifypassiveliveness:tag
EnQualify Utils docker.io/enqurainc/enqualify-utils:tag

Images

Linux Images

  • Docker image'ları Red Hat Enterprise Linux Universal Base Image 8 (UBI8) + .NET 8 Runtime üzerine inşa edilmektedir.
  • RHEL UBI8 .NET image'ı varsayılan olarak id: 1001 olan root-dışı (non-root) bir kullanıcıyla çalışır.

Referans: Red Hat UBI8 .NET Runtime — Red Hat Catalog

DockerFile

Aşağıdaki DockerFile, EnQualify Management API Docker image'ını oluşturmak için kullanılır:

dockerfile

Text Only
FROM registry.redhat.io/ubi8/dotnet-80-runtime:latest
ADD Portable .
ADD FFmpeg ./FFmpeg
RUN mkdir ../logs
ADD appsettings.json .
EXPOSE 8080
ENV ASPNETCORE_URLS http://*:8080
CMD ["dotnet", "Enqura.EnVerify.API.Management.dll"]

Common File Paths

Tüm Docker image'larında ortak olarak kullanılan dosya yolları:

Açıklama Dosya Yolu
Application Root /opt/app-root
Application Binaries /opt/app-root/app
Application Settings /opt/app-root/app/appsettings.json
Application DLL /opt/app-root/app/Enqura.EnVerify.[application].dll
Application Logs /opt/app-root/logs
File Share Binding /opt/app-root/files

Templates

Template dosyaları, Docker image kullanımını örneklemek amacıyla hazırlanmış örnek dosya setidir.

Template içeriği:

  • Docker Compose dosyaları
  • Boş appsettings.json dosyaları
  • Boş Logs ve Files klasörleri
  • PowerShell build ve başlatma scriptleri

Önemli notlar:

  • Port ve zorunlu ayarlar ASPNETCORE_ environment variable'ları ve appsettings.json içindeki Kestrel bölümü üzerinden yapılandırılır. Detaylar için: Configure endpoints for ASP.NET Core Kestrel — Microsoft Learn
  • Zorunlu yapılandırma değişiklikleri appsettings.json dosyasına uygulanmalıdır.
  • Docker Compose dosyası; Files klasörünü File Share Binding, Logs klasörünü Application Logs ve appsettings.json'u Application Settings olarak bağlar.

Build Script

Aşağıdaki PowerShell scripti, Windows ortamında Docker ile uygulamaları derleyip ayağa kaldırmak için kullanılır:

  • Script çalıştırılmadan önce image tag bilgisi sorulur.
  • Tag, docker-compose build komutuna TAG build argument olarak iletilir ve DockerFile içinde referans alınır.

powershell

Text Only
Add-Type -assembly "system.io.compression.filesystem"
$scriptpath = $MyInvocation.MyCommand.Definition
$folder = Split-Path $scriptpath
Write-host "EnQualify Template Images"
Write-host "Current Path: '$folder'"
Push-Location $folder
$tag = Read-Host -Prompt 'Base image Tag'
$up = Read-Host -Prompt 'Bring up containers? (Y/N)'
$Env:TAG=$tag
$buildCommand = 'docker-compose build --build-arg TAG=' + $tag
$upCommand = 'docker-compose up'
Write-Host "Building..."
Invoke-Expression -Command $buildCommand
Write-Host "Build completed."
if ($up -eq "Y" -or $up -eq "y"){
    Write-Host "Bringing up..."
    Invoke-Expression -Command $upCommand
}
Read-Host -Prompt 'Script finished.'

Docker Compose File

Aşağıdaki Docker Compose dosyası, local image build için template olarak kullanılır.

⚠️ Eğer CustomerAPI sağlanmıyorsa enqualify-capi servisi Docker Compose dosyasından kaldırılmalıdır.

yaml

Text Only
version: "3.9"
networks:
  localdev:
    name: localdev

services:
  enqualify-api:
    container_name: enqualify-api
    image: enqurainc/enqualify-api:${TAG}
    depends_on:
      - enqualify-capi
    restart: always
    volumes:
      - ./Logs:/opt/app-root/logs
      - ./Files:/opt/app-root/files
      - ./ManagementAPI/appsettings.json:/opt/app-root/app/appsettings.json
    ports:
      - "8081:8080"
    networks:
      - localdev

  enqualify-ui:
    container_name: enqualify-ui
    image: enqurainc/enqualify-ui:${TAG}
    depends_on:
      - enqualify-api
    restart: always
    volumes:
      - ./Logs:/opt/app-root/logs
      - ./ManagementUI/appsettings.json:/opt/app-root/app/appsettings.json
    ports:
      - "8082:8080"
    networks:
      - localdev

  enqualify-mapi:
    container_name: enqualify-mapi
    image: enqurainc/enqualify-mapi:${TAG}
    restart: always
    volumes:
      - ./Logs:/opt/app-root/logs
      - ./MobileAPI/appsettings.json:/opt/app-root/app/appsettings.json
    ports:
      - "8083:8080"
    networks:
      - localdev

  enqualify-mapip:
    container_name: enqualify-mapip
    image: enqurainc/enqualify-mapip:${TAG}
    depends_on:
      - enqualify-mapi
    restart: always
    volumes:
      - ./Logs:/opt/app-root/logs
      - ./MobileAPIProxy/appsettings.json:/opt/app-root/app/appsettings.json
    ports:
      - "8084:8080"
    networks:
      - localdev

  enqualify-capi:
    container_name: enqualify-capi
    image: enqurainc/enqualify-capi:${TAG}
    restart: always
    volumes:
      - ./Logs:/opt/app-root/logs
      - ./CustomerAPI/appsettings.json:/opt/app-root/app/appsettings.json
    ports:
      - "8085:8080"
    networks:
      - localdev

Local Builds

Docker image yapılandırması üzerinde daha fazla kontrol gerektiğinde, yalnızca uygulama binary'lerini içeren base Docker image'ları sağlanmaktadır. Bu base image'lar kullanılarak local Docker image'ları oluşturulabilir.


Setup On Windows with IIS

Application Files

Her uygulama aşağıdaki dosyalarla birlikte teslim edilir:

  1. Uygulama binary dosyaları
  2. appsettings.json şablon dosyası
  3. web.config şablon dosyası

Setup IIS

  1. IIS Server Role'ü ekle.
  2. Windows Authentication'ı dahil et.
  3. .NET Hosting Bundle'ı yükle.

Referans: .NET Hosting Bundle — Microsoft Learn


Setup Applications

  1. Uygulama için bir klasör oluştur (örn. C:\inetpub\wwwroot).
  2. Uygulama binary dosyalarını kopyala.
  3. appsettings.json şablon dosyasını kopyala ve düzenle.
  4. web.config şablon dosyasını kopyala ve düzenle.
  5. Uygulama için IIS sitesi oluştur. Bu adımda uygulamayı başlatma.
  6. Local log dosyaları için bir klasör oluştur (örn. C:\Logs). Application Pool Identity veya IIS varsayılan kullanıcısı için log klasörüne erişim haklarını kontrol et.
  7. Sitenin Preload Enabled değerini true olarak ayarla.
  8. Application Pool'un Start Mode değerini AlwaysRunning, Idle Timeout değerini 1440 olarak ayarla.

Web API with Video Features Setup

  1. Shared file klasörünü hazırla. Application Pool Identity veya IIS varsayılan kullanıcısı için tam erişim haklarının verildiğini doğrula.
  2. Request size limit ayarlarını yapılandır. (Bkz. Web.Config Samples — Request Size Limit Settings)

AD Authentication Setup

  1. Application Pool Identity olarak bir AD Service Account kullan.
  2. Windows Authentication'ı etkinleştir.
  3. appsettings.json içindeki CorsOrigins ayarına UI host adreslerini ekle.
  4. Web UI uygulamasının appsettings.json dosyasındaki ADAuthServiceBase ayarını güncelle.

Web.Config Samples

Common Settings

xml

Text Only
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*"
             modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet"
                  arguments=".\Enqura.EnVerify.API.Management.dll"
                  stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"
                  hostingModel="outofprocess" />
    </system.webServer>
  </location>
</configuration>

xml

Text Only
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <security>
        <requestFiltering removeServerHeader="true" />
      </security>
      <httpProtocol>
        <customHeaders>
          <remove name="X-Powered-By" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
  </location>
</configuration>

Request Size Limit Settings

xml

Text Only
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <security>
        <requestFiltering>
          <requestLimits maxAllowedContentLength="1000000000" />
        </requestFiltering>
      </security>
      <serverRuntime uploadReadAheadSize="10485760" />
    </system.webServer>
    <system.web>
      <httpRuntime maxRequestLength="1000000000" />
    </system.web>
  </location>
</configuration>

Windows Authentication Settings

xml

Text Only
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <security>
        <authentication>
          <windowsAuthentication enabled="true" />
        </authentication>
      </security>
    </system.webServer>
  </location>
</configuration>