Docker 安装部署

这应该是部署应用的最方便也是最节省时间的方式了。在最近的一次版本更新 v0.4.0 中,我们发布了Golang版本,并且支持Docker部署。下面将一步一步介绍如何使用Docker来部署Crawlab。

对Docker不了解的开发者,可以参考一下这篇文章(9102 年了,学点 Docker 知识)做进一步了解。如果已经了解 Docker 的开发者,可以跳过第 1 节,如果对 Docker 和 Docker-Compose 了解的开发者,可以跳过 1、2 两节,直接阅读 “安装并启动 Crawlab“ 小节。

推荐人群:

  • 想要快速体验 Crawlab 的开发者
  • Docker 比较了解或者愿意学习 Docker 的开发者

推荐配置:

  • Docker: 18.03+
  • Docker-Compose: 1.24+

1. 安装 Docker

Docker 的安装其实不复杂,英语不错的请参照 官方文档 进行安装。下面将介绍两种安装方式。

1.1 Windows & Mac

Windows 和 Mac 的用户可以下载 Docker Desktop 来完成 Docker 安装。

下载地址: https://www.docker.com/products/docker-desktop

点击下图的按钮,按照官网步骤,完成下载安装。

Docker - 图1

Linux

对于 Linux 用户,请参照以下表格的链接来安装 Docker。

操作系统 文档
Ubuntu https://docs.docker.com/install/linux/docker-ce/ubuntu
Debian https://docs.docker.com/install/linux/docker-ce/debian
CentOS https://docs.docker.com/install/linux/docker-ce/centos
Fedora https://docs.docker.com/install/linux/docker-ce/fedora
其他 Linux 发行版 https://docs.docker.com/install/linux/docker-ce/binaries

1.2 下载镜像

我们已经在 DockerHub 上构建了Crawlab的镜像,开发者只需要将其 pull 下来使用。在 pull 镜像之前,我们需要配置一下镜像源。因为我们在墙内,使用原有的镜像源速度非常感人,因此将使用 DockerHub 在国内的加速器。如果是 Mac 或者 Linux 用户,创建 /etc/docker/daemon.json 文件,在其中输入如下内容。

  1. {
  2. "registry-mirrors": ["https://registry.docker-cn.com"]
  3. }

这样的话,pull 镜像的速度会比不改变镜像源的速度快很多。

执行以下命令将 Crawlab 的镜像下载下来。镜像大小大概在几百兆,因此下载需要几分钟时间。

  1. docker pull tikazyq/crawlab:latest

1.3 Docker 常用命令

请查看这篇文章来查看 Docker 的常用命令。

https://blog.csdn.net/u013378306/article/details/86668313

2. 安装 Docker-Compose

为了方便起见,我们用docker-compose的方式来部署。docker-compose是一个集群管理方式,可以利用名为docker-compose.ymlyaml文件来定义需要启动的容器,可以是单个,也可以(通常)是多个的。

安装 docker-compose 其实比较简单,在安装了 pip 的情况下(Python 3),执行以下命令。

  1. pip install docker-compose

安装好 docker-compose 后,请运行 docker-compose ps 来测试是否安装正常。正常的应该是显示如下内容。

  1. Name Command State Ports
  2. ------------------------------
  3. --------------------------------

这是没有 Docker 容器在运行的情况,也就是空列表。如果有容器在运行,可以看到其对应的信息。

3. 安装并启动 Crawlab

