我有一个爬虫,它使用在 Docker localhost:8050 上运行的 splash 在抓取之前呈现 javascript。我正在尝试在 heroku 上运行它,但不知道如何配置 heroku 以在运行我的网络之前启动 docker 以运行 splash:scrapy crawl abc dyno。非常感谢任何指南!
问问题
1651 次
2 回答
6
从我收集到的你所期待的:
- 通过 Docker 容器在 Heroku 上运行的 Splash 实例
- 在 Heroku dyno 中运行的 Web 应用程序(Scrapy spider)
飞溅实例
- 确保您可以安装
docker
CLI 和heroku
CLI - 如 Heroku 的Container Registry - Pushing existing image(s)中所示:
- 确保安装了
docker
CLI 和heroku
CLI heroku container:login
docker tag scrapinghub/splash registry.heroku.com/<app-name>/web
docker push registry.heroku.com/<app-name>/web
- 测试应用程序:
heroku open -a <app-name>
. 这应该允许您在 Heroku 主机上的端口 8050 上看到此应用程序名称的 Splash UI。- 您可能需要确保
$PORT
设置正确,因为EXPOSE
不遵守 docker 配置(https://devcenter.heroku.com/articles/container-registry-and-runtime#dockerfile-commands-and-runtime)
- 您可能需要确保
- 确保安装了
运行 Dyno Scrapy Web 应用程序
- 将您的应用程序配置为指向
<app-host-name>:8050
. 并且 Scrapy 蜘蛛现在应该能够请求之前运行的 Splash 实例。
于 2017-09-06T06:20:24.307 回答
5
运行同样的问题。最后,我在 Heroku 上成功部署了 splash docker 镜像。这是我的解决方案:我从github克隆了启动项目并更改了 Dockerfile。
- 删除命令 EXPOSE,因为 Heroku 不支持它
- 将 ENTRYPOINT 替换为 CMD 命令。
CMD python3 /app/bin/splash --proxy-profiles-path /etc/splash/proxy-profiles --js-profiles-path /etc/splash/js-profiles --filters-path /etc/splash/filters - -lua-package-path /etc/splash/lua_modules/?.lua --port $PORT
请注意,我添加了选项 --port=$PORT。这只是监听 Heroku 指定的端口,而不是默认的(8050)
一个带有此更改的项目的分支在这里可用 您只需要构建 docker 映像并将其推送到 heroku 的注册表,就像您之前所做的那样。您可以先在本地测试它,但您必须在运行 docker 时传递环境变量“PORT”
sudo docker run -p 80:80 -e PORT=80 mynewsplashimage
于 2017-11-21T13:28:02.110 回答