碎碎念
青龙面板(Qinglong Panel)是管理定时任务的神器,不仅能自动跑各种签到脚本(京东、B站、阿里云盘等),还能做数据监控。最近正好腾出手来,决定在我的 Linux 服务器上部署一套,顺便把消息推送配置好,实现“躺平式”自动化管理。
本以为只是个简单的 Docker 部署,没想到在配置 QQ 邮箱通知 时,结结实实地踩了两个坑。特此记录.
1. 什么是青龙面板?
简单来说,青龙面板就是一个支持 Python、JavaScript、Shell 等多语言的分布式定时任务管理平台。
它的核心功能就是“自动化”。对于我们普通用户,它最大的用处包括:
自动签到薅羊毛:JD 农场、淘宝淘金币、饿了么吃货豆等。
自动维护:云盘自动签到扩容、B 站自动刷经验升级。
信息聚合:监控商品价格、股市波动或天气变化,并推送到手机。
2. 部署过程
第一步:部署非常简单,Docker Compose (推荐,方便管理)
创建目录:
mkdir -p /opt/qinglong cd /opt/qinglong创建
docker-compose.yml文件:nano docker-compose.yml填入以下内容:
version: '3' services: qinglong: image: whyour/qinglong:latest container_name: qinglong restart: unless-stopped tty: true ports: - 5700:5700 volumes: - ./data:/ql/data启动:
docker compose up
第二步:配置 Systemd 服务文件
我们创建一个服务文件,告诉系统:“开机时帮我运行 docker compose up,关机时运行 docker compose down”。
创建文件:
Bash
sudo nano /etc/systemd/system/qinglong.service写入以下内容: (假设你的 docker-compose.yml 在
/opt/qinglong/目录下,如果不是请修改路径)Ini, TOML
[Unit] Description=Qinglong Panel (Docker Compose) # 等 Docker 服务启动后再启动这个 Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes # 指向你的工作目录 WorkingDirectory=/opt/qinglong # 启动命令:自动拉取最新镜像并后台启动 ExecStart=/usr/bin/docker compose up -d # 停止命令:优雅停止容器 ExecStop=/usr/bin/docker compose down # 发生错误不自动重启(避免网络问题导致无限重启死循环),由 Docker 自身接管 # 只要容器里写了 restart: unless-stopped,Docker 会自己负责维稳 [Install] WantedBy=multi-user.target保存退出:
Ctrl+O->Enter->Ctrl+X。
第三步:启动并设置开机自启
Bash
# 1. 重载系统服务
sudo systemctl daemon-reload
# 2. 设置开机自启
sudo systemctl enable qinglong
# 3. 立即启动服务 (这一步会开始拉取镜像,可能需要一点时间)
sudo systemctl start qinglong
# 4. 查看状态
sudo systemctl status qinglong第四步:nginx实现https访问
最后一步,为了能用我的域名优雅地访问,我在 Nginx 里加了一段反代配置,通过 HTTPS 访问,安全性拉满。
sudo vim /etc/nginx/sites-available/qinglong.conf内容为
server {
listen 5701 ssl;
server_name www.yanchang.cc;
ssl_certificate /etc/nginx/ssl/www.yanchang.pem;
ssl_certificate_key /etc/nginx/ssl/www.yanchang.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_buffer_size 4k;
# 设置为 0 表示“不限制大小”,或者设置为具体数值如 10240m (10GB)
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:5700; # 青龙服务的端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 关键配置:避免大文件/预览被掐掉
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
# 大文件超时设置
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
}
}启用配置
sudo ln -s /etc/nginx/sites-available/qinglong.conf /etc/nginx/sites-enabled/
sudo nginx -t # 检查配置有没有写错
sudo systemctl reload nginx放行端口
sudo ufw allow 57013.踩坑实录:
坑一:docker网络问题

