• 使用 Docker 和 Traefik 搭建轻量美观的计划任务工具


    《轻量的定时任务工具 Cronicle:前篇》这篇文章中,我们聊过如何通过容器封装 Cronicle 这个已经迭代了七年之久的轻量计划任务工具。

    本篇文章中,我们来聊聊如何将它和 Docker 以及 Traefik 一起搭配使用。

    写在前面

    Cronicle 是一款很棒的工具,在上一篇公开的分享中,我有提到过它的各种功能,以及核心的优点:简单小巧、但不失完善功能,以及良好的体验。

    在之前的文章中,使用它需要分别执行初始化和运行,在最近的文章中,除了将它升级到最新的版本之外,我也将这两个步骤进行了合并,与此同时也添加了 Traefik 的使用示例。

    当然, 它也有许多软件有的问题:

    1. 在当前云原生时代,软件功能架构稍显落后。
    2. 由于第一点,许多社区的功能支持上能力、效率比较低:比如秒级任务支持、多语言支持、容器化支持。

    在去年年中的时候,作者曾经下定决定将软件发展方向转向从零开始的 “v2” 版本,但在运作半年不到的过程中,发现 “All-in” 并不是一个最优解,于是,又将船头调转了回来,目前在缓慢的同时迭代 “v1” 和 “v2” 版本的软件。

    如果你不介意使用英文界面,不需要秒级执行的任务,那么 Cronicle 对于你而言一定是一个不错的选择,尤其是当我们解决了 Docker 支持之后(技术细节见上一篇文章)。

    完整的代码,我开源在了这里:https://github.com/soulteary/docker-cronicle,可以自取。

    使用容器部署 Cronicle

    在分享使用之前,我们先来了解如何使用 Docker “一键”安装、部署 Cronicle。

    直接使用 Docker 完成 Cronicle 的部署

    如果你没有使用过 Cronicle ,可以通过下面的命令一键启动一个属于你的计划任务工具:

    docker run \
            -v /etc/localtime:/etc/localtime:ro \
            -v /etc/timezone:/etc/timezone:ro \
            -v `pwd`/data/data:/opt/cronicle/data:rw \
            -v `pwd`/data/logs:/opt/cronicle/logs:rw \
            -v `pwd`/data/plugins:/opt/cronicle/plugins:rw \
            -p 3012:3012 -d \
            --hostname cronicle \
            --name cronicle \
            soulteary/cronicle
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    当程序运行完毕,我们打开浏览器,访问 http://localhost:3012,将看的程序的登录界面:

    Cronicle 登录界面

    在登录界面分别输入默认用户名 admin 和密码 admin,就打开了工具的默认控制面板,包含了程序的运行基础状态的概览。

    Cronicle 运行概览

    通过 Docker Compose 部署 Cronicle

    使用 Docker Compose 启动 Cronicle 也非常简单,我们先将下面的内容保存为 docker-compose.yml

    version: "3"
    
    services:
    
      cronicle:
        image: soulteary/cronicle:0.9.16
        restart: always
        hostname: cronicle
        ports:
          - 3012:3012
        volumes:
          - /etc/localtime:/etc/localtime:ro
          - /etc/timezone:/etc/timezone:ro
          - ./data/data:/opt/cronicle/data
          - ./data/logs:/opt/cronicle/logs
          - ./data/plugins:/opt/cronicle/plugins
        extra_hosts:
          - "cronicle.lab.io:0.0.0.0"
        environment:
          - TZ=Asia/Shanghai
        healthcheck:
          test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:3012/api/app/ping || exit 1"]
          interval: 5s
          timeout: 1s
          retries: 3
        logging:
            driver: "json-file"
            options:
                max-size: "10m"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    接着使用 docker-compose up -d 启动程序即可,使用操作和 Docker 启动方式没有区别。因为我们将命令都使用配置文件(代码)的方式进行了显式声明,在可维护性上来说,会好不少。

    让 Cronicle 和 Traefik 搭配使用

    想要让 Cronicle 和 Traefik 一同使用,我们需要对上文中的 Compose 配置进行一些微调:

    version: "3"
    
    services:
    
      cronicle:
        image: soulteary/cronicle:0.9.16
        restart: always
        expose:
          - 3012
        labels:
          - "traefik.enable=true"
          - "traefik.docker.network=traefik"
    
          # - "traefik.http.routers.cronicle-web.middlewares=redir-https@file"
          - "traefik.http.routers.cronicle-web.entrypoints=http"
          - "traefik.http.routers.cronicle-web.rule=Host(`cronicle.lab.io`)"
    
          - "traefik.http.routers.cronicle-ssl.tls=true"
          # - "traefik.http.routers.cronicle-ssl.middlewares=gzip@file"
          - "traefik.http.routers.cronicle-ssl.entrypoints=https"
          - "traefik.http.routers.cronicle-ssl.rule=Host(`cronicle.lab.io`)"
    
          - "traefik.http.services.cronicle-backend.loadbalancer.server.scheme=http"
          - "traefik.http.services.cronicle-backend.loadbalancer.server.port=3012"
        volumes:
          - /etc/localtime:/etc/localtime:ro
          - /etc/timezone:/etc/timezone:ro
          - ./data/data:/opt/cronicle/data
          - ./data/logs:/opt/cronicle/logs
          - ./data/plugins:/opt/cronicle/plugins
        extra_hosts:
          - "cronicle.lab.io:0.0.0.0"
        environment:
          - TZ=Asia/Shanghai
          - HOSTNAME=cronicle.lab.io
          - CRONICLE_foreground=1
          - CRONICLE_echo=1
          - CRONICLE_base_app_url=http://cronicle.lab.io:3012
          - CRONICLE_web_socket_use_hostnames=1
          - CRONICLE_server_comm_use_hostnames=1
          - CRONICLE_WebServer__http_port=3012
          - CRONICLE_WebServer__http_bind_address=0.0.0.0
          - CRONICLE_WebServer__https=0
          - CRONICLE_web_direct_connect=0
        healthcheck:
          test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider localhost:3012/api/app/ping || exit 1"]
          interval: 5s
          timeout: 1s
          retries: 3
        logging:
            driver: "json-file"
            options:
                max-size: "10m"
        networks:
          - traefik
    
    networks:
      traefik:
        external: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    将上面的内容保存为 docker-compose.yml,使用 docker-compose up -d 启动服务,然后访问我们在配置中定义的域名 cronicle.lab.io 就能够看到应用的 Web UI 啦。

    使用 Cronicle 实现一个简单的监控

    在完成基础搭建之后,我们来通过 Cronicle 实现一个最常见的计划任务的场景来演示基础使用。

    新建周期性任务

    Cronicle 创建任务

    点击界面上的 “Schedule” 标签,打开计划任务页面,点击“Add Event…”按钮,将来到创建任务的页面。

    Cronicle 添加一个周期性调用 HTTP 请求的任务

    我们添加一个周期性调用 HTTP 请求的任务,在调用地址中填入我们要检测的页面地址,比如我在这里填写了国民级检测网络连接的服务:百度。

    Cronicle 设置任务调用频率

    关于频率设置,Cronicle 的选项比较丰富,我们可以根据自己的实际需求来设置。

    Cronicle 设置通知和串行任务

    在完成基础设置和触发频率后,我们需要根据自己的具体需要来设置通知方式和执行成功、执行失败后的下一步动作。我目前选择和常用的 IM 或者自己在用的推送系统联动,所以先不进行额外设置,在下文中我们会翻回来完成最后的设置。

    Cronicle 完成任务创建

    保存任务后,我们再次访问 Cronicle 的控制面板,将看到大量在未来时刻会运行的任务。(未来的运行计划列表)

    Cronicle 任务列表

    接下来,我们来了解触发式的任务如何配置。

    使用触发式任务完成结果通知

    Cronicle 创建一个触发式的任务

    创建触发式任务,只需要把 “Event Enabled” 关闭即可。其余内容和配置周期性任务没有太大差别,在任务内容上,我们既可以选择 HTTP 调用,又可以选择 Script 调用,还可以采用编写插件来完成我们所需要的任务。

    Cronicle 更新任务串行配置

    在完成触发式任务的配置后,我们调整上文中周期执行任务的 “Chain Reaction”,比如,当任务执行失败的时候,主动调用这个“触发式任务”,来联动我们的 IM 或者推送服务,告诉我们有程序出现了问题。

    验证配置好的定时任务

    Cronicle 触发任务进行测试

    在保存任务之后,我们可以等待周期性任务自动执行,也可以手动触发任务,来验证任务执行是否符合预期。

    如果想验证失败的场景,最简单的方式是将我们要检测的域名地址改成一个天然“Not Found” 的记录,随便在域名中添加点字符内容,选择一个不存在的域名地址。

    如果你在上一步中完成了有效的通知配置,那么在这一步,你将会收到告警通知信息。

    关于 Cronicle 的项目维护插曲

    去年七月的时候,Cronicle 作者在项目首页添加了一条有趣的公告内容,声称团队因为没有人力,以及希望能够通过完整重写项目来完成社区内积累的用户需求反馈。

    出于一些原因,在去年年末,Cronicle 的作者将 “项目处于维护期间,将不再接受 Pull Request,将专注新版本 Orchestra 开发”的文档内容移除掉了。自此,Cronicle 原始项目恢复了正常的日常维护和更新。

    这一通折腾之下,Cronicle 的用户应该流失了不少,其他开源社区或许需要引以为戒。

    最后

    希望这篇文章,能够帮助你重新认识 Cronicle 这款优秀的软件,以及节约不必要的折腾时间。

    我们下一篇文章再见。

    –EOF


    我们有一个小小的折腾群,里面聚集了一些喜欢折腾的小伙伴。

    在不发广告的情况下,我们在里面会一起聊聊软硬件、HomeLab、编程上的一些问题,也会在群里不定期的分享一些技术沙龙的资料。

    喜欢折腾的小伙伴,欢迎阅读下面的内容,扫码添加好友。


    本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

    本文作者: 苏洋

    创建时间: 2022年11月17日
    统计字数: 6020字
    阅读时间: 13分钟阅读
    本文链接: https://soulteary.com/2022/11/17/use-docker-and-traefik-to-build-a-lightweight-and-beautiful-scheduled-task-tool.html

  • 相关阅读:
    uni-app 百度语音识别文字并展示功能
    GPT如何避免从入门到放弃(一)——认识GPT
    爬取春秋航空航班信息
    Java 基础 - 面向对象
    如何用C/C++实现去除字符串头和尾指定的字符
    你给文字描述,AI艺术作画,精美无比!附源码,快来试试!
    Git 代码分支管理
    vue基于vant实现图片上传
    轩逸保养手册
    ArcGIS:将相邻面进行合并,并不显示中间线条
  • 原文地址:https://blog.csdn.net/soulteary/article/details/127896462