Featured image of post 道鲤鱼音乐封面更换

道鲤鱼音乐封面更换

记录在 CentOS 7 上为道鲤鱼音乐服务器批量更换无封面歌曲的完整过程

字数: 1627

在 CentOS 7 上部署「道理鱼音乐服务器」并解决封面统一难题实录

前言

最近在京东云的一台 CentOS 7 服务器上部署了「道理鱼音乐服务器」(daoliyu-music)。整个过程踩了不少坑:从 FFmpeg 缺库、数据库迁移,到批量修改歌曲封面。这篇文章记录了完整的排查与解决过程,希望能帮到遇到类似问题的朋友。

一、环境说明

  • 系统:CentOS 7
  • 云服务:京东云
  • 数据库:MySQL 8.0 + 后来切换的 SQLite(最终使用 MySQL)
  • 音乐目录:/usr/local/music_player/music
  • 服务端口:42120

二、安装与基础配置

1. 安装 RPM 包

下载 RPM 包后,使用 yum localinstall 安装:

yum localinstall ./daoliyu-music-server-1.0.3-0001-1.x86_64.rpm

安装成功后,会自动创建 systemd 服务 daoliyu-music.service。

2. 配置防火墙

firewall-cmd --zone=public --add-port=42120/tcp --permanent
firewall-cmd --reload

同时别忘了在京东云控制台的安全组里放行 42120 端口。

3. 启动服务

systemctl start daoliyu-music
systemctl enable daoliyu-music
systemctl status daoliyu-music

三、遇到的第一个大坑:FFmpeg 缺库

启动后播放音乐时报错:“兼容播放没有加载到可播放的音频”。检查发现自带的 FFmpeg 无法运行:

/opt/daoliyu-music/thirdparty/ffmpeg/bin/ffmpeg -version
# 报错:error while loading shared libraries: libmvec.so.1

原因是 CentOS 7 的 GLIBC 版本太旧(2.17),而自带的 FFmpeg 需要更高版本。

解决方案:使用静态编译的 FFmpeg

cd /usr/local
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xvf ffmpeg-release-amd64-static.tar.xz
mv ffmpeg-*-static /usr/local/ffmpeg

然后直接覆盖软件自带的旧版本:

cp /usr/local/ffmpeg/ffmpeg /opt/daoliyu-music/thirdparty/ffmpeg/bin/ffmpeg
cp /usr/local/ffmpeg/ffprobe /opt/daoliyu-music/thirdparty/ffmpeg/bin/ffprobe
chmod +x /opt/daoliyu-music/thirdparty/ffmpeg/bin/ffmpeg
chmod +x /opt/daoliyu-music/thirdparty/ffmpeg/bin/ffprobe

重启服务后,音频播放恢复正常。

四、数据库迁移:从 SQLite 到 MySQL

原本软件默认使用 SQLite,但为了更方便地批量修改封面,决定切换到 MySQL。

1. 创建数据库和用户

CREATE DATABASE daoliyu DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'tk'@'%' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON *.* TO 'tk'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

2. 修改配置文件

vi /etc/daoliyu-music/server.env

修改为:

DLY_DB_DRIVER=mysql
DLY_DB_DSN=tk:你的密码@tcp(127.0.0.1:3306)/daoliyu?charset=utf8mb4&parseTime=True&loc=Local

3. 清理残留状态(关键)

这一步非常关键。直接切换数据库时,软件会因为旧的运行状态文件而卡在“系统已完成初始化”界面。需要清理:

systemctl stop daoliyu-music
rm -f /var/lib/daoliyu-music/daoliyu.db*
rm -f /var/lib/daoliyu-music/work.db*
rm -f /var/lib/daoliyu-music/runtime-db.active*
rm -f /var/lib/daoliyu-music/runtime-db.mysql.env
rm -rf /var/lib/daoliyu-music/bootstrap-security

然后重启服务,在浏览器中重新初始化。

五、批量修改歌曲封面(核心需求)

需求:原本有封面的歌曲保持原样,没有封面的歌曲统一设置为一张默认图片。

1. 分析数据库表结构

USE daoliyu;
DESCRIBE tracks;
DESCRIBE albums;

关键字段:

  • tracks.cover_art_url:封面的网络地址
  • tracks.cover_art_path:封面的本地路径
  • albums.cover_art_url:专辑封面地址

2. 只处理“没有封面”的歌曲

UPDATE tracks 
SET cover_art_url = '/assets/default.png', cover_art_path = NULL
WHERE (cover_art_url IS NULL OR cover_art_url = '') 
  AND (cover_art_path IS NULL OR cover_art_path = '');

同样处理专辑表:

UPDATE albums 
SET cover_art_url = '/assets/default.png', cover_art_path = NULL
WHERE (cover_art_url IS NULL OR cover_art_url = '') 
  AND (cover_art_path IS NULL OR cover_art_path = '');

3. 清缓存并重启

rm -rf /var/lib/daoliyu-music/cover-thumbnails/*
rm -rf /var/cache/daoliyu-music/*
systemctl restart daoliyu-music

最终效果:369 首原本无封面的歌统一显示默认图片,326 首原本有封面的歌保留原样。

六、尝试给音频文件内嵌封面(未成功)

为了在「箭头音乐」等第三方播放器里也能显示封面,尝试用 FFmpeg 批量嵌入图片:

/usr/local/ffmpeg/ffmpeg -i "歌曲.mp3" -i "default.png" \
  -map 0:a -map 1:v -c:a copy -c:v mjpeg \
  -id3v2_version 3 \
  -metadata:s:v title="Album cover" \
  -metadata:s:v comment="Cover (front)" \
  "输出.mp3" -y

手动执行成功,但批量脚本全部失败。最终发现箭头音乐根本不读内嵌封面,因此放弃了这个方案。

七、经验总结

  1. CentOS 7 的 GLIBC 版本是硬伤:不要尝试升级系统 GLIBC,直接使用静态编译的 FFmpeg。
  2. 数据库切换时务必清理残留状态文件:runtime-db.active、db-shm、db-wal 这些文件会卡住初始化流程。
  3. 批量修改封面优先用 SQL:比逐个修改文件高效得多,且不影响原文件。
  4. 第三方播放器不读内嵌封面时,不必强求:保留网页端的完美显示即可。
  5. 安全提醒:数据库 3306 端口不要暴露在公网,建议用安全组限制来源 IP。

八、最终效果

  • ✅ 音频播放正常(FFmpeg 静态版解决)
  • ✅ 数据库运行在 MySQL 上
  • ✅ 网页端封面完美统一
  • ✅ 服务开机自启

希望这篇文章能帮到在 CentOS 7 上部署类似服务的朋友。如果你也遇到了 FFmpeg 缺库或数据库切换的问题,欢迎在评论区交流!


参考命令速查:

# 查看服务状态
systemctl status daoliyu-music

# 查看实时日志
journalctl -u daoliyu-music -f

# 体检工具
daoliyu-serverctl doctor

# 备份数据库
mysqldump -u tk -p daoliyu > /root/daoliyu_backup.sql

发布了 13 篇文章 | 共 43.6K 字 | 总访客数: Loading | 总访问量: Loading
Hugo theme Stack designed by Jimmy | 黔ICP备2025049100号-1