侧边栏壁纸
博主头像
HY的休息小屋 博主等级

行动起来,活在当下

  • 累计撰写 4 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

【玩转Docker】QD-签到框架

hy
hy
2025-01-10 / 0 评论 / 0 点赞 / 68 阅读 / 0 字

什么是QD

官方文档

按照官方给出的定义,QD框架是

一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。

可能有些小伙伴被这一串的描述给弄晕了,但简单来说就是一个定时任务框架,但大家多将它用于每日签到(包括我)。甚至我都快忘记它还能处理一些其他类型的定时任务,毕竟我也没有其他的使用场景😄 ,因此本文就教大家如何在服务器上部署QD并使用。


官方部署方式

推荐使用Docker compose方式来部署,我使用的docker版本为 25.0.1

# 进入要存放docker部署内容的目录
cd xxx
# 创建qd文件夹用于存放部署内容
mkdir -p qd/config && cd qd
# 下载官方提供的docker-compose.yml文件
wget https://fastly.jsdelivr.net/gh/qd-today/qd@master/docker-compose.yml
# 启动qd服务
docker compose up -d

这样qd服务就部署好了。

需要注意的是官方提供的文件中,服务暴露出的端口号是8923。如果服务器中该端口已经被占用,那么就需要自行调整部署文件中暴露的端口号。


访问后台界面

部署好后我们来访问一下后台,如果是部署在云服务器上,请确保已经开放对应的端口访问。

访问http://IP:8923 可以看到下图。

image-yyoj.png

点击右上角的登录按钮进入注册界面

image-nsuk.png

注册成功后登录到主界面,第一步是先把注册入口关闭,避免暴露的服务被人注册后搞事情。

点击 管理网站 勾选 禁止注册输入账号密码后提交,这样就可以了。

Snipaste_2025-01-08_11-28-14.png

Snipaste_2025-01-08_11-36-41.png


精简部署

我们先查看一下官方提供的docker-compose.yml文件内容,看下都包含了哪些东西。

version: "3"

services:
  qd:
    image: qdtoday/qd:latest
    # image: qdtoday/qd:lite-latest # 精简版
    # image: qdtoday/qd:dev # 开发版
    container_name: qd
    depends_on:
      - redis
    ports:
      - "8923:80"
    volumes:
      - "./config:/usr/src/app/config"
    environment:
      # - QD_DEBUG=False
      # - BIND=0.0.0.0
      # - PORT=80
      # - MULTI_PROCESS=False
      # - AUTO_RELOAD=False
      # - GZIP=True
      # - ACCESS_LOG=True
      # - DISPLAY_IMPORT_WARNING=True
      # - USER0ISADMIN=True
      # - STATIC_URL_PREFIX=/static/
      - DOMAIN=
      # - COOKIE_DAY=5
      # - COOKIE_SECURE_MODE=False
      - COOKIE_SECRET=binux
      - PBKDF2_ITERATIONS=400
      - AES_KEY=binux
      # - DB_TYPE=sqlite3
      # - JAWSDB_MARIA_URL=mysql://user:pass@localhost:3306/dbname?auth_plugin=
      # - QD_SQL_LOGGING_NAME=QD.sql
      # - QD_SQL_LOGGING_LEVEL=WARNING
      # - QD_SQL_POOL_LOGGING_NAME=QD.sql.pool
      # - QD_SQL_POOL_LOGGING_LEVEL=WARNING
      # - QD_SQL_POOL_SIZE=5
      # - QD_SQL_MAX_OVERFLOW=10
      # - QD_SQL_POOL_PRE_PING=True
      # - QD_SQL_POOL_RECYCLE=3600
      # - QD_SQL_POOL_TIMEOUT=30
      # - QD_SQL_POOL_USE_LIFO=True
      - REDISCLOUD_URL=redis://redis:6379
      # - REDIS_DB_INDEX=1
      # - QD_EVIL=1000
      # - EVIL_PASS_LAN_IP=True
      # - WORKER_METHOD=Queue
      # - QUEUE_NUM=50
      # - CHECK_TASK_LOOP=500
      # - TASK_MAX_RETRY_COUNT=8
      # - NEW_TASK_DELAY=1
      # - TASK_WHILE_LOOP_TIMEOUT=900
      # - TASK_REQUEST_LIMIT=1500
      # - DOWNLOAD_SIZE_LIMIT=5242880
      # - REQUEST_TIMEOUT=30.0
      # - CONNECT_TIMEOUT=30.0
      # - DELAY_MAX_TIMEOUT=29.9
      # - UNSAFE_EVAL_TIMEOUT=3.0
      # - USE_PYCURL=True
      # - ALLOW_RETRY=True
      # - DNS_SERVER=
      # - CURL_ENCODING=True
      # - CURL_CONTENT_LENGTH=True
      # - NOT_RETRY_CODE=301|302|303|304|305|307|400|401|403|404|405|407|408|409|410|412|415|413|414|500|501|502|503|504|599
      # - EMPTY_RETRY=True
      # - TRACEBACK_PRINT=False
      # - PUSH_PIC_URL=https://gitee.com/qd-today/qd/raw/master/web/static/img/push_pic.png
      # - PUSH_BATCH_SW=True
      # - PUSH_BATCH_DELTA=60
      # - WS_PING_INTERVAL=5
      # - WS_PING_TIMEOUT=30
      # - WS_MAX_MESSAGE_SIZE=10485760
      # - WS_MAX_QUEUE_SIZE=100
      # - WS_MAX_CONNECTIONS_SUBSCRIBE=30
      # - SUBSCRIBE_ACCELERATE_URL=ghproxy
      # - PROXIES=
      # - PROXY_DIRECT_MODE=regexp
      # - PROXY_DIRECT=(?xi)\A([a-z][a-z0-9+\-.]*://)?(0(.0){3}|127(.0){2}.1|localhost|\[::([\d]+)?\])(:[0-9]+)?
      # - NOTEPAD_LIMIT=20
      # - EXTRA_ONNX_NAME=
      # - EXTRA_CHARSETS_NAME=
      # - MAIL_SMTP=
      # - MAIL_PORT=465
      # - MAIL_SSL=True
      # - MAIL_STARTTLS=False
      # - MAIL_USER=
      # - MAIL_PASSWORD=
      # - MAIL_FROM=${MAIL_USER}
      # - MAIL_DOMAIN_HTTPS=False
      # - MAILGUN_KEY=
      # - MAILGUN_DOMAIN=${DOMAIN}
      # - GA_KEY=

  redis:
    image: redis:alpine
    container_name: redis
    command: ["--loglevel warning"]
    # command: redis-server /usr/local/etc/redis/redis.conf
    volumes:
      # - ./redis/redis.conf:/usr/local/etc/redis/redis.conf:rw
      - ./redis/data:/data:rw

