Przejdź do głównej zawartości

Konfiguracja NextPDF Gotenberg

Konfiguracja składa się z dwóch części: niezmiennego obiektu wartości GotenbergConfig, który opisuje usługę i jej limity, oraz argumentów konstruktora GotenbergBridge, który przyjmuje zależności PHP Standard Recommendation (PSR) dla Hypertext Transfer Protocol (HTTP). Oba elementy przekazujesz jawnie przez konstruktor. Pakiet nie ma globalnego stanu, nie odczytuje zmiennych środowiskowych i nie definiuje żadnego ukrytego domyślnego punktu końcowego.

GotenbergConfig to obiekt wartości final readonly. Utwórz go bezpośrednio, używając argumentów nazwanych, albo zbuduj z tablicy asocjacyjnej metodą GotenbergConfig::fromArray().

PoleTypWartość domyślnaEfekt
apiUrlstring''Bazowy Uniform Resource Locator (URL) usługi Gotenberg. Wymagane: pusta wartość powoduje, że konfiguracja jest nieprawidłowa, a każda konwersja kończy się natychmiastowym niepowodzeniem. Musi używać Hypertext Transfer Protocol Secure (HTTPS).
timeoutint30Twardy limit czasu przesyłania w sekundach. Transport cURL z przypinaniem stosuje go, gdy jest używany.
maxFileSizeint52_428_800Maksymalny rozmiar danych wejściowych w bajtach (50 MiB). Dane wejściowe większe niż ta wartość są odrzucane przed jakimkolwiek żądaniem.
apiKeystring''Token bearer. Gdy jest niepusty, jest wysyłany jako nagłówek Authorization: Bearer <token>. Oznaczony jako #[\SensitiveParameter], dzięki czemu jest ukrywany w śladach stosu.
pinnedPublicKeyslist<string>[]Podstawowe przypięcia Transport Layer Security (TLS) SubjectPublicKeyInfo (SPKI) w postaci sha256/<base64>. Wartość pusta wyłącza przypinanie.
backupPublicKeyslist<string>[]Zapasowe przypięcia TLS SPKI, przechowywane osobno, aby rotację można było weryfikować niezależnie.
<?php
declare(strict_types=1);
use NextPDF\Gotenberg\GotenbergConfig;
$config = new GotenbergConfig(
apiUrl: 'https://gotenberg.example.com',
timeout: 60,
maxFileSize: 20 * 1024 * 1024,
apiKey: $secretFromYourSecretStore,
);

fromArray() przyjmuje klucze w formacie snake_case i ignoruje nieprawidłowe wartości, zamiast zgłaszać wyjątek. Wartość api_url, która nie jest łańcuchem znaków, staje się ''. Wartość timeout, która nie jest liczbą całkowitą, wraca do 30. Wartość max_file_size, która nie jest liczbą całkowitą, wraca do domyślnej wartości 50 MiB. Listy przypięć, które nie są tablicami, stają się []. Wpisy, które nie są łańcuchami znaków, wewnątrz tablic przypięć są pomijane.

<?php
declare(strict_types=1);
use NextPDF\Gotenberg\GotenbergConfig;
$config = GotenbergConfig::fromArray([
'api_url' => 'https://gotenberg.example.com',
'timeout' => 45,
'max_file_size' => 20_000_000,
'api_key' => $secretFromYourSecretStore,
'pinned_public_keys' => ['sha256/YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg='],
'backup_public_keys' => ['sha256/Vjs8r4z+80wjNcr1YKepWQboSIRi63WsWXhIMN+eWys='],
]);

Takie łagodne parsowanie jest zamierzone. Możesz przekazać tablicę konfiguracji frameworka bezpośrednio, bez warstwy wstępnej walidacji, a mimo to otrzymać obiekt ze ściśle określonymi typami. Parsowanie nie weryfikuje, czy adres URL jest osiągalny ani czy przypięcia są poprawne. Mostek wykonuje te kontrole w czasie konwersji.

isValid() zwraca true tylko wtedy, gdy apiUrl jest niepustym łańcuchem znaków. Nie wykonuje żadnych kontroli sieciowych ani kontroli schematu. Polityka bezpieczeństwa obsługuje HTTPS oraz weryfikację adresów prywatnych w czasie konwersji. Jeśli konfiguracja jest nieprawidłowa, convertFile() i convertString() zgłaszają wyjątek GotenbergConvertException z komunikatem Invalid Gotenberg configuration: apiUrl is empty. Nieprawidłowa konfiguracja powoduje też, że isAvailable() zwraca false bez żadnego wywołania sieciowego.

GotenbergBridge przyjmuje konfigurację oraz zależności PSR:

