splash安装

    我们的日常需求中会有一些需要渲染javascript的场景,比如爬虫服务、自动化测试、生成复杂的echarts报表等等。之前在java开发中使用较多的是PhantomJS,但是目前PhantomJS已经不再维护升级,并且在使用上也不够便利。这里笔者推荐另外一款神器--splash。

    splash是一个webkit内核的headless浏览器环境,可以获取渲染后的HTML内容、导出har格式的浏览记录、对网页指定位置进行截图生成图片以及通过Lua脚本动态执行JS等功能,并且提供了便利的HTTP API方式进行操作,可以通过各种客户端语言进行方便集成。splash中文文档可以参考以下地址:https://splash-cn-doc.readthedocs.io/zh_CN/latest/index.html

    下面开始介绍splash在centos7环境下的安装,这里我是通过docker方式进行安装,也可以参照在线文档在非容器环境进行安装。

    1.添加163yum源(根据系统修改repo版本)

        wget http://mirrors.163.com/.help/CentOS7-Base-163.repo -P /etc/yum.repos.d/

    2.安装docker(默认目录在/var/lib/docker下面,如果系统盘小,需要建立一个软链接到大的硬盘)

        yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

        #下载速度慢可以替换为阿里云源

        #yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

        yum install -y yum-utils device-mapper-persistent-data lvm2

        yum install docker-ce-19.03.2 -y

    3.安装docker-compose

        curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

        chmod u+x /usr/local/bin/docker-compose

    4.启动docker

        将docker配置文件拷贝到/usr/local/docker/docker_compose_conf 目录下,执行:

        /bin/systemctl daemon-reload

        /bin/systemctl start docker.service

        COMPOSE_HTTP_TIMEOUT=300 /usr/local/bin/docker-compose -f /usr/local/docker/docker_compose_conf/docker-compose.yml down --remove-orphans

        COMPOSE_HTTP_TIMEOUT=300 /usr/local/bin/docker-compose -f /usr/local/docker/docker_compose_conf/docker-compose.yml up -d

        在docker下载haproxy等过程中,如果出现ssl相关的错误,需要先更新机器ssl相关软件

        yum -y install ca-certificates openssl nss curl

    5.生产环境我们往往需要配置多个splash实例,通过代理服务器进行负载均衡,否则经常会发生504超时(参考https://splash-cn-doc.readthedocs.io/zh_CN/latest/faq.html#i-m-getting-lots-of-504-timeout-errors-please-help),这里以配置两个splash实例并通过haproxy进行负载均衡为例,配置文件docker-compose.yml内容如下:

        version: '2'

        services:

            haproxy:

                image: haproxy:1.7

                ports:

                    - "127.0.0.1:60040:9040"

                    - "127.0.0.1:60050:9050"

                links:

                    - splash00

                    - splash01

                volumes:

                    - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro

                restart: always

            splash00:

                image: scrapinghub/splash:latest

                command: --max-timeout 3600 --slots 10 --maxrss 1000 --verbosity 1 --disable-private-mode

                expose:

                    - 9050

                mem_limit: 1000m

                memswap_limit: 1000m

                restart: always

            splash01:

                image: scrapinghub/splash:latest

                command: --max-timeout 3600 --slots 10 --maxrss 1000 --verbosity 1 --disable-private-mode

                expose:

                    - 9050

                mem_limit: 1000m

                memswap_limit: 1000m

                restart: always

    6.haproxy.cfg内容如下:

        global

            maxconn 1280

            stats socket /tmp/haproxy

        userlist users

            user xxx insecure-password xxx

        defaults

            log global

            mode http

            option abortonclose

            compression algo gzip

            compression type text/html text/plain application/json

            timeout connect 3600s

            timeout client 3600s

            timeout server 3600s

        listen stats

            bind 0.0.0.0:9040

            mode http

            stats enable

            stats hide-version

            stats show-legends

            stats show-desc Splash Cluster

            stats uri /

            stats refresh 10s

            stats realm Haproxy\ Statistics

            stats auth  xxx

        frontend http-in

            bind 0.0.0.0:9050

        backend splash-cluster

            option httpchk GET /

            balance leastconn

            retries 3

            option redispatch

            server splash-00 splash00:9050 check maxconn 0 inter 10s fall 10 observe layer4

           server splash-01 splash01:9050 check maxconn 0 inter 10s fall 10 observe layer4

        backend splash-misc

            balance roundrobin

            server splash-00 splash00:9050 check fall 15

            server splash-01 splash01:9050 check fall 15

    7.启动后通过docker ps -a命令可以查看到有两个splash实例处于up状态,此时访问ip:60050即可得到如下界面:


    8.splash的操作可以参考中文文档,另外有几个坑这里记录一下:

        - docker环境下的网络应用会受到iptables影响,如果修改了防火墙规则重启iptables,splash也 需要重启,否则会造成网络不通导致splash dns解析失败等情况。

        - 如果出现运行一段时间后splash网络不通,查看ip路由转发是否开启sysctl net.ipv4.ip_forward 如果=1说明开启,否则未开启(每次启动docker服务会开启,如果iptables或者网络服务重启则会刷新,所以最终还是要改配置开启ip路由转发服务)。如果未开启ip路由转发,则echo 'net.ipv4.ip_forward = 1' | sudo tee -a /usr/lib/sysctl.d/50-default.conf写入配置,sudo sysctl -p /usr/lib/sysctl.d/50-default.conf 重载配置;如果经常出现splash返回network3错误,可以尝试:systemctl stop docker,ip link set dev docker0 down,systemctl start docker

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容