[Docker] QD HTTP 定时任务自动执行框架部署
QD 是 一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。
官网:https://qd-today.github.io/qd/zh_CN/
Github:https://github.com/qd-today/qd
主要特性
- 基于Har: 仅需上传通过抓包得到的 Har, 即可制作框架所需的 HTTP 任务模板。
- Tornado 服务端: 使用 Tornado 作为服务端, 以实现异步响应前端和发起 HTTP 请求。
- API & 插件支持: 内置多种 API 和过滤器用于模板制作, 后续将提供自定义插件支持。
- 开源: QD 是一个基于 MIT 许可证的开源项目。
部署环境
- 系统:Debian
- 域名一个,并解析到服务器
- 安装好 Docker、Docker-compose,见VPS部署
- 安装好 Caddy,反向代理
部署
升级 packages,
apt update -y
安装常用的软件,
apt install wget curl sudo vim git
QD
创建安装目录,
mkdir -p /root/data/docker/qd
mkdir -p /root/data/docker/redis
cd /root/data/docker/qd
下载 docker-compose.yml
,
wget https://fastly.jsdelivr.net/gh/qd-today/qd@master/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:
- "8000:80"
volumes:
- "/root/data/docker/qd/:/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=jsdelivr_cdn
# - 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]+)?
# - EXTRA_ONNX_NAME=
# - EXTRA_CHARSETS_NAME=
# - MAIL_SMTP=
# - MAIL_PORT=465
# - MAIL_SSL=True
# - 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
- /root/data/docker/redis/:/data:rw
启动,
docker-compose up -d
首位注册用户默认为管理员, 需要先登出再登陆后才能获得完整管理员权限。
更新
进入 docker-compose.yml
所在的文件夹,
cd /root/data/docker/qd
拉取最新的镜像,
docker-compose pull
重新更新当前镜像,
docker-compose up -d
卸载
进入 docker-compose 所在的文件夹,
cd /root/data/docker/qd
停止容器,此时不会删除映射到本地的数据,
docker-compose down
完全删除映射到本地的数据,
cd
rm -rf /root/data/docker/qd
rm -rf /root/data/docker/redis
反向代理
进入目录 /etc/caddy/sites
,创建并编辑 qd.amaranthinking.eu.org.conf
,
# Uncomment this in addition with the import admin_redir statement allow access to the admin interface only from local networks
# (admin_redir) {
# @admin {
# path /admin*
# not remote_ip private_ranges
# }
# redir @admin /
# }
qd.amaranthinking.eu.org {
log {
level INFO
output file /root/data/docker/qd/qd.log {
roll_size 10MB
roll_keep 10
}
}
# Uncomment this if you want to get a cert via ACME (Let's Encrypt or ZeroSSL).
# tls {$EMAIL}
# Or uncomment this if you're providing your own cert. You would also use this option
# if you're running behind Cloudflare.
# tls {$SSL_CERT_PATH} {$SSL_KEY_PATH}
# This setting may have compatibility issues with some browsers
# (e.g., attachment downloading on Firefox). Try disabling this
# if you encounter issues.
encode gzip
# Uncomment to improve security (WARNING: only use if you understand the implications!)
# If you want to use FIDO2 WebAuthn, set X-Frame-Options to "SAMEORIGIN" or the Browser will block those requests
header {
# Enable HTTP Strict Transport Security (HSTS)
Strict-Transport-Security "max-age=31536000;"
# Enable cross-site filter (XSS) and tell browser to block detected attacks
X-XSS-Protection "1; mode=block"
# Disallow the site to be rendered within a frame (clickjacking protection)
X-Frame-Options "SAMEORIGIN"
# Prevent search engines from indexing (optional)
X-Robots-Tag "none"
# Server name removing
-Server
}
# Uncomment to allow access to the admin interface only from local networks
# import admin_redir
# Proxy everything to Rocket
reverse_proxy 127.0.0.1:8000 {
# Send the true remote IP to Rocket, so that it can put this in the
# log, so that fail2ban can ban the correct IP.
header_up X-Real-IP {remote_host}
}
}
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