依赖安装

依赖安装是经常使用 Crawlab 经常需要的需求,目前的临时解决方案都是通过 hacking 的方式。而现在,我们的最新版本已经有比较成熟的解决方案,也就是在界面上操作安装依赖。

如何使用依赖安装

下面我们将介绍如何在 Crawlab 界面上使用依赖安装。

首先我们需要导航到节点列表页,点击一个节点的蓝色查看按钮(如下图),进入节点详情页。

安装节点依赖 - 图1

进入节点详情页之后,点击“安装”标签,进入依赖安装页面。如果在搜索栏中搜索相关的依赖库,将得到相近的依赖列表。例如,Python 中可以得到 pip 的相关依赖。点击“安装”开始 pip install <package_name>,并稍等片刻,就会收到安装成功(或失败)的提示信息;如果该依赖已经在该节点上存在,则会显示“卸载”按钮,点击则可以开始卸载该依赖,相当于 pip uninstall <package_name>。当然,其他语言对应其所对应的包管理操作,例如 Node.js 对应 npm。

安装节点依赖 - 图2

点击“查看已安装”,可以看到该节点上已安装的依赖以及其对应的版本,如下图。同样,点击“卸载”可以卸载该依赖。

安装节点依赖 - 图3

由于 Python 是 Docker 镜像上预装的(待会儿会介绍如何在 Docker 上预装 Node.js)。点击 “Node.js” 标签,会看到提示说“Node.js 还没有安装,您是否打算安装它?”。点击“安装”按钮,后台会开始安装 nvm 和 Node.js 8.12 版本。然后就会看到跟 Python 一样的界面了。

安装节点依赖 - 图4

Docker 中预装编程语言

为了方便爬虫开发者在 Docker 中的 Node.js 爬虫应用,我们开发了在 Docker 中配置预装 Node.js 的功能。只需要在启动的时候设置环境变量 CRAWLAB_SERVER_LANG_NODEY,然后启动镜像就可以了。例如如下 docker-compose.yml

  1. version: '3.3'
  2. services:
  3. master:
  4. image: tikazyq/crawlab:latest
  5. container_name: master
  6. environment:
  7. CRAWLAB_SERVER_MASTER: "Y" # whether to be master node 是否为主节点,主节点为 Y,工作节点为 N
  8. CRAWLAB_MONGO_HOST: "mongo" # MongoDB host address MongoDB 的地址,在 docker compose 网络中,直接引用服务名称
  9. CRAWLAB_REDIS_ADDRESS: "redis" # Redis host address Redis 的地址,在 docker compose 网络中,直接引用服务名称
  10. CRAWLAB_SERVER_LANG_NODE: "Y" # 预安装 Node.js 语言环境
  11. ports:
  12. - "8080:8080"
  13. depends_on:
  14. - mongo
  15. - redis
  16. worker:
  17. image: tikazyq/crawlab:latest
  18. container_name: worker
  19. environment:
  20. CRAWLAB_SERVER_MASTER: "N"
  21. CRAWLAB_MONGO_HOST: "mongo"
  22. CRAWLAB_REDIS_ADDRESS: "redis"
  23. CRAWLAB_SERVER_LANG_NODE: "Y" # 预安装 Node.js 语言环境
  24. depends_on:
  25. - mongo
  26. - redis
  27. mongo:
  28. image: mongo:latest
  29. restart: always
  30. # volumes:
  31. # - "/opt/crawlab/mongo/data/db:/data/db" # make data persistent 持久化
  32. # ports:
  33. # - "27017:27017" # expose port to host machine 暴露接口到宿主机
  34. redis:
  35. image: redis:latest
  36. restart: always
  37. # volumes:
  38. # - "/opt/crawlab/redis/data:/data" # make data persistent 持久化
  39. # ports:
  40. # - "6379:6379" # expose port to host machine 暴露接口到宿主机

不足的地方

我知道开发者们会吐槽:为何不做上传 requirements.txtpackage.json 批量安装的功能啊;为何不支持环境持久化,每次都要重新安装啊;为何不支持 Java 啊… 我知道这些都是很实用的功能,但 Crawlab 的开发向来都是遵从敏捷开发和精益打磨的原则,不会过度开发一个功能,优先保证可行性、可用性、健壮性和稳定性。因此,在验证了大家的使用情况后,我们会逐步完善这个功能,让其变得更加实用。