ArgumentTypWymaganyEfekt
configGotenbergConfigtakDeskryptor usługi i limity opisane powyżej.
httpClientPsr\Http\Client\ClientInterfacetakKlient PSR-18 używany do sprawdzania stanu usługi i transportu zapasowego.
requestFactoryPsr\Http\Message\RequestFactoryInterfacetakBuduje żądanie PSR-7.
streamFactoryPsr\Http\Message\StreamFactoryInterfacetakBuduje strumień treści żądania.
loggerPsr\Log\LoggerInterface|nullnie (domyślnie null)Gdy zostanie dostarczony, zapisuje jeden wpis na poziomie debug dla każdego żądania konwersji.
htmlSecurityPolicyHtmlSecurityPolicyInterface|nullnieDomyślnie używa podstawowej polityki bezpieczeństwa Hypertext Markup Language (HTML). Działa w warstwie parsowania i uzupełnia politykę warstwy transportowej.
responseFactoryPsr\Http\Message\ResponseFactoryInterface|nullnie (domyślnie null)Wymagany do aktywacji transportu cURL z przypinaniem. Bez niego mostek zawsze używa wstrzykniętego klienta PSR-18.
<?php
declare(strict_types=1);
use NextPDF\Gotenberg\GotenbergBridge;
$bridge = new GotenbergBridge(
config: $config,
httpClient: $psrHttpClient,
requestFactory: $psrRequestFactory,
streamFactory: $psrStreamFactory,
logger: $psrLogger,
responseFactory: $psrResponseFactory,
);

Mostek obsługuje dwa transporty i wybiera jeden z nich dla każdego żądania konwersji:

  • Transport cURL z przypinaniem — używany, gdy wstrzyknięto responseFactory oraz dostępne są dane do przypięcia (adres URL rozwiązał się na jeden lub więcej adresów Internet Protocol (IP) albo skonfigurowano przypięcia SPKI). Ten transport wiąże ustalony zestaw adresów za pomocą CURLOPT_RESOLVE. Wymusza przypinanie SPKI za pomocą CURLOPT_PINNEDPUBLICKEY, gdy przypięcia są obecne. Weryfikuje peera i hosta (CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYHOST = 2). Stosuje skonfigurowany limit czasu i wyłącza śledzenie przekierowań (CURLOPT_FOLLOWLOCATION = false, CURLOPT_MAXREDIRS = 0).
  • Wstrzyknięty klient PSR-18 — używany w każdym innym przypadku, w tym gdy adres URL interfejsu programowania aplikacji (API) jest publicznym literałem IP (brak Domain Name System (DNS) do przypięcia) i nie skonfigurowano przypięć SPKI lub gdy nie dostarczono responseFactory.

Aby uzyskać połączenia odporne na ponowne wiązanie DNS i korzystające z przypinania TLS, wstrzyknij responseFactory i skonfiguruj przypięcia. Sprawdzanie stanu usługi zawsze używa wstrzykniętego klienta PSR-18, niezależnie od wyboru transportu.

Przypinanie korzysta z modelu odcisku palca SPKI Secure Hash Algorithm 256-bit (SHA-256). Każde przypięcie jest łańcuchem znaków w postaci sha256/<base64-encoded-spki-hash>. Transport akceptuje również natywną dla cURL postać sha256//<base64> i przekształca wariant z pojedynczym ukośnikiem do tej formy. Każdy inny przedrostek powoduje wyjątek InvalidSpkiPinException.

allPublicKeyPins() zwraca sumę zbiorów pinnedPublicKeys i backupPublicKeys bez duplikatów. Warstwa TLS akceptuje certyfikat, którego skrót SPKI pasuje do dowolnego elementu tego połączonego zbioru. Na potrzeby eksploatacji skonfiguruj co najmniej jedno przypięcie zapasowe, aby planowana rotacja certyfikatu lub klucza nie zablokowała dostępu mostka do usługi w czasie propagacji nowego klucza. Przechowywanie listy zapasowej osobno od listy podstawowej pozwala weryfikować i rotować przypięcie zapasowe niezależnie od aktywnego. Procedurę rotacji opisano w /integrations/gotenberg/security-and-operations/.

Typ ładunku multipart (GotenbergConvertPayload) przekazuje plik oraz dwie opcjonalne opcje konwersji Gotenberg:

  • landscape (bool, domyślnie false) — wysyłane jako pole formularza landscape z wartością "true" lub "false".
  • nativePageRanges (string, domyślnie '') — wysyłane jako pole formularza nativePageRanges tylko wtedy, gdy jest niepuste; przyjmuje składnię zakresów Gotenberg, taką jak 1-3 lub 1,3,5-9.

Publiczne punkty wejścia convertFile() i convertString() budują ładunek z wartościami domyślnymi dla obu pól. Pola te są częścią kontraktu ładunku i są sprawdzane przez zestaw testów. Udostępnij je w swojej warstwie integracji, jeśli potrzebujesz wydruku poziomego lub wyboru stron.

  • /integrations/gotenberg/install/ — instalacja i podstawowa konfiguracja Gotenberg.
  • /integrations/gotenberg/quickstart/ — kompletny przykład gotowy do uruchomienia.
  • /integrations/gotenberg/production-usage/ — ładowanie konfiguracji, sekrety, limity czasu, ponawianie.
  • /integrations/gotenberg/security-and-operations/ — pełny model bezpieczeństwa i rotacja przypięć.
  • /integrations/gotenberg/troubleshooting/ — wyjaśnienie wyjątków związanych z konfiguracją.