CoderCastrov logo
CoderCastrov
Парсер

Как запустить микросервис Splash для парсинга веб-страниц с JavaScript в Google Cloud Run

Как запустить микросервис Splash для парсинга веб-страниц с JavaScript в Google Cloud Run
просмотров
6 мин чтение
#Парсер

Изучите простой способ создания готового к работе сервера Splash в облаке

В предыдущих постах мы рассказывали о том, как запустить Splash локально с помощью Docker. В производственной среде мы хотели бы разместить сервер Splash так, чтобы все наши проекты по парсингу могли получить к нему доступ. Поскольку Splash находится в контейнере Docker, простым решением будет запустить микросервис Splash в Cloud Run.

Кажется, что это просто, однако не так просто выполнить все правильно за короткое время. В этом посте мы расскажем, как написать пользовательский Dockerfile для Splash, как создать секреты для хранения прокси-серверов и как запустить сервис Cloud Run для Splash подробно. Надеюсь, это сделает использование Splash в Cloud Run намного проще для вас.

Кроме того, стратегии, представленные в этом посте, могут быть применены для запуска любого стороннего сервиса в контейнере Docker в Cloud Run, особенно для написания пользовательского Dockerfile и монтирования секретов как томов.


Написание пользовательского Dockerfile для Splash

Может быть искушение использовать официальный образ Docker для Splash в Cloud Run напрямую. Однако это не будет работать ожидаемым образом. Возникнут две проблемы:

  • Папки для стандартных фильтров или профилей не могут быть созданы автоматически в Cloud Run, и нам нужно создать их вручную. И, что важно, нам нужно переключиться на другого пользователя перед созданием этих папок и после этого.
  • Стандартный порт 8050 не может быть автоматически доступен, нам нужно явно указать его. Лучший способ - использовать магическую переменную окружения $PORT в Cloud Run, которая будет работать с любым портом, установленным в Cloud Run. Однако следует отметить, что для использования $PORT должна использоваться форма команды CMD в виде оболочки, и нам нужно установить ENTRYPOINT как пустой массив, чтобы исходная команда была проигнорирована.
FROM scrapinghub/splash:3.5

# Необходимо явно создать папки для Cloud Run.
USER root
RUN mkdir -p /etc/splash/proxy-profiles /etc/splash/filters
USER splash

# Копирование фильтров ADs в Docker-образ.
COPY ./easylist.txt /etc/splash/filters/easylist.txt

# Игнорирование указанного в исходном Docker-образе ENTRYPOINT.
ENTRYPOINT []
# Необходимо явно указать порт для Cloud Run.
# Для использования $PORT необходимо использовать форму оболочки.
CMD python3 /app/bin/splash --proxy-profiles-path /etc/splash/proxy-profiles \
    --filters-path /etc/splash/filters \
    --port $PORT

Теперь мы можем использовать gcloud builds для создания и загрузки Docker-образа в Artifact Registry. Обратите внимание, что вы должны предварительно создать репозиторий Artifact Registry, как описано в этом посте.

gcloud builds submit --tag europe-north1-docker.pkg.dev/superdataminer/standard-docker-repo/scrapinghub/splash:cloud-run-3.5

Вышеуказанная команда эквивалентна следующим командам, использующим команду docker напрямую:

docker build --no-cache -t europe-north1-docker.pkg.dev/superdataminer/standard-docker-repo/scrapinghub/splash:cloud-run-3.5 .
docker push europe-north1-docker.pkg.dev/superdataminer/standard-docker-repo/scrapinghub/splash:cloud-run-3.5

Эти две команды полезны, когда вы хотите сначала создать Docker-образ и протестировать его локально.


Создание секретов для прокси Splash

Прокси Splash - это конфиденциальная информация и не должна быть выложена в кодовой базе. Хорошим решением на GCP является создание секретов с использованием Secret Manager, а затем их монтирование в виде тома в службе Cloud Run.

Однако Cloud Run не позволяет монтировать несколько секретов в одном пути, так как два тома не могут быть примонтированы в одном месте. В качестве обходного решения мы создадим секрет с несколькими версиями, каждая из которых соответствует файлу прокси в определенной стране. Каждая версия может быть затем примонтирована в разных путях в одном и том же томе, как мы покажем далее.