yanchang@yanchang-Home-Server:/opt/qinglong$ docker compose up -d
WARN[0001] /opt/qinglong/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 1/1
✘ qinglong Error Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp ... 1.5s
Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: dial tcp 127.0.0.1:7890: connect: connection refused
或者说
yanchang@yanchang-Home-Server:/opt/qinglong$ docker compose up -d
WARN[0000] /opt/qinglong/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 1/1
✘ qinglong Error Get "https://registry-1.docker.io/v2/": net/http: request canceled ... 15.6s
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
解决方案
情况一:你其实没有在服务器上开代理(最常见)
如果你这台服务器上并没有运行 Clash/v2ray 等工具,或者你不想让 Docker 走代理,你需要把这个过期的代理配置删掉。
找到代理配置文件 Docker 的代理配置通常藏在 Systemd 的文件夹里。运行这行命令找出来:
grep -r "7890" /etc/systemd/system/通常会显示在
/etc/systemd/system/docker.service.d/http-proxy.conf或类似的文件里。删除它 假设找到的是上面那个路径(如果不是,请替换为你搜到的路径):
sudo rm -rf /etc/systemd/system/docker.service.d/http-proxy.conf # 或者直接把整个文件夹删了(如果里面没别的配置) sudo rm -rf /etc/systemd/system/docker.service.d/重启 Docker 这一步必须做,否则配置不生效。
sudo systemctl daemon-reload sudo systemctl restart docker再次尝试部署
docker compose up -d
情况二:你在国内,直连拉不动,必须配镜像源
删了代理后,因为众所周知的网络原因,你可能会遇到“拉取超时” (image pull backoff 或 timeout)。这时候你需要配置国内镜像源。
编辑 Docker 配置文件
sudo nano /etc/docker/daemon.json(如果文件不存在,nano 会自动创建一个空的)
写入可用的镜像源 目前很多国内源都挂了,推荐使用这就几个目前还坚挺的(或者你有阿里云加速器更好):
{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://huecker.io", "https://dockerhub.timeweb.cloud", "https://noohub.ru" ], "dns": ["223.5.5.5", "119.29.29.29", "1.1.1.1", "8.8.8.8"] }保存并重启
按
Ctrl+O保存 ->Enter->Ctrl+X退出。重启 Docker:
Bash
sudo systemctl daemon-reload sudo systemctl restart docker
再试一次
Bash
docker compose up -d

QQ 邮箱通知配置面板跑起来了,下一步就是配置 消息推送(Notification)。我选择了最通用的 Email 方式,想通过 QQ 邮箱把任务日志发给我自己。
坑二:Invalid login: 535 Login fail
一开始我直接填入了我的 QQ 号和QQ 登录密码,结果直接报错:
Invalid login: 535 Login fail. Account is abnormal, service is not open...
原因分析: 人间应该是邮件服务商应该是smtp.qq.com 或者类似的服务地址
解决方案:输入类似于下面的smtp.qq.com (错的)

坑三:connect ECONNREFUSED 127.0.0.1:587
解决了密码问题,我满怀信心地再次测试,结果终端爆出了更离谱的错误:
connect ECONNREFUSED 127.0.0.1:587
排查过程: 我很纳闷,明明我是要连 smtp.qq.com,为什么报错提示说我连的是 127.0.0.1(本地回环地址)?这意味着程序根本没去连腾讯的服务器,而是自己在连自己。
我检查了配置文件(或 Nodemailer 配置项):
User:
xxxx@qq.comPass:
(授权码)Service:
smtp.qq.com(我当时手动填了这个)
原因分析: 经过查阅 Nodemailer 的文档(青龙面板底层发邮件用的库),发现了一个配置逻辑陷阱:
如果配置项叫
service(服务名),它期望的是一个预设的关键词(比如QQ,Gmail,163)。一旦你填了
QQ,它会自动帮你把 Host 设为smtp.qq.com,端口设为465。但是,我在
service这一栏填了smtp.qq.com。程序无法识别这个“服务名”,于是它回退到了默认配置,即尝试连接localhost。
解决方案: 将配置项修改如下:
emailService (服务名): 修改为
QQ(或者qq),不要填smtp.qq.com。emailUser:
xxxx@qq.comemailPass:
(你的授权码)
或者,如果支持自定义 Host,应该清空 Service 字段,显式指定 Host 为 smtp.qq.com 且 Port 为 465 (Secure: true)。但直接用 Service 别名是最稳的。
4. 总结
修改配置后,点击测试,邮件秒收!

这次折腾让我再次意识到:
RTFM (Read The Manual):看清楚配置项是要求填“服务名(Service)”还是“主机名(Host)”,这两者在底层实现上完全不同。
安全意识:任何涉及第三方登录的地方,现在基本都需要 App Password 或授权码,直接用密码硬怼的时代已经过去了。
现在,我的青龙面板已经开始稳定运行,接下来准备去 GitHub 上找一些有趣的脚本(比如自动签到、博客数据库备份等)挂上去,让服务器真正为我“打工”。