前言

青龙面板(QingLong)是一个支持Python3、JavaScript、Shell、TypeScript等多种脚本语言的定时任务管理面板。它提供了可视化的Web界面来管理Cron定时任务,支持脚本管理、环境变量管理、日志查看、通知推送等功能,是目前最流行的自托管定时任务管理工具之一。本文教你用Docker在VPS上快速搭建青龙面板。

一、青龙面板功能简介

  • 可视化Web管理界面
  • 支持Python3、JavaScript/TypeScript、Shell脚本
  • 支持Cron表达式定时执行
  • 环境变量管理(支持分组和备注)
  • 依赖管理(自动安装Python/Node.js依赖)
  • 任务日志查看和搜索
  • 多种通知渠道(Telegram、邮件、钉钉、Bark、PushPlus等)
  • 支持多用户和权限管理
  • 支持脚本仓库订阅和自动更新
  • 内置任务市场

二、安装青龙面板

Docker Compose安装(推荐)

mkdir -p /opt/qinglong
cd /opt/qinglong

创建 docker-compose.yml

cat > docker-compose.yml << 'EOF'
version: "3.8"

services:
  qinglong:
    image: whyour/qinglong:latest
    container_name: qinglong
    restart: always
    ports:
      - "5700:5700"
    volumes:
      - ./data:/ql/data
    environment:
      - TZ=Asia/Shanghai
EOF

启动:

docker compose up -d

Docker命令安装

docker run -d \
  --restart=always \
  -p 5700:5700 \
  -v /opt/qinglong/data:/ql/data \
  -e TZ=Asia/Shanghai \
  --name qinglong \
  whyour/qinglong:latest

首次访问

等待1-2分钟,访问 http://你的VPS_IP:5700

  1. 首次访问会进入初始化向导
  2. 设置通知方式(可跳过)
  3. 创建管理员账号和密码
  4. 登录面板

三、基本使用

添加定时任务

  1. 进入 定时任务 页面
  2. 点击 新建任务
  3. 填写配置:
配置项说明示例
名称任务名称每日签到
命令要执行的脚本命令task test.js
定时规则Cron表达式0 9 * * *(每天9点)
命令目录脚本所在目录/ql/scripts

Cron表达式常用示例

Cron表达式含义
0 9 * * *每天9:00执行
0 9,21 * * *每天9:00和21:00执行
*/30 * * * *每30分钟执行一次
0 0 * * 1每周一0:00执行
30 8 * * 1-5工作日8:30执行
0 0 1 * *每月1号0:00执行

环境变量管理

环境变量用于存储脚本运行时需要的配置信息(如Cookie、Token等):

  1. 进入 环境变量 页面
  2. 点击 新建变量
  3. 填写变量名、变量值和备注
  4. 支持分组管理,方便多账号管理

环境变量在脚本中通过 process.env.变量名(Node.js)或 os.environ['变量名'](Python)读取。

依赖管理

如果脚本需要第三方库,需要先安装依赖:

  1. 进入 依赖管理 页面
  2. 选择类型(Python3/Node.js/Linux)
  3. 添加依赖名称,如:
    • Python3:requestspycryptodome
    • Node.js:axioscrypto-js

也可以在任务命令中直接安装:

pip3 install requests && task my_script.py

四、订阅脚本仓库

青龙面板支持订阅Git脚本仓库,自动拉取和更新脚本。

添加订阅

  1. 进入 订阅管理 页面
  2. 点击 新建订阅
  3. 填写配置:
配置项说明示例
名称订阅名称常用脚本合集
类型选择定时订阅定时订阅
链接Git仓库地址https://github.com/user/repo.git
定时规则自动拉取间隔0 0 * * *(每天0点更新)
目标目录脚本存放目录repo_name
白名单只拉取匹配的文件(正则).*\.js.*\.py

订阅后脚本会自动拉取到指定目录,可以在定时任务中通过 task scripts/xxx.js 来执行。

五、配置通知推送

任务执行结果可以通过通知推送到手机或即时通讯工具。

进入通知配置

管理 > 系统设置 > 通知

常用通知渠道

Telegram Bot通知

  1. 在Telegram搜索 @BotFather,创建Bot获取Token
  2. 搜索 @userinfobot 获取你的Chat ID
  3. 在青龙面板中选择Telegram通知
  4. 填入Bot Token和Chat ID

Bark通知(iOS推送)

  1. 在App Store下载Bark应用
  2. 打开Bark获取推送地址
  3. 在青龙面板中选择Bark通知
  4. 填入Bark推送地址

PushPlus通知(微信推送)

  1. 访问 https://www.pushplus.plus 注册
  2. 获取Token
  3. 在青龙面板中选择PushPlus通知
  4. 填入Token

钉钉/企业微信

按照面板提示填入对应的Webhook地址即可。

配置完成后点击 测试 验证通知是否正常。

六、配置Nginx反向代理

server {
    listen 80;
    server_name ql.yourdomain.com;

    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;
        # WebSocket支持(青龙面板需要)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

申请SSL证书:

sudo certbot --nginx -d ql.yourdomain.com

建议为面板设置访问密码保护,或使用Cloudflare Tunnel配合Access策略保护。

七、常用脚本示例

测试脚本

脚本管理 中新建一个 test.js

const notify = require('./sendNotify');

console.log('当前时间:', new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' }));
console.log('青龙面板运行正常!');

// 发送通知
notify.sendNotify('测试通知', '青龙面板运行正常,时间: ' + new Date().toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' }));

Python测试脚本

新建 test.py

import os
import datetime

print(f"当前时间: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print("青龙面板Python脚本运行正常!")

八、更新与备份

更新青龙面板

cd /opt/qinglong
docker compose pull
docker compose up -d

备份数据

# 停止服务后备份
cd /opt/qinglong
docker compose stop
tar -czf qinglong-backup-$(date +%Y%m%d).tar.gz data/
docker compose start

九、常见问题

任务不执行怎么办?

  1. 检查Cron表达式是否正确(青龙面板使用6位Cron,包含秒)
  2. 检查脚本依赖是否已安装
  3. 查看任务日志排查错误
  4. 确认面板时间是否正确(应为北京时间)

脚本依赖安装失败?

# 进入容器手动安装
docker exec -it qinglong bash

# Python依赖
pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

# Node.js依赖
cd /ql/scripts && npm install axios

如何限制面板访问?

  1. 修改默认端口(5700)为其他端口
  2. 配置Nginx反代+Basic Auth密码保护
  3. 使用Cloudflare Tunnel + Access策略
  4. 配置防火墙只允许特定IP访问

面板运行占用资源大吗?

青龙面板本身很轻量,空闲时占用约100MB内存。执行脚本时会根据脚本复杂度增加。1核1G的VPS完全够用。

总结

青龙面板是VPS上管理定时任务的最佳工具,可视化界面让Cron任务管理变得简单直观。配合通知推送功能,可以实现各种自动化操作。搭配一台便宜VPS,就能拥有一个功能强大的自动化任务管理平台。