Служба приложений Azure внезапно остановилась из-за ошибки PhantomJS

У нас есть Restify API, работающий в службе приложений Azure в Linux уже некоторое время. Внезапно это приложение (как тестовое, так и производственное, они работают как отдельные приложения) перестало работать. Судя по журналам, ошибка связана с пакетом, который мы используем для экспорта диаграмм node-highcharts, который зависит от PhantomJS. Служба приложений использует Node 8.1.

Мы попытались повторно развернуть код, обновив версию узла до 8.12 (не хочу использовать последнюю версию без тестирования), но все равно не повезло.

Журналы развертывания: (Эта часть успешно завершена. Это только для справки)

Журналы контейнера: (здесь не запускается)

Пытался воспроизвести ту же среду локально, и все работает нормально. Создана новая служба приложений, которая также сталкивается с той же проблемой. Буду признателен за любую оказанную помощь.

Обновление 1: думаю, я понял, что происходит. Это связано с библиотеками шрифтов в Linux https://github.com/ariya/phantomjs/issues/10904

Мне нужно установить libfontconfig но это не поддерживается в Службе приложений Azure.

1 ответ

Да, это связано с ограничением песочницы в службе приложений. Чтобы подчеркнуть, стандартные / собственные веб-приложения Azure работают в безопасной среде, называемой песочницей. Каждое приложение запускается в собственной песочнице, изолируя его выполнение от других экземпляров на том же компьютере, а также обеспечивая дополнительную степень безопасности и конфиденциальности, которые в противном случае были бы недоступны.

Не поддерживаются сценарии в стандартной службе приложений - PhantomJS (/Selenium): пытается подключиться к локальному адресу, а также использует GDI+. Известная проблема для всех генераторов PDF на основе wkhtmltopdf или phantomjs: пользовательские шрифты не отображаются (используется шрифт, установленный системой вместо этого) из-за ограничений API-интерфейса GDI для песочницы. См. страницу GitHub для службы приложений.

Однако в зависимости от ваших требований вы можете использовать настраиваемый контейнер в службе приложений (вы можете использовать настраиваемый образ Docker), который позволяет вам вносить изменения в ОС, необходимые вашему приложению.

Ознакомьтесь с этим документом для получения дополнительных сведений по этой теме:

Запустите настраиваемый контейнер Linux в службе приложений Azure (вы можете использовать настраиваемый образ Docker): https://docs.microsoft.com/azure/app-service/containers/quickstart-docker

Запустите настраиваемый контейнер Windows в Azure (предварительная версия): https://docs.microsoft.com/azure/app-service/app-service-web-get-started-windows-container

Другие вопросы по тегам