Ir al contenido

Integración de NextPDF con Cloudflare

Esta página cubre el recorrido completo, de principio a fin: instalar el paquete, configurarlo, renderizar un PDF y, si procede, archivar el resultado. En cada paso, el renderizado de NextPDF se ejecuta mediante un Cloudflare Worker y R2. Es la guía práctica que complementa la página conceptual /integrations/cloudflare/overview/ y la referencia /integrations/cloudflare/configuration/.

Ventana de terminal
composer require nextpdf/cloudflare:^0.1

A continuación, añadir un cliente PSR-18 y fábricas PSR-17, como Guzzle 7. El paquete declara únicamente contratos PSR y no incluye ningún cliente concreto propio, por lo que es necesario proporcionar uno. Para más detalles, véase /integrations/cloudflare/install/.

El puente no incluye proveedor de servicios ni bundle. En su lugar, construirlo directamente a partir de colaboradores PSR y una CloudflareRendererConfig. El framework anfitrión lo vincula en su contenedor reutilizando el binding PSR-18 existente de la aplicación. Para la secuencia de arranque completa y un ejemplo de binding de contenedor, véase /integrations/cloudflare/boot-and-discovery/.

Vincular CloudflareHtmlRenderer como singleton. Proporcionarle el cliente PSR-18, las fábricas de petición y de flujo PSR-17 y, opcionalmente, un logger PSR-3. Para el transporte cURL fijado, proporcionar también una fábrica de respuestas PSR-17. Véase el ejemplo de binding en /integrations/cloudflare/boot-and-discovery/.

El paquete lee sus ajustes desde una CloudflareRendererConfig. Los secretos deben obtenerse del entorno, nunca de archivos versionados:

<?php
declare(strict_types=1);
use NextPDF\Cloudflare\CloudflareRendererConfig;
$config = CloudflareRendererConfig::fromArray([
'worker_url' => getenv('CF_WORKER_URL') ?: '',
'api_token' => getenv('CF_PDF_TOKEN') ?: '',
'render_timeout' => 60,
'r2_font_bucket' => getenv('CF_R2_FONT_BUCKET') ?: null,
]);

workerUrl debe usar HTTPS. apiToken es #[SensitiveParameter]. Para la referencia completa de campos, véase /integrations/cloudflare/configuration/, que cubre los campos de fijación SPKI y todos los valores predeterminados. La configuración de archivado en R2 y la capa de protección de la API se tratan en /integrations/cloudflare/production-usage/.

Prueba de humo del proveedor de servicios/bundle

Sección titulada «Prueba de humo del proveedor de servicios/bundle»

No existe ningún proveedor de servicios sobre el que ejecutar una prueba de humo. La comprobación de arranque equivalente es la siguiente:

$config = CloudflareRendererConfig::fromArray($appConfig['cloudflare']);
assert($config->isValid(), 'Cloudflare config incomplete');
// Optional runtime reachability check (authenticated HTTP HEAD):
if (!$renderer->isAvailable()) {
// Worker not reachable — degrade or alert.
}

isValid() es una comprobación de integridad pura, sin llamada de red. isAvailable() realiza un HEAD autenticado. Devuelve false sin lanzar excepción cuando el Worker no está disponible.

La superficie pública del paquete se encuentra íntegramente bajo NextPDF\Cloudflare\:

TipoRol
CloudflareHtmlRendererPunto de entrada de renderizado: render(), isAvailable(), getHtmlSecurityPolicy().
CloudflareRendererConfigConfiguración del renderizador (fromArray(), isValid(), allPublicKeyPins()).
CloudflareRenderResultResultado de renderizado con tipo (isValid(), size()).
CloudflareRenderPayloadCarga JSON del Worker (toJson()).
CloudflareResponseParserAnalizador de respuesta del Worker → resultado.
CloudflareSecurityPolicyValidación de entradas y URL.
Transport\PinnedCurlTransportTransporte PSR-18 con DNS fijado / TLS fijado.
Contract\LocalRendererFactoryInterface, Contract\LocalRendererInterfaceContratos de respaldo local.
ApiProtection, ApiProtectionConfig, ApiProtectionResult, ApiKeyValidatorProtección de la API entrante.
R2ArchiveManager, R2ArchiveConfig, R2ObjectKey, R2UploadResultArchivado en R2.
Exception\CloudflareRenderException, Exception\CloudflareNotAvailableException, Exception\InvalidSpkiPinExceptionJerarquía de excepciones.

Para un recorrido de renderizado completo, véase /integrations/cloudflare/quickstart/. El cableado de producción se describe en /integrations/cloudflare/production-usage/, que cubre el respaldo, la telemetría, el archivado y la protección.

  • /integrations/cloudflare/overview/ — el límite de confianza y el modelo de renderizado en el borde.
  • /integrations/cloudflare/quickstart/ — un primer renderizado ejecutable.
  • /integrations/cloudflare/boot-and-discovery/ — detalles del cableado del contenedor.
  • /integrations/cloudflare/security-and-operations/ — defensa frente a SSRF, fijación y el runbook operativo.
  • /integrations/cloudflare/troubleshooting/ — modos de fallo asociados a excepciones.