Secure Exchanges SDK Documentation
Search Results for

    Show / Hide Table of Contents

    Déploiement Linux + Docker

    Le SDK SecureExchanges.Signature.NetCore utilise Chromium en mode headless (via PuppeteerSharp) pour certifier les PDFs. Sur un hôte Linux, Chromium a besoin de librairies système spécifiques et d'une disposition reproductible des fichiers. Cette page documente le Dockerfile et les dépendances apt requises pour exécuter le SDK dans un container Linux.

    Cette configuration est réutilisable sur n'importe quel hôte de container Linux : Azure Functions, Azure Container Apps, Azure App Service (Linux), Kubernetes, etc.

    Prérequis

    • Un projet .NET 8+ qui référence SecureExchanges.Signature.NetCore
    • Docker Desktop ou un builder cloud (par exemple az acr build)
    • Une version de Chrome for Testing alignée sur celle que PuppeteerSharp attend

    Dockerfile

    Build multi-stage. L'étape 1 compile le projet .NET. L'étape 2 installe les dépendances système de Chromium, télécharge Chrome for Testing et copie la sortie compilée.

    Note

    Le Dockerfile ci-dessous cible Azure Functions (il utilise l'image de base Functions et définit des variables d'environnement propres à Functions). Il peut aussi être lancé localement avec docker build + docker run pour test. Pour d'autres hôtes (Container Apps, App Service, Kubernetes), remplacez l'image runtime par mcr.microsoft.com/dotnet/aspnet:8.0 (ou équivalent) et ajustez l'entrypoint en conséquence.

    Tip

    Un exemple fonctionnel est disponible sur GitHub : AzureFunctionsSignature.netCore.

    # Azure Functions .NET 8 Isolated Worker with headless Chromium.
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    WORKDIR /src
    
    COPY ["AzureFunctionsSignature.netCore.csproj", "./"]
    RUN dotnet restore "AzureFunctionsSignature.netCore.csproj"
    COPY . .
    RUN dotnet publish "AzureFunctionsSignature.netCore.csproj" \
          -c Release \
          -o /app/publish \
          --no-restore \
          /p:UseAppHost=false
    
    
    FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 AS runtime
    
    # Chromium runtime dependencies for Debian bookworm.
    # If a future Chrome version crashes with "error while loading shared libraries: libXXX.so",
    # add the lib here and rebuild.
    RUN apt-get update && apt-get install -y --no-install-recommends \
          ca-certificates \
          fonts-liberation \
          libasound2 \
          libatk-bridge2.0-0 \
          libatk1.0-0 \
          libcairo2 \
          libcups2 \
          libdbus-1-3 \
          libdrm2 \
          libexpat1 \
          libfontconfig1 \
          libgbm1 \
          libglib2.0-0 \
          libnspr4 \
          libnss3 \
          libpango-1.0-0 \
          libpangocairo-1.0-0 \
          libx11-6 \
          libx11-xcb1 \
          libxcb1 \
          libxcomposite1 \
          libxcursor1 \
          libxdamage1 \
          libxext6 \
          libxfixes3 \
          libxi6 \
          libxkbcommon0 \
          libxrandr2 \
          libxrender1 \
          libxshmfence1 \
          libxss1 \
          libxtst6 \
          wget \
          unzip \
          && rm -rf /var/lib/apt/lists/*
    
    # Chrome for Testing — version must match the one bundled with PuppeteerSharp.
    # Check available versions: https://googlechromelabs.github.io/chrome-for-testing/
    ARG CHROME_VERSION=146.0.7680.153
    RUN wget -q "https://storage.googleapis.com/chrome-for-testing-public/${CHROME_VERSION}/linux64/chrome-linux64.zip" \
          -O /tmp/chrome.zip \
        && mkdir -p /home/site/wwwroot/chromium \
        && unzip -q /tmp/chrome.zip -d /home/site/wwwroot/chromium \
        && chmod +x /home/site/wwwroot/chromium/chrome-linux64/chrome \
        && rm /tmp/chrome.zip
    
    # Chromium is already present in the image — block PuppeteerSharp from re-downloading it at runtime.
    # One worker per instance = one Chromium process shared = lower RAM footprint.
    ENV SE_DISABLE_AUTO_DOWNLOAD=1 \
        FUNCTIONS_WORKER_PROCESS_COUNT=1
    
    COPY --from=build /app/publish /home/site/wwwroot
    

    Librairies système requises

    Chromium n'embarque pas ses propres dépendances ; elles doivent être fournies par l'hôte. La liste apt-get install ci-dessus couvre les librairies dont Chromium a besoin pour démarrer sur Debian bookworm.

    Si un futur build Chromium échoue avec error while loading shared libraries: libXXX.so: cannot open shared object file, ajoutez le package manquant à la liste apt-get install et rebuildez.

    Version de Chrome for Testing

    PuppeteerSharp livre avec une version de Chrome for Testing attendue. L'image doit installer cette version exacte (ou une proche compatible). La table ci-dessous suit la version de Chrome requise par chaque release du SDK :

    Version de SecureExchanges.Signature.NetCore Version de Chrome for Testing
    26.4.23.1 et ultérieures 146.0.7680.153

    Si vous utilisez une version plus récente du SDK non listée ici :

    1. Identifiez la version attendue par PuppeteerSharp (au runtime, Puppeteer télécharge dans /tmp/Chrome/Linux-<version>/).
    2. Choisissez un build correspondant sur le dashboard Chrome for Testing.
    3. Définissez le build arg CHROME_VERSION dans le Dockerfile.

    Un écart de version entre le binaire installé et celui attendu par PuppeteerSharp peut causer des échecs de lancement ou des différences subtiles de rendu.

    Variables d'environnement

    Variable Rôle
    SE_PUPPETEER_EXECUTABLE_PATH Chemin absolu vers un binaire Chromium. Prime sur toutes les autres étapes de résolution.
    SE_DISABLE_AUTO_DOWNLOAD Mettre à 1 ou true pour empêcher PuppeteerSharp de télécharger Chromium au runtime. Recommandé quand l'image embarque déjà Chromium (comme dans le Dockerfile ci-dessus).

    Note : FUNCTIONS_WORKER_PROCESS_COUNT est spécifique à Azure Functions et est couverte dans Déploiement Azure Functions.

    Étapes suivantes

    • Pour Azure Functions spécifiquement — ACR, managed identity, association de l'image à une Function App — voir Déploiement Azure Functions.
    • Pour l'utilisation du SDK elle-même, voir Certification PDF.
    • Pour un projet d'exemple fonctionnel complet, voir AzureFunctionsSignature.netCore sur GitHub.
    In this article
    Back to top Secure Exchanges Inc. - Documentation