Przejdź do głównej zawartości

Przewodnik deweloperski Cloudflare

Pakiet Cloudflare przenosi renderowanie PDF na granicę Workera. Traktuj renderowanie w Workerze, lokalny tryb awaryjny, ochronę API i archiwum R2 jako odrębne funkcje, z których każda ma własną obsługę awarii.

Korzystaj z tego przewodnika, gdy budujesz usługi renderowania na brzegu sieci, chronione punkty końcowe renderowania, procesy archiwizacji albo ścieżki lokalnego trybu awaryjnego z użyciem nextpdf/cloudflare.

WarstwaWłaścicielOdpowiedzialnośćCzego tu nie umieszczać
Punkt końcowy aplikacjiAplikacjaAutoryzuj wywołującego, normalizuj żądanie renderowania i egzekwuj politykę biznesową.Tokenów Workera zapisanych w kodzie.
Ochrona APInextpdf/cloudflare i aplikacjaWalidacja kluczy API, kontrola rozmiaru ładunku oraz decyzje o ograniczaniu liczby żądań w obrębie procesu.Rozliczeń, uprawnień najemcy ani trwałego egzekwowania limitów.
renderer Cloudflarenextpdf/cloudflareWeryfikuj HTML i adres URL Workera, wysyłaj ładunek renderowania i analizuj odpowiedź.Renderowania szablonów ani zapytań domenowych.
WorkerWdrożenie aplikacjiUruchamiaj Browser Rendering i zwracaj bajty PDF albo ustrukturyzowany wynik.Polityki przechowywania po stronie PHP.
Lokalny tryb awaryjnyWdrożenie aplikacjiRenderowanie, gdy Worker jest niedostępny.Cichego trybu awaryjnego, który ukrywa awarie operacyjne.
Archiwum R2nextpdf/cloudflarePrzesyłaj pliki PDF, buduj klucze obiektów i twórz podpisane adresy URL.Wrażliwych metadanych biznesowych bez weryfikacji.
EtapZachowanieDziałanie dewelopera
Tworzenie konfiguracjiWczytuje adres URL Workera, token API, limity czasu, limity rozmiaru, tryb awaryjny i przypięcia.Przechowuj sekrety w konfiguracji wdrożenia.
Ochrona żądańOpcjonalny ApiProtection weryfikuje klucz, rozmiar i limit żądań.Uruchom go przed kosztownym renderowaniem.
Wywołanie rendereraCloudflareHtmlRenderer weryfikuje HTML i adres URL Workera, a następnie wysyła JSON.Obsługuj osobno niedostępność Workera i błędy renderowania.
Analiza odpowiedziCloudflareResponseParser::parse() przyjmuje wynik binarny PDF albo ustrukturyzowany wynik JSON.Odrzucaj wynik nieprawidłowy albo niebędący plikiem PDF.
Lokalny tryb awaryjnyOpcjonalny lokalny renderer obsługuje awarię Workera.Wstrzykuj fabrykę lokalnego renderera tylko wtedy, gdy host ją obsługuje.
Archiwum R2R2ArchiveManager przechowuje bajty PDF i tworzy podpisane adresy URL.Przechowuj w metadanych tylko dane niewrażliwe, chyba że celowo zapisujesz tam dane wrażliwe.
ŚcieżkaPrzeznaczenie
app/Pdf/Cloudflare/*Warstwa aplikacyjna opakowująca CloudflareHtmlRenderer.
app/Pdf/Workers/*DTO dla żądań Workera oraz polityka specyficzna dla punktu końcowego.
app/Pdf/Archive/*Orkiestracja archiwum R2 i decyzje dotyczące przechowywania.
app/Pdf/Fallback/*LocalRendererFactoryInterface — implementacja dopuszczonego trybu awaryjnego.
tests/Pdf/Cloudflare/*Testy niedostępności Workera, nieprawidłowego tokenu, ładunku oraz archiwum.

Oddzielaj token API po stronie PHP od tokenu Workera. PHP uwierzytelnia się wobec Workera. Worker powinien uwierzytelniać przychodzące żądania, zanim uruchomi pracę przeglądarki.

<?php
use NextPDF\Cloudflare\ApiProtection;
use NextPDF\Cloudflare\ApiProtectionConfig;
use NextPDF\Cloudflare\ApiKeyValidator;
$protection = new ApiProtection(
new ApiProtectionConfig(maxRequestsPerMinute: 30),
new ApiKeyValidator([$expectedApiKey]),
);
$result = $protection->checkRequest(
clientId: $clientId,
payloadSize: strlen($html),
apiKey: $presentedApiKey,
);
if (!$result->allowed) {
return new JsonResponse(['error' => $result->denialReason], 429, $result->toHeaders());
}

Zbuduj renderer, korzystając z zależności PSR, w tym PSR-18 i PSR-17, dostarczanych przez framework. Zachowaj jawność lokalnego trybu awaryjnego, aby operatorzy widzieli, kiedy system przestaje korzystać z Workera.

<?php
use NextPDF\Cloudflare\CloudflareHtmlRenderer;
use NextPDF\Cloudflare\CloudflareRendererConfig;
$renderer = new CloudflareHtmlRenderer(
config: CloudflareRendererConfig::fromArray([
'worker_url' => getenv('NEXTPDF_CLOUDFLARE_WORKER_URL'),
'api_token' => getenv('NEXTPDF_CLOUDFLARE_API_TOKEN'),
'render_timeout' => 30,
'max_html_size' => 1_000_000,
'fallback_to_local' => false,
]),
httpClient: $httpClient,
requestFactory: $requestFactory,
streamFactory: $streamFactory,
);
$rendered = $renderer->render($html, widthPt: 595.28);

Archiwizuj dopiero po pomyślnym renderowaniu i zatwierdzeniu wyniku przez politykę. Publiczne adresy URL i podpisane adresy URL traktuj jako odrębne decyzje.

<?php
use NextPDF\Cloudflare\R2ArchiveManager;
$upload = $archive->upload(
pdfData: $rendered->pdfData,
filename: 'invoice-1234.pdf',
metadata: [
'document_type' => 'invoice',
],
);
if ($upload->isValid()) {
$temporaryUrl = $archive->generateSignedUrl($upload->key, 600);
}

Nie umieszczaj nazwisk klientów, adresów e-mail, kwot faktur ani regulowanych identyfikatorów w metadanych obiektów, chyba że polityka przechowywania i dostępu wyraźnie na to pozwala.

Punkt rozszerzeniaZastosowanieOgraniczenie
LocalRendererFactoryInterfaceLokalny tryb awaryjny realizowany przez Artisan lub inny renderer.Musi zwracać obiekt implementujący LocalRendererInterface.
ApiProtectionConfigPolityka klucza API, rozmiaru ładunku i ograniczania liczby żądań.Limity w pamięci obowiązują na proces.
ApiKeyValidatorWalidacja kluczy odporna na ataki czasowe oraz funkcje pomocnicze do rotacji kluczy.Przechowuj sekrety poza kodem źródłowym.
R2ArchiveConfigBucket, poświadczenia, prefiks ścieżki, punkt końcowy i limity rozmiaru.Poświadczenia nigdy nie mogą być zapisywane w logach.
PinnedCurlTransportEgzekwowanie przypięć Internet Protocol (IP) oraz Subject Public Key Info (SPKI).Wymaga środowiska uruchomieniowego obsługującego cURL oraz fabryki odpowiedzi.
CloudflareResponseParserAnaliza odpowiedzi Workera.Odrzuca nieprawidłowy wynik PDF lub odpowiedzi z błędem.
  1. Najpierw zbuduj lokalną ścieżkę renderowania.
  2. Dodaj renderowanie w Workerze na niewielkim, reprezentatywnym fragmencie HTML.
  3. Włącz ochronę żądań przed udostępnieniem publicznych punktów końcowych.
  4. Dodaj przesyłanie do R2 dopiero wtedy, gdy przepływy renderowania i odpowiedzi będą stabilne.
  5. Przetestuj ścieżki niedostępności Workera, nieprawidłowego tokenu, zbyt dużego ładunku, limitu żądań oraz awarii R2.
  6. Dodaj logowanie, które rozróżnia renderowanie w Workerze, renderowanie w trybie awaryjnym, przesyłanie do archiwum oraz tworzenie podpisanego adresu URL.
AwariaGdzie obsłużyćZalecana reakcja
Brak lub nieprawidłowy klucz APIWarstwa ochrony API.Odrzuć żądanie, zanim rozpocznie się renderowanie.
Zbyt duży ładunekOchrona API lub walidacja renderera.Zwróć błąd walidacji bez wywoływania Workera.
Niebezpieczny adres URL WorkeraPolityka bezpieczeństwa renderera.Zgłoś błąd konfiguracji lub żądania przed sieciowymi operacjami I/O.
Worker niedostępnyGranica renderera.Korzystaj z jawnego trybu awaryjnego tylko wtedy, gdy jest dozwolony; w przeciwnym razie zgłoś błąd w widoczny sposób.
Awaria przesyłania do R2Granica archiwum.Zwróć odpowiedź z plikiem PDF, jeśli archiwizacja jest opcjonalna; zgłoś błąd, jeśli archiwizacja jest wymagana przez politykę.
Awaria rotacji przypięćWdrożenie i operacje.Wykonuj rotację z zapasowymi przypięciami i planem wycofania.
ZagadnienieWartość domyślnaKiedy nadpisać
Tryb awaryjnyWłączony domyślnie w konfiguracji.Wyłącz, gdy lokalne renderowanie naruszałoby izolację wdrożenia.
Maksymalny rozmiar HTML5,000,000 bajtów.Zmniejsz dla publicznych punktów końcowych.
Czas życia (TTL) podpisanego adresu URL3600 sekund.Skróć dla wrażliwych plików PDF.
Zestawy przypięćPusty.Dodawaj przypięcia tylko z planem rotacji i zapasowymi przypięciami.
Wymóg klucza APIWłączony domyślnie w konfiguracji ochrony.Wyłącz tylko dla prywatnych, już uwierzytelnionych wywołań wewnętrznych.
  • Testy renderera obejmują prawidłowy HTML, zbyt duży HTML, nieprawidłowy adres URL Workera oraz odpowiedź Workera z błędem.
  • Testy ochrony API obejmują brak klucza, nieprawidłowy klucz, zbyt duży ładunek oraz przekroczony limit żądań.
  • Testy R2 obejmują pomyślne przesłanie, zbyt duże przesłanie, nieudany status HTTP, nieprawidłowy bucket oraz generowanie podpisanego adresu URL.
  • Testy trybu awaryjnego weryfikują, że ścieżka lokalnego renderera jest jawna i obserwowalna.
  • Testy transportu obejmują przypięte adresy IP, przypięcia klucza publicznego, limit czasu oraz przekierowania wyłączone zgodnie z polityką.
  • Testy obserwowalności potwierdzają osobne zdarzenia w logach dla renderowania, trybu awaryjnego, archiwum oraz tworzenia podpisanego adresu URL.