0

目标使用 zenika alpine-chrome:with-puppeteer docker 图像,就像服务一样,在 php 容器中使用Browsershot
从 HTML 创建 PDF 。

描述 在我的 dockerized php 应用程序中,我从 html 生成 pdf 文件。目前在 docker php 映像中还安装了 npm、nodejs、puppeteer 和 chromium,并且 Browsershot 可以正常工作。但我想为 npm/nodejs/puppeteer/chromium 的东西制作一个单独的图像。因此我尝试了 zenika alpine-chrome:with-puppeteer。我/usr将此 docker 映像的目录安装到我的 php docker 映像中,当我执行到 php 容器中时,我可以验证它是否有效。所以我可以看到所有必要的文件,比如node,chromium-browsernpm.

问题
目前我没有从 browsershot 得到任何反馈。我尝试使用 xdebug 对其进行调试,但我没有收到任何错误消息,并且该过程只会填满我的 RAM,直到我的主机卡住。

问题
通常是否可以挂载文件夹并在那里执行进程,还是只是为了“文件共享”?如果可能的话,权限呢?如何处理它们?
指向browsershot中的二进制文件和路径的正确方法是什么?

以下是我的代码片段:(
如果需要更多,我当然可以添加更多)

Dockerfile (php_dockerfile)

...
FROM php:8.0.2-fpm-alpine AS php-base

ENV PUPPETEER_EXECUTABLE_PATH="usr/src/chrome/bin/chromium-browser"

...

...
FROM zenika/alpine-chrome:with-puppeteer AS chromium
...

docker-compose.yaml

volumes:
  ...
  volume-chrome:
  ...

...
  chrome:
      container_name: ${COMPOSE_PROJECT_NAME}_${APP_ENVIRONMENT}_chrome
      build:
        context: ./..
        target: chromium
        <<: *php_dockerfile
      volumes:
        - volume-chrome:/usr
      security_opt:
        - seccomp:./scripts/dev/chrome/chrome.json
      restart: always
      command: [ chromium-browser, "--headless", "--disable-gpu", "--no-sandbox", "--remote-debugging-address=0.0.0.0", "--remote-debugging-port=9222" ]
      ports:
        - "9222:9222"
      networks:
        - backend_net

...

...

  php:
      container_name: ${COMPOSE_PROJECT_NAME}_${APP_ENVIRONMENT}_php
      build:
        context: ./..
        target: php-dev
        <<: *php_dockerfile
      volumes:
        - volume-data:/var/www/${APP_DOMAIN}/current
        - type: volume
          target: /usr/src/chrome
          source: volume-chrome
      environment: &php_env
      networks:
        - backend_net

...

PHP 代码
(可能问题出在这里)

$pdf = $this->browsershot
            ->noSandbox()
            ->setIncludePath('$PATH:/usr/src/chrome/bin')
            ->setNodeModulePath('/usr/src/chrome/src/app/node_modules/')
            ->setChromePath('usr/src/chrome/bin/chromium-browser')
            ->setNodeBinary('usr/src/chrome/bin/node')
            ->setNpmBinary('usr/src/chrome/bin/npm')
            ->showBackground()
            ->setOption('addStyleTag', $this->getStyleSheet())
            ->format('A4')
            ->margins(0.0, 0.0, 0.0, 0.0)
            ->setHtml($html)
            )->pdf();

4

0 回答 0