
青龙面板这类定时任务管理工具这两年玩的人特别多。我见过不少人第一次部署时直接在服务器上装Node环境、clone代码、手动改端口、用screen挂着进程一套操作下来依赖版本冲突、进程守护、开机自启这些问题轮番折腾最后还得返工。后来改用宝塔面板加Docker这套组合部署、升级、备份、迁移都变得很直观踩坑概率直线下降。这篇文章就把我实操过的完整流程整理出来。从环境准备、宝塔面板安装Docker到拉取青龙镜像、创建容器、初始化面板再到日常更新备份和常见问题排查全程使用最新稳定版本适配绝大多数新手场景。1. 方案选型与部署前的准备先聊两句为什么推荐用Docker跑青龙面板而不是直接在宿主机上跑Node服务。青龙面板本质是一个定时任务管理控制台调度各种脚本任务脚本依赖的Node版本、第三方库非常多。直接在宿主机上跑今天装一个依赖升级一下系统Python明天可能就影响到别的进程环境说崩就崩。Docker容器把青龙面板和宿主机隔离在一个独立空间里宿主机上装什么都不影响容器内部环境容器坏了删掉重建就行几秒钟恢复。升级面板时只需要拉新镜像重新创建容器这是裸机部署做不到的。服务器环境方面我建议使用2核4G以上配置的云服务器或VPS。青龙面板本身占用资源不算夸张空载时几百MB内存但脚本跑起来尤其是并发任务多时内存会明显上涨。如果你只有1G内存的小机器建议后面给容器设置内存上限防止面板拖垮整台服务器。系统方面宝塔面板官方支持CentOS、Ubuntu、Debian等主流Linux发行版。这里有个细节要提醒如果你用的是CentOS 7系统自带的Yum源可能比较旧安装Docker时建议先升级一下系统包或者直接用宝塔软件商店里的Docker管理器安装它会自动处理大部分兼容性问题。如果服务器是ARM架构比如某些轻量服务器或开发板理论上也支持但部分镜像的兼容性会有差异建议先搜索确认一下当前青龙官方镜像对你架构的支持情况避免装完启动报错。宝塔面板版本建议用官网最新的稳定版不要用网上流传的所谓“开心版”“破解版”控制面板这类工具一旦被植入后门后果无法预估。到宝塔官网复制Linux面板的一键安装脚本在服务器上执行整个安装过程大概几分钟路径建议保持默认的 /www/wwwroot方便后续数据管理。1.1 为什么Docker版比裸机部署更适合新手很多新手第一次听到Docker会觉得又是一个新东西还没开始就怵了。其实在这个场景里你不需要理解容器的底层原理把它想象成一个“便携式软件箱”就行。每个部署了青龙的服务器环境千差万别有的人用CentOS有的人用Ubuntu有的服务器环境乱得一团糟。Docker把标准化的运行环境直接打包装好你在哪里运行它它都是同一套环境天然规避了“我这台机器的环境跟你不一样”的问题。另外就是清理成本极低。裸机方式部署青龙卸载时要删文件、清进程、移残留稍不留神就留下垃圾。Docker方式想卸载把容器和镜像删掉再删除映射的数据目录宿主机上没有遗留痕迹。还有一个常常被忽略的好处Docker容器的资源控制能力。在创建容器时可以设置CPU权重和内存上限比如限制青龙容器最多使用1G内存即便某一天脚本写了死循环疯狂消耗内存容器的内存上限卡在那里宿主机依然稳如泰山。这在裸机部署下需要借助systemd或supervisor做很多额外配置才能实现。2. 安装宝塔面板与Docker环境的两个关键步骤如果服务器目前是裸系统第一步就是装宝塔面板。SSH连上服务器到宝塔官网找到对应系统的安装命令复制执行。我习惯用Xshell或FinalShell这类终端工具连接后执行安装命令整个过程会自动进行等它输出面板地址和账号密码就完成了。安装完宝塔面板后登录面板后台左侧导航栏找到“软件商店”在搜索框输入“Docker”搜索结果会出现“Docker管理器”。点击安装选择最新版本确认即可。宝塔的Docker管理器本质上是对Docker命令行的一个图形化封装底层还是真正的Docker引擎安装完成后你的服务器就有了完整的Docker环境。装完后到服务器终端执行 docker -v 验证一下。如果提示命令不存在大概率是PATH变量没有刷新重新连接一下SSH或source一下配置文件即可。如果提示权限错误说明当前用户没有加入docker用户组可以用 sudo usermod -aG docker $(whoami) 把当前用户加入docker组再重新登录。2.1 镜像加速器的配置解决拉取慢的问题国内的服务器拉取Docker Hub的镜像经常遇到超时或者极慢的情况这种问题最直接解决办法就是给Docker配置镜像加速器。宝塔的Docker管理器在“设置”或“基础设置”里通常能找到镜像加速地址配置项填入可用的加速地址保存即可。如果宝塔面板里没有这个配置入口我们可以在 /etc/docker/daemon.json 里手动配置。这个文件是Docker守护进程的配置文件追加 registry-mirrors 参数然后执行 systemctl daemon-reload systemctl restart docker 重启Docker服务。配置后拉取青龙镜像的速度会有明显改善。加速地址怎么选网上有很多公共加速地址时效性不一建议多准备几个哪个能用用哪个。配置完之后用 docker info 命令查看 Registry Mirrors 字段确认配置是否生效。这个字段下面会列出你填的所有加速地址看到就说明配置成功了。2.2 目录规划建议让数据管理一目了然容器删除重来是家常便饭但里面的数据绝不能丢。青龙面板的数据分成几类配置文件、数据库文件、脚本文件、日志文件。这些都要通过目录映射保存到宿主机上。我在服务器上习惯建一个 /opt/ql 的目录专门放青龙面板的所有数据。在这个目录下创建 config、db、log、scripts、jbot 这几个子目录分别存放配置文件、数据库、日志、脚本和机器人插件。提醒一下目录权限尽量保持默认Docker容器在映射时会以root身份访问权限问题在大数情况下不会出现。目录映射这个理念新手第一次接触可能有点绕我用一个直白的说法来解释容器可以理解为一台虚拟电脑里面的文件放在“虚拟硬盘”里一旦容器删除虚拟硬盘也跟着没了。目录映射的作用就是把这台虚拟电脑里的特定文件夹指向宿主机上真实的文件夹。这样即使虚拟电脑删了文件夹里的东西还在原处。下次再创建容器把这个目录再次映射进去数据全部回来了。3. 使用宝塔面板Docker管理器创建青龙容器青龙面板的官方镜像是 whyour/qinglong。到这里需要特别注意网上存在一些第三方打包的镜像甚至在镜像里捆绑额外脚本的版本不明、来源不明我建议一律不要碰。只使用官方镜像版本号也建议锁定具体版本而不是latest。latest虽然代表最新但青龙面板迭代较快有时候latest会带上前一天刚发布的新功能可能存在不稳定风险。当前时间点官方稳定版本是2.x系列。拉取镜像的命令很简单docker pull whyour/qinglong:2.17.0填你自己想用的具体版本号或者不带版本号拉latest然后通过docker tags查看有哪些版本。不过上面已经说过生产环境建议锁定某个稳定版本。拉取完成后来到宝塔面板的Docker管理器找到“容器”列表点击“创建容器”。图形化界面需要填写的参数有几个关键项。镜像名填 whyour/qinglong容器名自己起一个比如 qinglong。然后是端口映射这一步非常关键。青龙面板的默认端口是5700但服务器上越是默认端口越容易被全网扫描每天都有大量机器人扫IP的5700端口一旦发现页面就会尝试撞库或扫描漏洞。建议把宿主机的某个高位端口映射到容器的5700端口比如映射为 5800 或者 18200 这种不常用的端口。端口映射的填写格式通常有“容器端口”和“宿主机端口”两个输入框记住方向外部访问用宿主机端口容器内部监听的是5700不变把宿主机端口填成高位端口就行。目的就是为了让外部访问 http://服务器IP:高位端口 时请求能转发到容器内部的5700端口的青龙面板上。然后设置目录映射。源路径就是宿主机上的数据目录目标路径填容器内部的青龙数据目录。对应关系如下表所示作用宿主机路径容器内路径配置文件/opt/ql/config/ql/config数据库文件/opt/ql/db/ql/db脚本代码/opt/ql/scripts/ql/scripts运行日志/opt/ql/log/ql/log机器人插件/opt/ql/jbot/ql/jbot上面这些目录不是全部必须但建议至少把db和config映射出来这两个目录记录着面板账号密码、任务配置和数据库信息不备份的话容器一删数据全部丢失。还有一个建议加的参数时区。默认情况下容器使用的是UTC时间青龙面板里的任务日志时间会比北京时间慢8个小时排查问题时会很抓狂。在创建容器的高级选项里找到“环境变量”添加 TZAsia/Shanghai。如果面板没有环境变量的入口就用命令行方式跑补上 -e TZAsia/Shanghai 参数。资源限制那里建议把内存限制设置为1G或2G取决于你的服务器配置。这样脚本失控时不会拖垮整台服务器。如果没有图形化界面操作的习惯或者喜欢更透明的方式也可以在SSH里直接用命令行创建容器效果是一模一样的。命令行完整示例docker run -dit \ --name qinglong \ --restart unless-stopped \ -m 1g \ -e TZAsia/Shanghai \ -p 18200:5700 \ -v /opt/ql/config:/ql/config \ -v /opt/ql/log:/ql/log \ -v /opt/ql/db:/ql/db \ -v /opt/ql/scripts:/ql/scripts \ -v /opt/ql/jbot:/ql/jbot \ whyour/qinglong:latest这里解释一下各个参数的含义。-dit 是后台模式运行并开启交互终端。-m 1g 限制内存最多1G。--restart unless-stopped 表示Docker服务重启时容器自动跟着启动除非当时被手动停止。这个参数非常重要服务器断电重启后可以保证青龙面板自动恢复运行。创建完成后在容器列表能看到 qinglong 的状态为 Up。如果状态显示 Exited 或反复重启先查看容器日志这是最直接的排查入口。3.1 首次访问面板与账号初始化浏览器访问 http://服务器IP:18200 就能看到青龙面板的初始化页面。如果是第一次访问页面会引导设置后台管理员的用户名和密码。这个管理员账号就是面板的最高权限密码建议设置成强密码和服务器SSH密码区分开。初始化完成后登录面板你会看到左侧菜单有“仪表盘”、“脚本管理”、“定时任务”、“依赖管理”、“配置文件”等模块。到这里青龙面板本身已经部署成功了。需要说明的是青龙面板不附带任何脚本。网上所谓的“青龙一键配置脚本”、“全自动跑任务”基本都是第三方脚本使用时要注意甄别。面板本身是干净的任务调度平台你往里面加什么任务它就按定时规则执行什么任务脚本来源需要自己把控。3.2 依赖安装这一步别偷懒青龙面板承载的脚本五花八门但绝大多数脚本都依赖一批公共库。面板自带的“依赖管理”功能就是用来安装脚本运行所需依赖的一般分为Node.js依赖、Python依赖和Linux依赖。Node.js依赖中常用的包包括 axios、crypto-js、moment、dotenv、png-js、md5、jsdom、tough-cookie、json5、ws 等。Python依赖中常用的包包括 requests、pycryptodome、pyDes、rsa、bs4、urllib3 等。Linux依赖中常用的工具包括 curl、wget、bash、busybox、dos2unix 等。我的习惯是把这些常用依赖一次性全部安装即使后面换脚本也不需要频繁补充。在依赖管理模块中先点右上角的“添加依赖”选择类型然后手动输入包名需要一行一个。如果想批量安装可以把常用依赖整理成一个列表一次粘进去。依赖安装过程中会遇到一个经典问题某些Node.js包在安装时需要C编译环境如果容器内没有编译器直接报错。解决办法是先去依赖管理里添加Linux依赖装 gcc、g、make、python3-dev 这类编译工具链再回头装Node依赖成功率会高很多。还有个细节青龙面板的依赖管理是往容器里装包容器运行环境是Linux所以Python依赖和Node依赖千万不要一股脑混着装务必在对应分类下分别添加。4. 容器运维的三件日常事更新、备份与监控青龙面板部署完成只是第一步长期稳定运行才是目标。先说更新。青龙官方会不定期发布新版本修复bug以及新增功能。更新的操作流程并不复杂先到Docker管理器停止旧容器然后拉取新镜像最后用相同的参数重新创建容器。因为数据都映射在宿主机 /opt/ql 目录容器重建不会影响数据。如果你偏好命令行也可以执行 docker pull whyour/qinglong:目标版本 拉新镜像然后 docker rm qinglong 删除旧容器数据还在因为映射到了宿主机再用 docker run 相同参数重建。这里要再强调一次千万别忘了加 --restart unless-stopped 和 -p 端口映射这些参数很多人重建时漏参数结果面板进不去了。备份的事也重要。青龙面板的脚本、任务配置、数据库都在 /opt/ql 这个目录里最朴素的备份方案就是把这个目录打包下载。在宝塔面板的文件管理器里找到 /opt/ql右键压缩然后下载到本地或者备份到对象存储。也可以用宝塔的计划任务设置定时备份每天凌晨自动压缩一次并保留最近7天备份这样即使哪天真出问题也能轻松恢复到前一天的状态。监控方面宝塔面板自带资源监控可以看到CPU和内存的实时曲线。青龙容器通常吃内存大户是运行中的定时任务正常情况下面板占用内存可能在500MB以内如果发现长期内存居高不下或频繁出现容器被杀掉的情况多半是某个脚本的任务在疯狂刷数据或死循环可以去任务日志里排查。查看容器日志有两种途径宝塔Docker管理器的容器列表点击“日志”即可查看输出或者用命令行 docker logs --tail 200 qinglong 查看最近200行。日志里如果不断出现无法连接数据库、找不到文件这类报错八成是目录映射路径不对或容器内数据目录权限缺失。5. 常见问题排查与避坑实录部署青龙面板的过程中大部分人遇到的问题其实很集中。我把常遇到的几类情况整理成一张速查表方便大家对照排查。现象可能原因处理方法浏览器无法访问面板服务器安全组未放行端口宝塔安全规则未放行端口检查云服务商安全组入方向规则放行宿主机高位端口检查宝塔“安全”菜单放行端口容器状态 Exited (0)无重启策略或曾经手动停止重建容器时加 --restart unless-stopped 参数容器反复重启目录映射错误或环境变量错误查看容器日志定位具体报错检查 /opt/ql 下子目录是否存在拉取镜像超时Docker Hub连接不稳定配置镜像加速器换可用加速地址后重试面板内依赖安装失败缺编译工具链或依赖源问题先安装编译工具链再装依赖或进入容器手动执行 pip / npm 第一条命令定时任务不执行容器时区不对创建容器或重建时加 -e TZAsia/Shanghai 环境变量脚本执行报“找不到XX模块”依赖没装全到依赖管理里安装对应模块注意选对依赖类型容器数据全丢失目录映射未配置或映射路径错误删除容器检查 /opt/ql 下是否有旧数据重新映射正确目录比较常见的第一个坑是端口问题。不少朋友把容器端口5700在宝塔里放行了结果还是访问不了因为云服务商的安全组是另一层防线需要在服务器厂商的控制台也放行对应端口。两层防线都得通过缺一不可。第二个坑是目录映射到了宝塔默认的 /www/wwwroot 下面这个目录宝塔默认是面向网站存放的如果后面误操作清理网站文件可能连同青龙面板的数据一起被清理。所以我坚持单独放在 /opt/ql 这个根目录下的独立路径。第三个坑值得重点讲脚本的调试。很多新手把别人的脚本拉进来后第一天跑得好好的第二天失败第三天全乱套。第一天顺利只是表面第二天失败大概率是因为脚本依赖的某个Cookie或者Token过期了。青龙面板只是按计划执行任务的调度器任务的成败最终取决于脚本自身逻辑和外部环境。排查任务失败时先到定时任务的日志里看错误原因再对症处理不要一上来就怀疑面板坏了。还有一个小技巧在“定时任务”模块里可以设置看任务的执行时间、耗时和下次运行时间。建议新脚本加入后不要马上定成每天跑几次先手动运行一次看效果稳定了再设置定时规则。这个工作习惯能避免大量误报和资源浪费。6. 一点经验之谈用宝塔和Docker这套组合部署青龙前后也实践了不少次。一开始我对Docker也是排斥的觉得多一层东西多一层麻烦后来用顺手之后彻底改观了。它最大的价值不是让你跑通一次而是让你少操心。容器崩了删了重建只要数据目录在一切照旧。这个特点带来的安全感是裸机部署完全给不了的。最后再分享一个习惯青龙面板部署完成后我建议立刻设置一个安全入口。虽然用了高位端口但端口扫描这事防不胜防。面板本身可能提供访问控制或登录二次验证的功能能开的都开上。如果有条件可以把青龙面板反向代理到自己的域名下再套一层访问认证安全性会好很多。眼下这套流程已经足够稳定。等跑过一段时间后你可能会想折腾更多扩展比如接入自定义脚本、配置消息推送、开发更多自动化场景。到那时再来回看这次部署经历你会发现Docker这个工具给你打下了非常省心的基础。