Crawlab的docker-compose.yml定义如下。

  1. version: '3.3'
  2. services:
  3. master:
  4. image: tikazyq/crawlab:latest
  5. container_name: master
  6. environment:
  7. # CRAWLAB_API_ADDRESS: "https://<your_api_ip>:<your_api_port>" # backend API address 后端 API 地址. 适用于 https 或者源码部署
  8. CRAWLAB_SERVER_MASTER: "Y" # whether to be master node 是否为主节点,主节点为 Y,工作节点为 N
  9. CRAWLAB_MONGO_HOST: "mongo" # MongoDB host address MongoDB 的地址,在 docker compose 网络中,直接引用服务名称
  10. # CRAWLAB_MONGO_PORT: "27017" # MongoDB port MongoDB 的端口
  11. # CRAWLAB_MONGO_DB: "crawlab_test" # MongoDB database MongoDB 的数据库
  12. # CRAWLAB_MONGO_USERNAME: "username" # MongoDB username MongoDB 的用户名
  13. # CRAWLAB_MONGO_PASSWORD: "password" # MongoDB password MongoDB 的密码
  14. # CRAWLAB_MONGO_AUTHSOURCE: "admin" # MongoDB auth source MongoDB 的验证源
  15. CRAWLAB_REDIS_ADDRESS: "redis" # Redis host address Redis 的地址,在 docker compose 网络中,直接引用服务名称
  16. # CRAWLAB_REDIS_PORT: "6379" # Redis port Redis 的端口
  17. # CRAWLAB_REDIS_DATABASE: "1" # Redis database Redis 的数据库
  18. # CRAWLAB_REDIS_PASSWORD: "password" # Redis password Redis 的密码
  19. # CRAWLAB_LOG_LEVEL: "info" # log level 日志级别. 默认为 info
  20. # CRAWLAB_LOG_ISDELETEPERIODICALLY: "N" # whether to periodically delete log files 是否周期性删除日志文件. 默认不删除
  21. # CRAWLAB_LOG_DELETEFREQUENCY: "@hourly" # frequency of deleting log files 删除日志文件的频率. 默认为每小时
  22. # CRAWLAB_SERVER_REGISTER_TYPE: "mac" # node register type 节点注册方式. 默认为 mac 地址,也可设置为 ip(防止 mac 地址冲突)
  23. # CRAWLAB_SERVER_REGISTER_IP: "127.0.0.1" # node register ip 节点注册IP. 节点唯一识别号,只有当 CRAWLAB_SERVER_REGISTER_TYPE 为 "ip" 时才生效
  24. # CRAWLAB_TASK_WORKERS: 8 # number of task executors 任务执行器个数(并行执行任务数)
  25. # CRAWLAB_RPC_WORKERS: 16 # number of RPC workers RPC 工作协程个数
  26. # CRAWLAB_SERVER_LANG_NODE: "Y" # whether to pre-install Node.js 预安装 Node.js 语言环境
  27. # CRAWLAB_SERVER_LANG_JAVA: "Y" # whether to pre-install Java 预安装 Java 语言环境
  28. # CRAWLAB_SETTING_ALLOWREGISTER: "N" # whether to allow user registration 是否允许用户注册
  29. # CRAWLAB_SETTING_ENABLETUTORIAL: "N" # whether to enable tutorial 是否启用教程
  30. # CRAWLAB_NOTIFICATION_MAIL_SERVER: smtp.exmaple.com # STMP server address STMP 服务器地址
  31. # CRAWLAB_NOTIFICATION_MAIL_PORT: 465 # STMP server port STMP 服务器端口
  32. # CRAWLAB_NOTIFICATION_MAIL_SENDEREMAIL: admin@exmaple.com # sender email 发送者邮箱
  33. # CRAWLAB_NOTIFICATION_MAIL_SENDERIDENTITY: admin@exmaple.com # sender ID 发送者 ID
  34. # CRAWLAB_NOTIFICATION_MAIL_SMTP_USER: username # SMTP username SMTP 用户名
  35. # CRAWLAB_NOTIFICATION_MAIL_SMTP_PASSWORD: password # SMTP password SMTP 密码
  36. ports:
  37. - "8080:8080" # frontend port mapping 前端端口映射
  38. depends_on:
  39. - mongo
  40. - redis
  41. # volumes:
  42. # - "/var/crawlab/log:/var/logs/crawlab" # log persistent 日志持久化
  43. worker:
  44. image: tikazyq/crawlab:latest
  45. container_name: worker
  46. environment:
  47. CRAWLAB_SERVER_MASTER: "N"
  48. CRAWLAB_MONGO_HOST: "mongo"
  49. CRAWLAB_REDIS_ADDRESS: "redis"
  50. depends_on:
  51. - mongo
  52. - redis
  53. # environment:
  54. # MONGO_INITDB_ROOT_USERNAME: username
  55. # MONGO_INITDB_ROOT_PASSWORD: password
  56. # volumes:
  57. # - "/var/crawlab/log:/var/logs/crawlab" # log persistent 日志持久化
  58. mongo:
  59. image: mongo:latest
  60. restart: always
  61. # volumes:
  62. # - "/opt/crawlab/mongo/data/db:/data/db" # make data persistent 持久化
  63. # ports:
  64. # - "27017:27017" # expose port to host machine 暴露接口到宿主机
  65. redis:
  66. image: redis:latest
  67. restart: always
  68. # command: redis-server --requirepass "password" # set redis password 设置 Redis 密码
  69. # volumes:
  70. # - "/opt/crawlab/redis/data:/data" # make data persistent 持久化
  71. # ports:
  72. # - "6379:6379" # expose port to host machine 暴露接口到宿主机
  73. # splash: # use Splash to run spiders on dynamic pages
  74. # image: scrapinghub/splash
  75. # container_name: splash
  76. # ports:
  77. # - "8050:8050"

这里先定义了 master 节点和 worker 节点,也就是Crawlab的主节点和工作节点。masterworker 依赖于 mongoredis 容器,因此在启动之前会同时启动 mongoredis 容器。这样就不需要单独配置 mongoredis 服务了,大大节省了环境配置的时间。

其中,我们设置了Redis和MongoDB的地址,分别通过 CRAWLAB_REDIS_ADDRESSCRAWLAB_MONGO_HOST 参数。CRAWLAB_SERVER_MASTER 设置为Y表示启动的是主节点(该参数默认是为N,表示为工作节点)。CRAWLAB_API_ADDRESS 是前端的API地址,请将这个设置为公网能访问到主节点的地址,8000是API端口。环境变量配置详情请见 配置章节,您可以根据自己的要求来进行配置。

⚠️注意: 在生产环境中,强烈建议您将数据库持久化,因为否则的话,一旦您的 Docker 容器发生意外导致关闭重启,您的数据将丢失。持久化的方法就是将上述 docker-compose.yml 模版中的关于持久化的代码取消注释就可以了。持久化的数据包括:MongoDB 数据库、Redis 数据库、日志。

安装完 docker-compose 和定义好 docker-compose.yml 后,只需要运行以下命令就可以启动Crawlab。

  1. docker-compose up -d

同样,在浏览器中输入 http://localhost:8080 就可以看到界面。

4. 更新/重启 Crawlab

当 Crawlab 有更新时,我们会将新的变更构建更新到新的镜像中。最新的镜像名称都是 tikazyq/crawlab:latest。而一个指定版本号的镜像名称为 tikazyq/crawlab:<version>,例如 tikazyq/crawlab:0.4.7 为 v0.4.7 版本对应的镜像。

如果您需要更新最新的版本的镜像,只需要执行以下代码。

  1. # 关闭并删除 Docker 容器
  2. docker-compose down
  3. # 拉取最新镜像
  4. docker pull tikazyq/crawlab:latest
  5. # 启动 Docker 容器
  6. docker-compose up -d

5. 下一步

请参考 爬虫章节 来详细了解如何使用 Crawlab。