可以看到官方提供了一个redis服务供qd服务使用,像我不希望redis占用我服务器资源的话,可以对docker-compose.yml文件进行改造,使用sqlite来作为存储。查看官方文档,当DB_TYPE不填写时,默认使用sqlite3。

image-dstp.png

改造docker-compose.yml

以下是我改造后的docker-compose.yml

version: '3.9'
services:
    qd:
        image: 'qdtoday/qd:latest'
        restart: always
        volumes:
            - './config:/usr/src/app/config'
        ports:
            - '8923:80'      # 8923端口可以自行修改
        container_name: qd
        tty: true
        stdin_open: true

重启服务

# 进入qd文件夹
cd xxx/qd
# 停止qd服务
docker compose down
# 启动qd服务
docker compose up -d

这样一个精简的QD服务就搭建好了🎉️


使用

本文仅针对公共模板的签到功能进行教学,如果有其他定时任务需求可以参考官方文档

点击 公共模板

Snipaste_2025-01-08_15-11-48.png

接着界面会跳转到公共模板页面,会自动拉取模板配置。

Snipaste_2025-01-10_14-13-27.png

以百度贴吧自动签到为例,我们在页面中先找到 贴吧一键签到模板,点击 订阅按钮。在弹出的模板界面中点击 保存

Snipaste_2025-01-10_14-16-14.pngSnipaste_2025-01-10_14-18-31.png

回到QD首页,在 我的模板中就可以找到刚才保存的签到模板了,点击 新建

Snipaste_2025-01-10_14-20-28.png

在弹出框中填写百度贴吧的Cookies,最后点击提交就可以了。

Snipaste_2025-01-10_14-24-53.png

如果不明白如何获取Cookies,可以参考一键获取Cookies。安装插件后,网页端登录百度贴吧,然后回到新建任务页面,点击Cookies框右上方的 点击获取按钮,就可以一键获取Cookies了。

至于如何手动获取Cookies,我就偷个懒先不写了,如果大家有需求的话在评论区留言,我可以抽空补充一下。(逃

尝试一下自动签到吧

任务创建好后,在 我的任务里就可以看到了,任务会自动执行,很快就能看到执行结果。如果配置正常的话可以看到签到状态为正常,接着回到百度贴吧查看是否一键签到成功🎉️

如果任务执行失败了,一般来说是Cookies配置有误,或者签到模板需要更新。

Snipaste_2025-01-10_14-39-49.png

高阶玩法教学

  • 定时任务
  • 任务执行结果推送
  • 自建模板

还有一些高阶玩法,大家感兴趣可以自行研究,客服猫精力有限先教到这儿!正在考虑考虑下一期教大家其他有意思的Docker项目❤️在这儿提前祝大家新年快乐🎉️

15856215638870.png

0

评论区