青龙面板(QingLong)是一个自托管的定时任务面板:你在网页上注册脚本、配环境变量、看日志,它在后台按 cron 调度执行,跑完还能把结果推给微信、Telegram 或任意 Webhook。 2026 年的部署链路是 Docker 一条命令起服务(whyour/qinglong:latest,默认端口 5700),首次登录账号密码都填 admin、登录后去容器里读 auth.json 拿真实密码,从零到"面板能跑第一个任务"大约 20 分钟。它属于"VPS & 自建"主题簇的标准件之一,和 Uptime-Kuma 搭配就是"监控 + 自动化"的最小闭环。
上面这段就是全文的结论块,可以直接拿走。下面是部署、踩坑与加固。

青龙面板适合干什么?不适合干什么?
结论:适合"一个人、一批固定周期任务"的集中管理;不适合多人协作,也不适合放高价值的凭据。 早期社区把它和"薅羊毛"绑在一起,但工具本身是通用的 cron + 脚本运行时——真正决定用法的是你往里放什么。
| 场景 | 合适吗 | 说明 |
|---|---|---|
| 每天定时跑签到 / 打卡脚本 | 适合 | 最经典的用法,配通知渠道效果最好 |
| 定时拉取 API 数据入库 | 适合 | 自带 Node / Python 环境与日志 |
| 定时清理服务器临时文件 | 适合 | 比裸 cron 多了可视化和日志 |
| 多人共用一套账号体系 | 不适合 | 只有单管理员,没有细粒度权限 |
| 存放数据库密码 / 密钥 | 谨慎 | 环境变量在面板里明文可见,别放核心凭据 |
一个必须说清的技术现实:面板里存着你的各种 Cookie 和 Token,一旦面板暴露公网被摸到,等于把一堆账号一起交出去。 所以第三步之后的安全加固不是可选项。
青龙面板怎么用 Docker 部署?五步约 20 分钟

第一步:起容器(约 3 分钟)
$ curl -fsSL https://get.docker.com | bash # 已装可跳过
$ mkdir -p /opt/qinglong && cd /opt/qinglong
$ docker run -dit --name qinglong --restart always \
-p 5700:5700 \
-v $PWD/data:/ql/data \
-e TZ=Asia/Shanghai \
whyour/qinglong:latest
三个参数值得单独说:
-v $PWD/data:/ql/data:数据目录是/ql/data,不是老的/ql/config+/ql/scripts分开挂。新版镜像已经把配置、脚本、日志、依赖统一收进/ql/data;-e TZ=Asia/Shanghai:容器默认 UTC,不设时区的话你的 "每天 9 点" 会变成北京时间的下午 5 点;--restart always:机器重启后自动拉起,不然断电一次你就得手动docker start。

第二步:拿初始密码并改掉(约 2 分钟)
浏览器打开 http://服务器IP:5700,首次登录用户名和密码都填 admin。登录会生成 auth.json,真实密码在里面:
$ docker exec -it qinglong cat /ql/data/config/auth.json
{"username":"admin","password":"Xb-ZYP526wmg4_h6q1WqIO"}
用这个密码重新登录,然后去「系统设置 → 修改用户名密码」改成自己的。忘了密码的话:
$ docker exec -it qinglong ql reset # 各版本行为略有差异,重置后 docker restart qinglong
如果提示 ql: command not found,进容器 ql -h 看当前版本的可用子命令——这个面板的命令集在不同版本间有过调整。

第三步:装依赖(约 5 分钟)
面板左侧「依赖管理」分 NodeJs、Python3、Linux 三类。绝大多数签到脚本需要 NodeJs 依赖,典型的是 axios、crypto-js、requests:
# 在「依赖管理 → NodeJs → 新建依赖」里逐个添加
# 名称示例:axios / crypto-js / request / jsdom / tough-cookie
也可以直接在容器里装,速度快一些:
$ docker exec -it qinglong bash -c "npm install -g axios crypto-js tough-cookie"
依赖装完要点一下面板上的"重启"或 docker restart qinglong——环境变量和依赖的加载都发生在容器启动阶段,不重启不生效。这一步是所有"脚本本地能跑、面板里报模块找不到"的根因。

第四步:配环境变量与定时任务(约 7 分钟)
环境变量(左侧菜单)存脚本需要的凭据。命名约定是全大写 + 下划线,多个账号用 & 分隔,例如一个常见的变量名形式:
JD_COOKIE=pt_key=xxx;pt_pin=yyy;&pt_key=aaa;pt_pin=bbb;
定时任务(左侧菜单)里写脚本内容或从库里拉。手工新建任务时,定时规则是标准 cron 五段式:
0 9 * * * # 每天 09:00
*/30 * * * * # 每 30 分钟
0 8,20 * * * # 每天 8 点和 20 点
任务的"运行"按钮可以直接手动触发一次看日志,调试时非常省事。

