콘텐츠로 이동
getnextpdf.com

프로덕션 운영

이 페이지는 NextPDF를 프로덕션에 투입하고 그곳에서 계속 운영하기 위한 체크리스트입니다. 매뉴얼 전체를 큐레이션하는 역할을 하며, 각 항목은 깊이 있는 내용을 담은 페이지로 연결됩니다. 따라서 여기서 확인하고 링크된 곳에서 읽는 구성입니다. 첫 릴리스 전에 배포 전 체크리스트를 끝까지 진행하십시오. 업그레이드 주기인시던트 트리아지 진입점은 운영 개시 후(day-two) 운영의 일부로 다시 검토하십시오.

  • 런타임을 확인하십시오. NextPDF는 PHP >=8.4 <9.0이 필요합니다. Composer는 이 범위를 벗어나는 것은 모두 거부합니다. 설치를 참조하십시오.
  • php -m으로 여섯 개의 필수 확장을 확인하십시오. ext-mbstring, ext-zlib, ext-intl, ext-gd, ext-curl, ext-openssl입니다. 설치 페이지에서 각각이 무엇을 하는지 설명합니다.
  • 환경을 한 번에 확인하려면 vendor/bin/nextpdf doctor를 실행하십시오 (PHP 버전, 확장, 폰트 가용성을 하나의 보고서로 정리합니다).
  • 하드웨어를 사이징하기 전에 렌더링 경로를 결정하십시오. 인프로세스 파이프라인(writeHtml())은 추가 서비스가 필요하지 않습니다. Artisan, Gotenberg, Cloudflare는 각각 운영해야 할 브라우저 또는 네트워크 서비스를 추가합니다. 결정에는 경로 선택을 활용하십시오.
  • 렌더러 브리지를 선택했다면, 프로덕션 가동 전에 해당 브리지의 보안 및 운영 페이지를 읽으십시오. 렌더러 표면 강화를 참조하십시오.
  • 렌더링에 사용하는 폰트만을 빌드 시점에 번들하십시오. 프로덕션에서 폰트 프로비저닝을 참조하십시오.

평균이 아니라, 생성하는 문서 중 가장 큰 것에 맞추어 사이징하십시오. getPdfData()는 Portable Document Format (PDF) 문서 전체를 메모리에 구축하여 하나의 문자열로 반환합니다.

  • 워커 또는 함수 메모리는 서버리스 사이징 가이드에 따라 설정하십시오. 몇 페이지짜리 문서는 512–1024 MB에서 여유롭지만, 이미지가 많거나 페이지가 많은 문서는 더 많이 필요합니다.
  • 타임아웃은 최악의 경우 빌드 시간보다 여유를 두어 높게 설정하십시오. 지나치게 큰 작업은 오브젝트 스토리지에 기록하는 비동기 큐로 옮기십시오. 그 패턴은 동일한 사이징 섹션에 나와 있습니다.
  • 장기 실행 워커에는 타임스탬프 검증을 끈 opcache를 설정하십시오. Docker 레시피의 opcache 섹션에 프로덕션용 ini 값이 들어 있습니다.
  • 가동 후 메모리 또는 처리량이 어긋나기 시작하면, 증상에서 레버로 이어지는 결정 표에서 시작하십시오.

Document는 일회용입니다. 구축하고, 한 번만 써낸 뒤, 스코프를 벗어나도록 두십시오. 요청마다 또는 큐 작업마다 새 인스턴스를 생성하십시오. 공유해도 되는 것은 프로세스 수명 레지스트리 — FontRegistryImageRegistry — 뿐이며, 이들은 워커 부팅 시 한 번만 생성합니다. 이는 PHP-FPM, 큐 워커, 장기 실행 애플리케이션 서버의 요청 단위·작업 단위 모델과 일치합니다.

HTML은 신뢰할 수 없는 것으로 취급하십시오. 특히 사용자의 영향을 받는 것은 더욱 그렇습니다. 경로 선택이 그 경계를 설명합니다. 기본적으로 내장 파이프라인은 어떤 스크립트도 실행하지 않고 원격 리소스도 가져오지 않는 반면, 각 브리지는 브라우저 또는 네트워크 서비스를 통해 렌더링합니다. 브리지를 프로덕션 트래픽에 노출하기 전에, 해당 브리지의 보안 및 운영 페이지를 끝까지 진행하십시오.

NextPDF는 서비스 수준 목표(SLO) 목표치를 공개하지 않습니다. 아래에서 측정하는 렌더링 소요 시간과 메모리 메트릭에서 여러분의 목표치를 도출하십시오.

첫 인시던트 이후가 아니라 그 전에 렌더링 경로를 계측하십시오.

  • 버전 지원 정책을 한 번 읽고, 이후 릴리스를 그에 맞추십시오. 이 정책은 시맨틱 버저닝 계약, 안정성 라벨, 지원 중단 라이프사이클, 이 매뉴얼이 사용하는 라이프사이클 용어(active, lts, maintenance, frozen, eol)를 정의합니다.
  • composer.lock을 커밋하여 배포되는 모든 워커가 동일한 엔진 버전을 해석하도록 하십시오. 설치 페이지가 이 원칙을 명시합니다.
  • 버전을 올릴 때마다 변경 이력을 검토하십시오.

렌더러 브리지 인시던트(Chrome 크래시, Gotenberg 중단, 엣지 렌더링 실패)의 경우, 렌더러 표면 강화에 있는 해당 브리지의 실패 모드 섹션에서 시작하십시오.