Koel 是什么?
Koel(也称为koel,带有小写的 k)是一种基于 Web 的个人音频流媒体服务应用,在客户端使用Vue编写,在服务端采用Laravel 编写。对于Web方面的发展,Koel 采用了一些更现代的网络技术–弹性框、音频和拖放API等等——来完成其工作。开源地址:github.com/koel/koel,截至2021.9.8,在Github上已获得12,809个赞!
Koel 可能是未来最好的开源音频流媒体服务应用,可与苹果设备Mac,平板,手机等兼容,并且在Play Store和App Store里有官方应用,可连接到你的私人Koel 服务器使用。官方的安装和使用文档:koel.dev。
创作 Koel 的故事
我的笔记本电脑没有磁盘空间了–谢谢你,Parallels。我的手机只有16GB的存储空间。而我还有40GB的MP3存储在我的外部硬盘上。所以我开始寻找一个开源的,或者至少是免费的,我可以使用的音乐流媒体应用程序。我找到了几个。哎,没有一个是符合我口味的。失望中,我问自己这个问题:”咳,为什么不直接创作一个呢?” 于是koel就诞生了。
为什么叫 Koel?
这是一只鸟的名字,它在我回到新加坡的家附近不停地唱歌。他看起来像这样:
服务器要求
实测可在ARM架构的Debian服务器上安装使用,当然X86架构的VPS也能顺利玩耍。
- 服务端需满足Laravel所要求的 – PHP,OpenSSL,composer等
- 数据库MySQL, MariaDB, PostgresSQL, 或SQLite。实际上, 任何Laravel支持的DBMS都应该可以使用
- 如果你要从源码构建Koel, 确保使用Git和NodeJS最新的稳定版本和yarn
安装流程
从v5.0.0版本开始,Koel 支持从预编译的存档中安装,这样我们就不需要手动编译前端资源了。直接使用LNMP一键安装包,搭建好Nginx,PHP,MariaDB环境。以下使用的是Debian系统的命令。你也可以使用Ubuntu、CentOS等系统安装Koel。你可以先做好DNS域名IP解析。下面以music.eluyee.com域名为例,开始安装。
搭建LNMP环境+创建数据库
SSH连接远程服务器,执行命令
sudo -i
sudo apt-get update && apt-get upgrade
apt-get install screen && apt-get install wget
screen -S lnmp
wget https://soft.lnmp.com/lnmp/lnmp2.0.tar.gz -O lnmp2.0.tar.gz && tar zxf lnmp2.0.tar.gz && cd lnmp2.0 && ./install.sh lnmp
./addons.sh install opcache # 安装完lnmp后开启OpCache
exit # 安装完毕后退出screen
cd /home/wwwroot
wget https://github.com/koel/koel/releases/download/v6.11.2/koel-v6.11.2.zip && unzip koel-v6.11.2.zip
lnmp vhost add
music.eluyee.com # 以下省略一些
/home/wwwroot/koel
koeldatabase # 创建数据库和同名用户
koelpasswd # 输入数据库密码
移除防跨目录设置
cd /root/lnmp2.0/tools
./remove_open_basedir_restriction.sh
/home/wwwroot/music.eluyee.com
开启proc_open和proc_get_status
vi /usr/local/php/etc/php.ini # Shift+? 找到proc_open和proc_get_status,删除
lnmp restart
mkdir storage/framework/cache/data # 创建data文件夹,这步很重要,随着版本更新也许不用执行此命令。
chmod -R 755 /home/wwwroot/koel
chown www:www -R /home/wwwroot/koel
如果现在执行composer install,会报错:Install or enable PHP’s exif extension,所以
安装exif模块
cd /root/lnmp2.0/src
ls
tar -xjvf php-8.2.6.tar.bz2 # 解压php源码
cd php-8.2.6/ext/exif/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vi /usr/local/php/etc/php.ini
Shift+?,查找;extension = ,在最后一个;extension= 的下一行添加
extension = "exif.so"
查找memory_limit, 修改为
memory_limit = 512M
Esc,:wq,回车保存退出
继续安装,修改环境配置
lnmp restart
cd /home/wwwroot/koel
composer install
# 出现提示Your lock file does not contain a compatible set of packages. Please run composer update. 则执行
composer update
composer install
# 以下为安装信息 #
PHP CodeSniffer Config installed_paths set to ../../../,../../slevomat/coding-standard
> @php artisan clear-compiled
Compiled services and packages files removed!
> @php artisan cache:clear
Application cache cleared!
> @php -r "if (!file_exists('.env')) copy('.env.example', '.env');"
# #
Koel支持三种流媒体方法,可以通过修改 .env 文件中的STREAMING_METHOD进行配置。默认使用原生 PHP readfile()。这是默认方法,也是最慢和最不稳定的方法。仅当你不能使用其他方法时才使用此方法。
vi .env # 修改连接数据库等信息
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=koeldatabase # 数据库
DB_USERNAME=koeldatabase
DB_PASSWORD=koelpasswd
APP_URL=http://music.eluyee.com # Koel登录地址
STREAMING_METHOD=x-accel-redirect # 传输模式:修改为使用Nginx的X-Accel模块
修改以上信息,保存退出,继续安装。
php artisan koel:init --no-assets
Media path []:
>
# 音频文件地址,回车即可,后边修改
# 以下为安装信息 #
Koel can now be run from localhost with `php artisan serve`.
Log in with email admin@koel.dev and password KoelIsCool
Again, visit 📙 https://docs.koel.dev for more tips and tweaks.
Feeling generous and want to support Koel's development? Check out https://github.com/users/phanan/sponsorship 🤗
Thanks for using Koel. You rock! 🤘
php artisan serve --host 0.0.0.0
# #
打开http://music.eluyee.com:8000/
使用默认账号登录:admin@koel.dev KoelIsCool
点击左下边User,Update Profile,更新为你想要的管理员账号密码
回到SSH终端,Ctrl+C结束临时这个服务器,修改根目录等以下信息
vi /usr/local/nginx/conf/vhost/music.eluyee.com.conf
修改root /home/wwwroot/koel; 为 root /home/wwwroot/koel/public;
删除17~34行,命令→Esc :17,34d,回车,并添加以下代码
gzip on;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/json;
gzip_comp_level 9;
location /media/ {
internal;
alias $upstream_http_x_media_root;
#access_log /var/log/nginx/koel.access.log;
#error_log /var/log/nginx/koel.error.log;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri $uri/ /index.php?$args;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_intercept_errors on;
include fastcgi_params;
}
}
保存后重启lnmp,创建media目录,
mkdir media
可以打开网站尝试登录了,若无法登录执行以下两行代码
chmod -R 755 /home/wwwroot/koel
chown www:www -R /home/wwwroot/koel
登录之后修改Settings,Media Path为 /home/wwwroot/koel/media
添加SSL
lnmp ssl add
music.eluyee.com # 以下部分省略...
/home/wwwroot/koel/public # 根目录
vi /usr/local/nginx/conf/vhost/music.eluyee.com.conf
修改music.eluyee.com.conf,将443端口配置 include enable-php.conf; 以下的代码行全部删除,并添加以下代码
gzip on;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/json;
gzip_comp_level 9;
location /media/ {
internal;
alias $upstream_http_x_media_root;
#access_log /var/log/nginx/koel.access.log;
#error_log /var/log/nginx/koel.error.log;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri $uri/ /index.php?$args;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_intercept_errors on;
include fastcgi_params;
}
}
保存重启lnmp,就可以登录啦!可以本地电脑上传歌曲,从网上下载喜欢的歌曲到服务器上,在这个私人音乐网盘、个人音乐电台愉快听歌!
使用指南
你可使用这个命令修改管理员密码:php artisan koel:admin:change-password
Nginx的配置其实跟官方的几乎一样,参考官方:nginx.conf.example
上传或下载音频文件到Media目录,点击左边的Settings,Scan扫描歌曲就能看到新的歌曲了。你也可以设置自动扫描。
你还可以上传歌词!你可以通过拖放图像到艺术家/专辑卡中的当前图像来改变艺术家和专辑图像。
当前的Koel 可识别这些音频扩展:.mp3,.ogg,.m4a(实验)和 .flac(有一些限制试验),其他的可能会在未来添加。
网页界面使用
使用 Koel 的客户端组件应该很简单。如果你曾经使用过 Spotify,你应该会感到这是如此熟悉配方?事实上,Koel 的客户端界面是对 Spotify 的无耻抄袭。你可以搜索,可以排序,可以按艺术家或专辑查看,可以创建播放列表,可以喜欢/不喜欢歌曲,还可以创建其他用户来分享音乐。书呆子也有几个快捷键呀:
- F:移动到搜索框
- Enter:播放一首歌曲。如果有多首歌曲被选中,Enter将它们添加到播放队列的底部,Shift+Enter将它们排到顶部。在组合中加入Cmd或Ctrl,可以立即播放第一首被选中的歌曲。
- Space:切换播放/停止
- J:播放队列中的下一首歌曲
- K:播放队列中的上一首歌曲
- Ctrl/Cmd+A:选择当前视图中的所有歌曲
- Delete:从当前队列/播放列表中删除所选歌曲
Koel 有一个(移动)遥控器,可让你在移动设备等其他设备控制桌面电脑——播放/暂停、导航、调高/调低音量以及从收藏夹中添加/删除。不过你需要创建一个Pusher账号,将凭据添加到 .env配置里。
如何升级 Koel ?
其实就是下载新的包到 /home/wwwroot 目录,解压缩后再执行一遍编译安装就好了!另外,如果你添加了SSL,记得将环境配置文件 .env 中APP_URL的http改为https后再执行安装。以从Koel v5.1.5 升级到 v5.1.8为例。
cd /home/wwwroot
wget https://github.com/koel/koel/releases/download/v5.1.8/koel-v5.1.8.zip && unzip koel-v5.1.8.zip # 解压缩并替换全部文件
cd /home/wwwroot/koel
composer install
php artisan koel:init --no-assets
lnmp restart # 完成后重启lnmp即可
我遇到的问题
2023.12.1更新:Flac音乐文件始终无法播放,不好用哎,放弃了。
一开始安装好之后,如果上传的音乐文件的名称带有中文,那么会无法播放。无法播放!!!用Chrome开发者工具查看,好像是转码的问题,500代码~ 这个问题困扰了我好久!!!其中试了N+N+N种方法..哎。我是后面突发奇想,将文件名换成英文名,成功播放才知道….
然鹅!!其实上传中文名歌曲是可以正常播放的,可能之前Nginx配置有点错误,后面改好了问题解决了。
还有,播放音乐没有缓存,有没有朋友教我怎么设置缓存,有的话感谢!
Flac是可以播放的,参见 https://docs.koel.dev/#transcoding-flac