Попробуйте найти "Secret Manager" в консоли GCP и нажмите "СОЗДАТЬ СЕКРЕТ", чтобы создать новый. Обратите внимание, что значение секрета, введенное при создании секрета, будет первой версией. Мы должны добавить другие версии после создания секрета:

После создания секрета мы можем нажать "НОВАЯ ВЕРСИЯ", чтобы создать новые версии секрета.

В этом посте каждая версия будет соответствовать файлу прокси в стране. Поэтому во второй версии мы можем загрузить профиль прокси другой страны:

По умолчанию псевдонимы пусты для версий, и поэтому их сложно отличить друг от друга. Мы можем нажать "РЕДАКТИРОВАТЬ СЕКРЕТ", чтобы отредактировать секрет и добавить псевдонимы для версий:

Добавьте некоторые описательные псевдонимы для каждой версии:

И, наконец, нажмите "ОБНОВИТЬ СЕКРЕТ", чтобы обновить секрет.

Создание сервиса Cloud Run для Splash

Теперь, когда настроены пользовательский образ Docker и секреты профиля прокси, мы можем приступить к созданию сервиса Cloud Run для Splash.

Попробуйте найти Cloud Run в консоли GCP и нажмите "СОЗДАТЬ СЕРВИС", чтобы создать новый:

Следуйте инструкциям ниже, чтобы выбрать необходимые параметры в соответствии с вашими требованиями. Важно выбрать пользовательский образ Docker, который мы только что создали для Cloud Run, а не официальный образ Docker Splash:

Хорошая вещь в использовании консоли GCP вместо командной строки для создания нового сервиса Cloud Run заключается в том, что вы можете легче получить инструкции. Не стесняйтесь нажимать на вопросительные знаки, если вам не ясна какая-либо опция. Обратите внимание, что эти параметры могут повлиять на производительность, стоимость или безопасность создаваемого сервиса. Для более подробных инструкций по каждой опции может быть полезен этот пост.

После того, как вы установили вышеуказанные параметры в соответствии с инструкциями, пока не нажимайте кнопку "СОЗДАТЬ", нам нужно сделать еще несколько настроек для контейнера.

Нажмите на заголовок "Контейнер, сеть, безопасность", чтобы развернуть его:

Нам не нужно менять порт здесь, потому что мы используем переменную окружения $PORT в контейнере для автоматического сопоставления порта.

Важная настройка - это память. Для правильной работы Splash требуется достаточное количество памяти. Поэтому вам нужно указать как минимум 1 ГБ памяти для сервиса Cloud Run, иначе он не сможет быть успешно запущен.

Затем прокрутите немного вниз до раздела "Секреты". Нажмите "ДОБАВИТЬ ССЫЛКУ НА СЕКРЕТ", чтобы создать ссылку на секрет:

Важные настройки для создания ссылки на секрет:

  • Нам нужно примонтировать секрет как том внутри Docker-контейнера Cloud Run.
  • Путь монтирования должен быть абсолютным путем к папке профиля прокси, который является /etc/splash/proxy-profiles. Не забудьте удалить ведущий и завершающий слэши, так как они добавляются автоматически Cloud Run.
  • Каждая версия будет примонтирована как отдельный файл в том же томе секрета. Для каждой версии укажите имя файла в качестве пути, без ведущего слэша. Относительный путь используется для каждой версии, поэтому достаточно указать только имя файла.

Теперь все готово, мы можем, наконец, нажать кнопку "СОЗДАТЬ" внизу, чтобы создать сервис Cloud Run.

Если все работает как ожидается, микросервис Splash должен быть успешно запущен:

Тщательно проверьте журнал, если что-то идет не так, большую часть времени вы можете найти подсказку для решения проблемы там.

Теперь, если вы щелкнете по URL Cloud Run, вы увидите пользовательский интерфейс Splash:

Это означает, что Splash успешно настроен в Cloud Run, и теперь вы можете использовать его во всех ваших проектах парсинга.

Связанные статьи:


Level Up Coding

Благодарим вас за участие в нашем сообществе! Прежде чем вы уйдете:

  • 👏 Поставьте лайк этой статье и подпишитесь на автора 👉
  • 📰 Просмотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс по подготовке к собеседованию по программированию ⇒ Посмотреть курс
  • 🔔 Следите за нами: Twitter | LinkedIn | Newsletter

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите удивительную работу