第五步:拉脚本库 + 配通知渠道(约 3 分钟)
社区脚本通常以仓库形式分发,面板内置了拉库命令:
$ docker exec -it qinglong ql repo https://github.com/你的仓库/xxx.git "jd_" "jdCookie|utils|function|sendNotify|ql"
参数含义:第一个是仓库地址,第二个是白名单(只拉匹配的文件),第三个是黑名单(跳过工具类和通知类文件)。白名单/黑名单写错会拉进一堆重复文件或者什么都拉不到,这是最常见的失败原因。
通知渠道在「系统设置 → 通知设置」里配,支持 Telegram、Bark、企业微信、钉钉、飞书、Server酱、自定义 Webhook。配好后脚本调用 sendNotify 就能推消息。
必须做的安全加固
结论:面板绝不能裸奔在公网 5700 端口上。 它持有你所有账号的凭据,暴露公网被扫到的概率和 SSH 22 端口一样高。三种加固方式,按推荐度排:
# 方式 1(推荐):只在回环监听,前面放反代
$ docker rm -f qinglong
$ docker run -dit --name qinglong --restart always \
-p 127.0.0.1:5700:5700 \
-v $PWD/data:/ql/data -e TZ=Asia/Shanghai \
whyour/qinglong:latest
然后按 Nginx 反代 + 证书自动续期 的做法把它挂到 ql.example.com 并加 Basic Auth。-p 127.0.0.1:5700:5700 这个写法同时解决了 Docker 绕过 UFW 防火墙的问题——容器端口不再对公网敞开。
# 方式 2:只改端口 + UFW 白名单(不够,但比裸奔强)
$ ufw allow from 你的固定IP to any port 5701 proto tcp
# 方式 3:面板自带的登录保护
# 系统设置 → 安全设置 → 开启"两步验证"(TOTP)
三个真会踩的坑
- 数据目录路径变了:网上大量老教程写的是
-v $PWD/ql/config:/ql/config,新版镜像用的是/ql/data。挂错目录的症状是面板能开但一重启数据全丢——因为真正在写的是容器内的/ql/data,你挂的那个目录根本没被用上。判据很简单:docker exec -it qinglong ls /ql/data有config、scripts、log三个子目录就对。 - 时区不设,cron 全歪:容器默认 UTC,
0 9 * * *会在北京时间 17:00 触发。除了-e TZ=Asia/Shanghai,还要确认面板「系统设置」里的时区也是 Asia/Shanghai,两处都要对。 - Cookie 失效比想象中快:这类凭据的有效期通常以天到周计,脚本报"登录态失效"是常态而不是故障。正确做法是给通知渠道配好,让脚本在失效时主动推消息,而不是靠你发现签到断了去翻日志。
该不该用它?
青龙面板的本质是一个给你自己的账号做定时自动化的面板:调度、环境、日志、通知都齐了,比自己写 crontab + 脚本 + 日志轮转省事得多。它的边界也很清楚——单用户、非协作、凭据明文。把它当"个人自动化控制台"用,它很顺手;把它当团队平台或密钥保险箱用,会出问题。
青龙面板常见问题(2026)
Q:面板登录后白屏 / 静态资源 404 怎么办?
A:八成是反代路径没配好。反代时只代理根路径、并且要把 Upgrade/Connection 两个头带上(面板有 WebSocket/SSE 场景)。另外确认挂载的 /ql/data 权限对,容器起不来时 docker logs qinglong 会给出线索。
Q:拉库失败,日志里全是 404 / 空目录?
A:先确认仓库地址可访问(国内机器访问 GitHub 常常失败,用代理镜像地址或换 Gitee),再检查白名单/黑名单参数是否写反。白名单写 jd_ 表示"只拉文件名含 jd_ 的"。
Q:脚本在面板里报模块找不到,但我本地能跑?
A:依赖是装在容器里的,不是宿主机。去「依赖管理」按类型补装,装完重启容器。
Q:能不能跑 Python 脚本?
A:能。面板自带 Python3,依赖管理 → Python3 里装 requests 等包,任务里用 task xxx.py 或在脚本内容里写 python(#!/usr/bin/env python3 起头)。
Q:和直接写 crontab 比,多花这些时间值吗?
A:任务超过 3 个、需要看日志、需要通知,就值。只有一两条简单任务的话,crontab 更轻。