前言

​ 一直想搭建个人音乐电台,国内音乐版权太分散,许多版权是独家的。听歌得往各个平台找,而且有些专辑、演唱会平台也没有,还是自己抓轨下来听。之前使用oneindex修改简单播放列表,缺点很明显,使用OneDrive很容易抽风。买了一台GreenCloud作为存储,直接挂载在韩国甲骨文,数据放在GreenCloud上也不怕甲骨文翻车数据丢失。


一、安装

​ 前面使用源码安装,有坑以为没安装成功,导致重装系统,重新安装搭建浪费不少时间,后面改用docker还是复现前面的问题,才发现原来可以使用。我的服务器还要搭建其他的网站,所以使用oneinstack安装(Nginx+MySQL+PHP)。

oneinstack选择自动安装

wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --nginx_option 1 --php_option 8 --phpcache_option 1 --php_extensions ioncube,fileinfo,phalcon,yaf,memcached,swoole --db_option 2 --dbinstallmethod 1 --dbrootpwd oneinstack --pureftpd  --iptables --reboot 

安装之后先创建数据库和允许ip访问的用户。

mysql -u root -p
CREATE DATABASE koel;
GRANT ALL ON koel.* TO 'koel'@'%' IDENTIFIED BY 'SZa3xDhj62HskCy' WITH GRANT OPTION;
quit;

安装docker

curl -sSL https://get.docker.com/ | sh

[root@fungit ~]# docker --version
Docker version 19.03.13, build 4484c46d9d

systemctl enable docker #开机自启
systemctl start docker #启动docker

创建目录

mkdir -p /data/wwwroot/koel /data/wwwroot/koel/covers  /data/wwwroot/koel/music

使用hyzual/koel的镜像,可以使用docker-compose.yml方法安装,我用的是docker run安装

docker-compose.yml参考

version: '3.7'

services:
koel:
image: hyzual/koel
depends_on:
- database
ports:
- 80:80
environment:
DB_CONNECTION: mysql
DB_HOST: database
DB_USERNAME: koel
DB_PASSWORD: <koel_password>
DB_DATABASE: koel
volumes:
- music:/music
- covers:/var/www/html/public/img/covers

database:
image: mysql/mysql-server:5.7
volumes:
- db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: <root_password>
MYSQL_DATABASE: koel
MYSQL_USER: koel
MYSQL_PASSWORD: <koel_password>

volumes:
db:
driver: local
music:
driver: local
covers:
driver: local

docker run安装:

dokcer pull最新版本

docker pull hyzual/koel

复制一份.env到/data/wwwroot/koel,并填上MySQL数据

APP_NAME=Koel
DB_CONNECTION=mysql
DB_HOST=<ip> #填服务器ip地址,并开放ip访问
DB_PORT=3306
DB_DATABASE=koel
DB_USERNAME=koel
DB_PASSWORD=SZa3xDhj62HskCy

APP_KEY=
JWT_SECRET=
ADMIN_NAME="Koel Admin"
ADMIN_EMAIL=koel@fungit.org
ADMIN_PASSWORD=1234566
LASTFM_API_SECRET=
LASTFM_API_KEY=
APP_MAX_SCAN_TIME=600
MEMORY_LIMIT=
FORCE_HTTPS=

运行koel

docker run -d --name koel \
-p 8080:80 \
--mount type=bind,source=/data/wwwroot/koel/.env,target=/var/www/html/.env \
-v /data/wwwroot/koel/music/music:/music \
-v /data/wwwroot/koel/music/covers:/var/www/html/public/img/covers \
hyzual/koel

此时使用ip:8080应该是能够访问,但是还不能登录

执行 
docker exec -it koel bash
再执行
php artisan koel:init

看到类似的结果,再次访问ip:8080发现可以登录

bf501907c25b129040181e283d3e42c7.png

注:这里有个坑,我看到最后红色提示那里还以为失败,而且还没有提示错在哪里,搜索发现GitHub上有人发issue。但实际是可以使用。

Oops! Koel installation or upgrade didn't finish successfully.
Please try again, or visit https://docs.koel.dev for manual installation.
😥 Sorry for this. You deserve better.

Nginx反代配置域名

新建网站

cd ~/oneinstack
./vhost.sh

按提示操作就行了,目录选择/data/wwwroot/koel。注意如果你选择http跳转到https,那么.env里面FORCE_HTTPS=true。

nginx反代部分配置


#PROXY-START
location /
{
proxy_pass http://0.0.0.0:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;

#持久化连接相关配置
#proxy_connect_timeout 30s;
#proxy_read_timeout 86400s;
#proxy_send_timeout 30s;
#proxy_http_version 1.1;
#proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "upgrade";

add_header X-Cache $upstream_cache_status;

expires 12h;
}

location ~ .*\.(php|jsp|cgi|asp|aspx|flv|swf|xml)?$
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass http://0.0.0.0:8080;

}

location ~ .*\.(html|htm|png|gif|jpeg|jpg|bmp|js|css)?$
{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass http://0.0.0.0:8080;

#缓存相关配置
#proxy_cache cache_one;
#proxy_cache_key $host$request_uri$is_args$args;
#proxy_cache_valid 200 304 301 302 1h;

expires 24h;
}
#PROXY-END

注:可能的出错”Provisional headers are shown”,具体谷歌搜索一下啦,前面docker run我是用的是8080端口,网站默认使用80 443,网站改为8080也是可以正常访问domain:8080。如果配置了ssl,可以把.env里面FORCE_HTTPS=true设置为true,就不会出现这样问题。

最后.env配置

APP_NAME=Koel
DB_CONNECTION=mysql
DB_HOST=<ip> #填服务器ip地址,并开放ip访问
DB_PORT=3306
DB_DATABASE=koel
DB_USERNAME=koel
DB_PASSWORD=SZa3xDhj62HskCy

APP_KEY=base64:ok+aFUyfuuj7F8PFqntiuOPvgszgh10KFc5LVgaAzB0= #记得
JWT_SECRET=fopNCMeo6Pvg9SaPktThDj1xutr7Yt2L #记得
APP_URL=http://localhost #这里是docker安装,不可改域名
ADMIN_NAME="Fungit"
ADMIN_EMAIL=koel@fungit.org
ADMIN_PASSWORD=1234566
APP_MAX_SCAN_TIME=600
MEMORY_LIMIT=
FORCE_HTTPS=true #域名配置https之后设置

二、使用

访问https://koel.fungit.org/ 看到登录页面,账号密码是php artisan koel:init 初始化时输入的邮箱和密码。忘记可以php artisan koel:admin:chang-passwd 修改密码.


4a69042618d4bdc392ca4464a4f83ee2.png


登录进去看到黑色主题界面,前端设置功能真的很少,只有一个Media Path设置,页面主题色也没有,看了文档好像没看到可以更改主题的地方。添加用户是没有管理权限,可以分享给朋友使用。


998b74192e8a243c87b2d98e20a314ae.png


后续维护,需要更改.env配置

docker exec -it koel bash
php artisan koel:init

更新音乐

docker exec koel php artisan koel:sync

即将更新使用last.fm记录

相关链接: