Я предстану перед вами как последняя надежда. У меня есть проект, в котором я должен иметь возможность экспортировать страницу в файл PDF. Проект является следующим js сайтом, развернутым в docker рое.
Учитывая SSR / CSR следующего js, я решил использовать кукловод для рендеринга и экспорта страницы. Для этого я создал конечную точку POST, в которой URL и токен используются в качестве параметров, позволяющих визуализировать серверную часть страницы.
Код экспорта:
let cfg = {
headless: true,
args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-web-security"]
};
if (serverRuntimeConfig.chromiumPath != undefined) {
cfg.executablePath = serverRuntimeConfig.chromiumPath
}
const browser = await puppeteer.launch(cfg);
const page = await browser.newPage();
page.on('console', msg => {
for (let i = 0; i < msg.args().length; ++i)
console.log(`${i}: ${msg.args()[i]}`);
});
await page.setCookie(...cookies)
await page.goto(query);
await page.waitFor(10000)
const pdf = await page.pdf({
format: "A4",
scale: 0.75,
printBackground: true
});
await browser.close();
return pdf;
Как вы Как видите, моя страница требует аутентификации, поэтому я настроил повара ie с помощью кукловода.
Когда я использую это локально, проблем не возникает. Моя страница правильно загружена и экспортирована. Проблемы возникают при развертывании с использованием docker. Я console.loged проблема, я загружаю некоторые данные asyn c в хуке componentDidMount, и загрузка просто останавливается, когда я запускаю свой первый запрос для получения данных. Нет ошибок, ничего. Он просто останавливается.
async componentDidMount() {
console.log("yeah");
let ad = await apiCase.doRequest(...);
console.log("re yeah");
}
Получил "да", а не "да".
Dockerfile (его часть)
FROM alpine:edge as prod
ENV PORT 80
EXPOSE 80
WORKDIR /app
COPY --from=prune-builder /src /app
RUN apk add --no-cache \
chromium \
nss \
freetype \
freetype-dev \
harfbuzz \
ca-certificates \
ttf-freefont \
nodejs \
npm
CMD ["npm", "run", "prod"]
Любые идеи ? Я бы положил свои деньги на какую-то глупую проблему с конфигурацией в контейнере, но, похоже, я не могу их найти ...