В одной из заметок затрагивал тему создания скриншотов сайтов через консоль сервера. Мне посоветовали для этого готовый Docker контейнерна базе Google Puppeteer - Screenshoter. Я его попробовал. Сделано очень удобно и функционально.
Идея инструмента следующая - запускаете в Docker контейнере софт, который слушает tcp порт. Шлём к нему на API запросы с параметрами и получаем результат. Самый простой случай выглядит вот так:
# docker run -d --restart always \-p 8080:8080 \--name screenshoter \mingalevme/screenshoter
После запуска, можно сделать запрос к сервису:
# curl "http://localhost:8080/screenshot?url=https://ya.ru" > ~/scrshot.png
Скриншот сайта будет в файле ~/scrshot.png.
Сервис может принимать множество параметров. Все они описаны в репозитории. Вот пример с указанием расширения экрана:
# curl "http://localhost:8080/screenshot?url=https://ya.ru&viewport-width=1920&viewport-height=1080" > ~/scrshot.png
В таком режиме можно запустить где-то контейнер и обращаться к нему по мере необходимости. Очень просто всё это связать с любой системой мониторинга на базе обычных вебхуков.
Я немного покопался в репозитории и увидел там docker-compose.yml, где в составе помимо контейнера с Screenshoter есть Nginx со своим конфигом, который все запросы проксирует скриншотеру. Не сразу понял, зачем это вообще нужно, но в итоге запустил всё у себя и разобрался. Можно поднять эти контейнеры и обращаясь к nginx через браузер, видеть скриншот сразу в нём же.
Запустил вот такой compose:
version: "3.1"services: screenshoter-app: image: mingalevme/screenshoter restart: always screenshoter-nginx: image: nginx:alpine ports: - "80:80" volumes: - ./screenshoter.nginx.conf:/etc/nginx/conf.d/default.conf - "/var/log/nginx:/var/log/nginx" - "/var/cache/nginx:/var/cache/nginx" - "/dev/null:/var/cache/screenshoter" depends_on: - screenshoter-app
После этого в браузере перешёл по url:
http://10.20.1.16/screenshot?url=https://ya.ru&viewport-width=1920&viewport-height=1080
и получил в браузере скриншот сайта.
У Screenshoter много параметров. Он умеет в том числе и скролить. Можно упростить и автоматизировать создание скриншотов. Сервис очень понравился и показался полезным, так что решил рассказать вам о нём. Запустив его у себя, можно упростить и какое-то личное применение. Например, настроить шаблон для скриншотов сайтов и использовать его - какую-то статью заскриншотил, перевёл в pdf и сохранил в директории, которая с Яндекс.Диском синхронизируется.
Исходники - https://github.com/mingalevme/screenshoter
DockerHub - hub.docker.com/r/minga…enshoter
#разное