知了
知了, 支持多用户的开源音乐服务.
特色
- 尊重隐私, 不进行任何数据收集
- 支持多用户以及导入现有音乐目录/文件
- 支持 PWA, UI 同时支持桌面端和移动端
- 系统媒体和快捷键支持
- 音乐支持标准音质/超高音质/伴奏以及多份歌词
- 乐单/播放列表/播放队列音乐数量无限制
- 支持标注音乐创作来源(翻唱)
- 支持歌词/歌名/歌手/乐单搜索
准备
- 邮件发送服务, 知了使用邮箱验证码进行登录以及部分功能依赖邮箱实现, 第三方邮件发送服务可以参考 网易邮箱 / QQ 邮箱 / Outlook 邮箱
- FFmpeg[可选], 知了会自动检测
PATH
下是否有 ffmpeg, 有的话会调用 ffmpeg 进行音频压缩(无损音质不会进行压缩), 没有的话将不会进行音频压缩
使用邮箱验证码登录可以极大地提高安全性, 相比账号密码的登录方式, 邮箱验证码登录可以避免被暴力破解
部署
新建配置文件 config.json
:
{
"emailHost": "smtp.example.com",
"emailUser": "example@example.com",
"emailPass": "example-password"
}
在 Releases 下载并解压对应平台的二进制包, 通过下面命令指定配置文件并启动服务:
./cicada start -c config.json
通过 localhost:8000
或者 {{ip}}:8000
访问知了服务. 目前只提供了几种主流平台的构建包, 其他平台可以参考构建文档自行构建.
Docker
知了支持 Docker 镜像部署:
docker run \
-d \
--restart=always \
-p 8000:80 \
-v $HOME/cicada-data:/data \
-v $HOME/cicada-config.json:/config.json:ro \
--name cicada \
mebtte/cicada
需要注意的是, 使用 Docker 镜像首次运行必须配置 initialAdminEmail, 否则无法完成初始化. 此外 Docker 镜像下会忽略 config 文件中的 data 和 port 配置项.
Docker compose
version: '3'
services:
cicada:
restart: always
container_name: cicada
# specify user
# user: 1000:1000
image: mebtte/cicada
ports:
- 80:80
volumes:
- /path/config.json:/config.json:ro
- /path/data:/data
导入音乐
知了支持导入现有音乐, 通过 cicada import
命令可以导入音乐目录或者音乐文件, 需要注意的是音乐文件命名必须要满足以下格式(多个空格会被合并成一个):
singer1[,singer2][,singer3] - name.format
比如 周杰伦 - 晴天.mp3
/ Jarryd James,BROODS - 1000x.flac
是支持的命名, 孙燕姿 逆光.mp3
/ 漠河舞厅.m4a
是不支持的命名.
# 导入音乐目录
cicada import --data /path_to/cicada_data --recursive music_dir
# 导入音乐文件
cicada import --data /path_to/cicada_data music
当遇到命名不支持或者格式不支持的文件, 知了将会忽略. 可以通过 cicada help import
查看更多选项.
Roadmap
v0
- 多语言支持
- 悬浮歌词面板(类似于网易云网页版歌词)
- 播放记录的展示和删除
- 电台功能(随机从曲库中拉取音乐并连续播放)
v1
- 第三方接入指引(数据库 ER 图/ API 文档)
- 图片(用户头像/歌手头像/音乐封面/乐单封面)访问优化
- 删除用户
- 用户最后活动时间记录和展示
- 音乐年份记录和展示
- 共享乐单
- 消息中心(删除歌手消息/乐单内包含被删除音乐消息)
常见问题
如何迁移数据 ?
知了所有数据都位于 {{data}}
目录下, 将 {{data}}
目录复制或者移动即可完成迁移.
如何安装 PWA ?
PWA 仅支持 HTTPS
或者 localhost
, 知了目前暂不支持配置 HTTPS
, 请使用 nginx
之类的工具进行 HTTPS
反向代理. Chrome 下安装方法请查看教程.
为什么 iOS/iPadOS 上处于后台时无法自动播放下一首 ?
目前 Safari 对 PWA 支持度较低, 当页面处于后台时会暂停 JavaScript 的执行导致无法自动下一首, 需要等待 Safari 提高对 PWA 的支持才能解决相关问题.