news 2026/9/30 3:37:17

宝塔面板+Docker部署青龙面板:完整流程与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
宝塔面板+Docker部署青龙面板:完整流程与避坑指南

青龙面板这类定时任务管理工具,这两年玩的人特别多。我见过不少人第一次部署时,直接在服务器上装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个小时,排查问题时会很抓狂。在创建容器的高级选项里找到“环境变量”,添加 TZ=Asia/Shanghai。如果面板没有环境变量的入口,就用命令行方式跑,补上 -e TZ=Asia/Shanghai 参数。

资源限制那里建议把内存限制设置为1G或2G,取决于你的服务器配置。这样脚本失控时不会拖垮整台服务器。

如果没有图形化界面操作的习惯,或者喜欢更透明的方式,也可以在SSH里直接用命令行创建容器,效果是一模一样的。命令行完整示例:

docker run -dit \ --name qinglong \ --restart unless-stopped \ -m 1g \ -e TZ=Asia/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 TZ=Asia/Shanghai 环境变量
脚本执行报“找不到XX模块”依赖没装全到依赖管理里安装对应模块,注意选对依赖类型
容器数据全丢失目录映射未配置或映射路径错误删除容器,检查 /opt/ql 下是否有旧数据,重新映射正确目录

比较常见的第一个坑是端口问题。不少朋友把容器端口5700在宝塔里放行了,结果还是访问不了,因为云服务商的安全组是另一层防线,需要在服务器厂商的控制台也放行对应端口。两层防线都得通过,缺一不可。

第二个坑是目录映射到了宝塔默认的 /www/wwwroot 下面,这个目录宝塔默认是面向网站存放的,如果后面误操作清理网站文件,可能连同青龙面板的数据一起被清理。所以我坚持单独放在 /opt/ql 这个根目录下的独立路径。

第三个坑值得重点讲:脚本的调试。很多新手把别人的脚本拉进来后,第一天跑得好好的,第二天失败,第三天全乱套。第一天顺利只是表面,第二天失败大概率是因为脚本依赖的某个Cookie或者Token过期了。青龙面板只是按计划执行任务的调度器,任务的成败最终取决于脚本自身逻辑和外部环境。排查任务失败时,先到定时任务的日志里看错误原因,再对症处理,不要一上来就怀疑面板坏了。

还有一个小技巧,在“定时任务”模块里可以设置看任务的执行时间、耗时和下次运行时间。建议新脚本加入后,不要马上定成每天跑几次,先手动运行一次看效果,稳定了再设置定时规则。这个工作习惯能避免大量误报和资源浪费。

6. 一点经验之谈

用宝塔和Docker这套组合部署青龙,前后也实践了不少次。一开始我对Docker也是排斥的,觉得多一层东西多一层麻烦,后来用顺手之后彻底改观了。它最大的价值不是让你跑通一次,而是让你少操心。容器崩了删了重建,只要数据目录在,一切照旧。这个特点带来的安全感,是裸机部署完全给不了的。

最后再分享一个习惯:青龙面板部署完成后,我建议立刻设置一个安全入口。虽然用了高位端口,但端口扫描这事防不胜防。面板本身可能提供访问控制或登录二次验证的功能,能开的都开上。如果有条件,可以把青龙面板反向代理到自己的域名下,再套一层访问认证,安全性会好很多。

眼下这套流程已经足够稳定。等跑过一段时间后,你可能会想折腾更多扩展,比如接入自定义脚本、配置消息推送、开发更多自动化场景。到那时再来回看这次部署经历,你会发现Docker这个工具给你打下了非常省心的基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 3:36:41

MySQL调优最重要的两个参数:缓冲池与刷盘策略

1. 先说结论:为什么我把“最重要”框死在两个参数上前阵子帮朋友接手一台“已经调优过”的MySQL服务器。配置文件翻开来,洋洋洒洒改了三十多个参数,从max_connections到tmp_table_size,从query_cache_type到key_buffer_size&#…

作者头像 李华
网站建设 2026/9/30 3:36:09

IEEE 802.1Qca-2015解析:TSN显式路径控制、带宽预留与冗余保护

简介:IEEE 802.1Qca-2015 是 IEEE 802.1Q-2014 的修订版,全称即“局域网与城域网——桥与桥接网络 第24号修正案:路径控制与预留”,为以太网桥接网络增加显式路径控制、带宽预留与冗余保护能力,是 TSN 时间敏感网络协议…

作者头像 李华
网站建设 2026/9/30 3:36:08

TMDS编码算法解析:FPGA实现RGB转HDMI的关键技术

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/30 3:36:05

Python代码质量守门员:Pylint与Flake8静态检查实战指南

1. 为什么需要静态检查:两个工具帮我守住了代码底线1.1 先看一个让人头大的代码评审现场我参与过不少Python项目的评审,最怕的就是那种“变量乱起名、函数几百行、import堆在文件中间”的代码。改起来要命,review起来更是一肚子火。可问题在于…

作者头像 李华
网站建设 2026/9/30 3:35:25

G.709标准详解:OTN帧结构、开销字节与排障实战

简介:这是一份G.709标准中文版与OTN光传送网络技术的系统梳理文档,主要面向光传输领域工程师、通信专业学生以及网络运维人员,用于快速建立OTN分层结构、帧格式与映射机制等核心概念。内容以ITU-T G.872/G.709规范为主线,先后讲解…

作者头像 李华
网站建设 2026/9/30 3:35:14

二次上界引理:从Lipschitz光滑性到梯度下降收敛性

刚开始推梯度下降收敛性那几天,我一直觉得证明里的那个二次函数像是“凭空蹦出来”的。明明面前是一个任意凸光滑函数,怎么一到推导时,它就被一个带 (L/2) 系数的二次函数从上方压住,还要刚好压在切平面上方一点点?后来…

作者头像 李华