青龙面板与宝塔面板的Docker部署实战

青龙面板与宝塔面板的Docker部署实战
1. 青龙面板与宝塔面板的黄金组合青龙面板作为一款开源的定时任务管理工具在爬虫、自动化脚本等领域广受欢迎。而宝塔面板则是国内服务器运维人员最熟悉的WEB管理工具之一。将二者结合使用既能享受宝塔的便捷管理又能发挥青龙的强大调度能力。我最近在部署一个电商价格监控系统时就采用了这套方案。相比传统的手动安装方式使用Docker部署青龙面板不仅隔离性好还能实现快速迁移和版本切换。下面就把我的完整安装过程记录下来包括几个容易踩坑的关键点。2. 环境准备与基础配置2.1 服务器基础环境要求建议使用CentOS 7.6或Ubuntu 18.04系统配置至少1核CPU、2GB内存。实测在阿里云轻量应用服务器2核4G上运行非常流畅。内存低于1GB时容器容易因内存不足被系统kill。重要提示如果之前安装过旧版Docker务必先执行卸载命令yum remove docker*或apt-get remove docker*避免版本冲突。2.2 宝塔面板的安装与优化通过SSH连接服务器后执行对应系统的安装命令# CentOS yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh # Ubuntu wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh sudo bash install.sh安装完成后建议立即进行以下安全设置修改默认8888端口为自定义端口设置复杂的面板用户名和密码开启BasicAuth认证配置IP访问限制仅允许管理IP访问3. Docker环境部署详解3.1 通过宝塔安装Docker在宝塔面板的软件商店搜索Docker管理器点击安装。相比命令行安装这种方式会自动配置开机启动和服务管理。安装完成后需要检查docker -v # 确认版本号≥20.10.7 docker-compose -v # 确认版本号≥1.29.23.2 配置Docker镜像加速国内服务器建议配置镜像加速在宝塔的Docker管理器设置中添加https://registry.cn-hangzhou.aliyuncs.com https://docker.mirrors.ustc.edu.cn对于企业级应用还可以配置私有仓库docker login --usernameyourname registry.cn-hangzhou.aliyuncs.com4. 青龙面板的Docker部署4.1 创建专用数据目录建议将数据目录放在非系统分区mkdir -p /data/qinglong cd /data/qinglong目录结构规划/data/qinglong ├── config # 配置文件 ├── log # 日志文件 ├── scripts # 脚本目录 └── db # 数据库文件4.2 编写docker-compose.yml创建配置文件version: 3 services: qinglong: image: whyour/qinglong:latest container_name: qinglong restart: unless-stopped ports: - 5700:5700 volumes: - ./config:/ql/config - ./log:/ql/log - ./scripts:/ql/scripts - ./db:/ql/db environment: - ENABLE_HANGUPtrue - ENABLE_WEB_PANELtrue logging: driver: json-file options: max-size: 10m max-file: 3关键参数说明ENABLE_HANGUP: 允许挂起任务max-size: 限制日志大小防止磁盘爆满4.3 启动容器与服务执行部署命令docker-compose up -d检查运行状态docker ps -a | grep qinglong正常应该看到STATUS为Up。如果出现异常可以通过docker logs qinglong查看日志。5. 青龙面板的初始化配置5.1 首次访问设置通过http://服务器IP:5700访问面板首次需要设置管理员账号配置通知方式推荐Telegram机器人选择皮肤主题5.2 关键安全设置在系统设置中务必配置修改默认访问路径如/admin开启两步验证设置IP白名单配置自动备份到OSS或七牛云5.3 依赖管理根据脚本需求安装Node.js、Python等依赖# 进入容器内部 docker exec -it qinglong bash # 安装常用依赖 pnpm install -g typescript ts-node pip3 install requests bs46. 常见问题排查指南6.1 端口冲突问题如果5700端口被占用可以修改docker-compose.yml中的端口映射查找占用进程netstat -tunlp | grep 5700或者直接使用其他端口如58006.2 容器启动失败典型错误及解决方案port already allocated端口被占用no space left on device磁盘空间不足permission deniedSELinux导致可临时关闭setenforce 06.3 定时任务不执行检查步骤查看容器时间docker exec qinglong date确认时区设置应使用Asia/Shanghai检查crontab日志docker logs qinglong | grep cron7. 高级配置与优化技巧7.1 资源限制配置在docker-compose.yml中添加资源限制deploy: resources: limits: cpus: 1 memory: 1G reservations: memory: 512M7.2 数据库备份方案创建每日自动备份脚本#!/bin/bash BACKUP_DIR/data/qinglong_backup docker exec qinglong sh -c sqlite3 /ql/db/qinglong.db .backup /ql/db/backup.db tar -czvf $BACKUP_DIR/ql_$(date %Y%m%d).tar.gz /data/qinglong/db/backup.db find $BACKUP_DIR -type f -mtime 7 -delete然后添加到青龙面板的定时任务中每天凌晨3点执行。7.3 多实例部署对于大型应用可以通过修改端口号和数据目录部署多个实例version: 3 services: qinglong_1: image: whyour/qinglong:latest ports: - 5701:5700 volumes: - ./qinglong_1:/ql qinglong_2: image: whyour/qinglong:latest ports: - 5702:5700 volumes: - ./qinglong_2:/ql8. 实际应用案例分享8.1 电商价格监控系统配置京东商品价格监控的完整流程在脚本管理添加京东价格监控脚本配置商品SKU和预期价格设置每小时执行一次的定时任务配置价格低于阈值时的微信通知8.2 自动签到系统以哔哩哔哩每日签为例// 脚本内容示例 const axios require(axios); const notify require(./sendNotify); (async () { try { const res await axios.get(https://api.live.bilibili.com/sign/doSign); if(res.data.code 0) { notify.sendNotify(B站签到成功, res.data.message); } } catch (error) { notify.sendNotify(B站签到失败, error.message); } })();9. 维护与升级策略9.1 日常维护建议每周检查容器日志docker logs --since 7d qinglong每月清理无用镜像docker image prune -a每季度更新基础镜像版本9.2 版本升级步骤安全升级流程停止当前容器docker-compose down备份数据目录tar -czvf ql_backup.tar.gz /data/qinglong拉取新镜像docker pull whyour/qinglong:latest重新启动docker-compose up -d9.3 灾难恢复方案当服务器崩溃时恢复步骤在新服务器安装相同环境解压备份文件到/data/qinglong启动容器docker-compose up -d验证数据完整性这套部署方案在我管理的十几台服务器上运行稳定特别是在618、双11等大促期间能够稳定处理数万个定时任务。最关键的是做好资源监控和日志轮转避免磁盘被日志文件占满。对于高负载场景建议将数据库单独挂载到高性能SSD上。