原来主要用网易云音乐听歌,但现在越用越觉得不爽,不充vip很多歌不让听;消息推送乱七八糟;安卓端的开屏广告,关闭按钮玩捉迷藏;应用越来越大,功能却找不到了。
于是打算在vps上自建音乐服务器,这样和推送和广告就绝缘了,功能也专一,纯粹用来听歌。经过一番查询对比,看上去koel的界面比较好看,决定用koel。从官方页面(https://docs.koel.dev/)上看,似乎支持mac,pc,mobile,tablet等(实际上只支持浏览器,这有点虚假宣传暗示的意思)。
官方的安装教程是php裸奔(php serve),这在开发服还算合理,用在生产服是不合适的;而且需要安装一堆依赖,包括yarn,nodejs,数据库之类,其中的一些包在国内比较难搞,需要切镜像等。
docker安装只有社区维护,在docker hub上下载较多的有https://hub.docker.com/r/hyzual/koel,https://hub.docker.com/r/0xcaff/koel等。容器里面都包含了web服务器(apache),但这对我是不合适的,因为我已经用了多个php-fpm容器(wordpress,nextcloud),和nginx容器,我不太想服务器上跑超过一个web服务器的容器。
只能自己动手,做一个koel php-fpm的容器,主要参考hyzual/koel改写。其中做的修改主要有:
- 页面路径从
/var/www/html
改到/var/www/koel
,这样是为了nginx容器挂载时和别的php-fpm页面不冲突 - 文件流传输从
x-sendfile
改成x-accel-redirect
,因为使用nginx做web服务器。x-sendfile是apache的功能,x-accel-redirect是nginx的功能。
具体的Dockerfile见 https://github.com/cyh-ustc/docker-koel-fpm
使用koel-fpm容器部署
构建容器或直接拉取容器
docker pull cyhustc/koel:fpm
docker build -t koel:fpm .
启动数据库容器
koel支持sqlite,mysql等数据库,但我尝试了sqlite不太行,这里用mysql,mysql也用docker。可以在启动时指定用户和数据库名,也可以进入mysql容器后用命令创建数据库和用户密码等。
docker run -d --name database \
-e MYSQL_ROOT_PASSWORD=<root_password> \
-e MYSQL_DATABASE=koel \
-e MYSQL_USER=koel \
-e MYSQL_PASSWORD=<koel_password> \
mysql
初始化koel
先启动容器
docker run -d --name koel \
-v `pwd`/koel/html:/var/www/koel \
-v `pwd`/koel/music:/music \
--link mysql:mysql \
cyhustc/koel:fpm
进入容器后初始化,这一步非常重要,要不然没法用。这里要加上–no-assets,要不会拉取一堆没用(开发用)的包。
docker exec -it koel bash
$ php artisan koel:init --no-assets
配置nginx容器
这里用http,也可以增加https
server {
listen *:80;
server_name koel.xxx.yyy.zzz;
root /var/www/koel/public;
index index.php;
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;
client_max_body_size 512M;
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 koel:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_intercept_errors on;
include fastcgi_params;
}
}
启动nginx容器
docker run --name nginx \
--restart=always \
-p 443:443 \
-p 80:80 \
--link koel \
-v `pwd`/koel/music:/music \
-v `pwd`/koel/html:/var/www/koel \
-v `pwd`/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v `pwd`/nginx/conf/sites-enabled:/etc/nginx/sites-enabled \
-v `pwd`/nginx/www:/var/www \
-d nginx
打开浏览器,可以登录使用。
在移动端上使用
在Android手机上可以配合Chrome浏览器使用,感觉非常不错。
用chrome打开网页后点菜单,添加到桌面图标。然后从桌面图标打开就没有浏览器地址栏等,就像普通app一样感觉。并且在通知栏也可以显示当前播放可以暂停切歌等。耳机的线控也可以使用。