使用Koel在Ubuntu 20.04 LTS系统中搭建私人音乐电台

Koel是著名的个人音乐在线播放与电台程序。在英文中,Koel是一种鸟类,它经常发出好听的叫声,该程序也因此得名。Koel完全免费开源,在Github上已经有一万多个Stars, 一千多次Forks.  今天我们将介绍如何在Ubuntu 20.04 LTS系统中搭建Koel私人音乐电台。

本文作者为香菇肥牛,原文链接为https://qing.su/article/personal-music-streaming-server-with-koel.html, 转载需著名原文链接。谢谢!

 

1, 基础系统环境

本文将以Ubuntu 20.04 LTS操作系统为例,介绍Koel音乐播放与电台系统的搭建。您需要将您的域名解析到服务器的IP地址上。下文中,我们将以域名koel.qing.su为例。

在开始之前,首先介绍一下该程序的架构。Koel的后端使用Laravel PHP框架,前端使用Vue JS框架。本文将使用基础的Nginx + MariaDB架构来实现Koel的搭建。由于需要用到两个框架,程序安装过程中,需要的组件较多,步骤较为繁杂,我们将提供图文教程和图文教程。

该程序需要至少1 GB的内存。Koel没有官方的Docker镜像,只有第三方开发的镜像,而且性能会弱于非Docker的安装方法。因此我们将不介绍Docker方式的安装。

下面,我就来详细介绍如何在Ubuntu 20.04 LTS操作系统中手动搭建Koel私人音乐电台。由于步骤较多,我们一并录制了SSH轻视频,您可以点击下方的播放键观看,视频上任意内容均可使用鼠标直接复制。若您的浏览器没有加载播放器,请刷新本页面。


 

2, 安装Nginx服务器与PHP

我们直接从包管理器安装Nginx.  执行:

1
2
apt-get update && apt-get upgrade
apt-get install nginx git

继续从包管理器安装PHP.  这里,我们将安装默认的PHP7.4, 并安装一系列需要的PHP拓展。

1
apt-get install php php-bcmath php-json php-mbstring php-xml php-common openssl libssl-dev php-mysql php-dev php-zip php-curl php-fpm

需要注意的是,从包管理器安装PHP 7.4的时候,会一并安装上Apache2服务器。因此,安装PHP和各组件时会报错,如下图。您可以无视。

安装Koel需要卸载Apache2

安装完毕后,执行下面的命令卸载Apache2.

1
apt-get remove apache2 && apt-get autoremove

Koel在播放音乐时需要较大的PHP内存,因此我们需要修改PHP的memory_limit参数。编辑文件/etc/php/7.4/cli/php.ini, 将memory_limit参数值修改为512M.

1
memory_limit = 512M

如下图:

提高PHP Memory limit.

修改完毕后,可以不用着急重新载入Nginx.  我们后面配置Nginx的时候可以一并操作。

 

3, 安装与配置MariaDB数据库

这一节,我们将安装MariaDB数据库。MariaDB是MySQL的替代产品,您也可以使用MySQL.  我们将直接从包管理器安装MariaDB.  执行:

1
apt-get install mariadb-server

这样就安装好了MariaDB.  首次安装,需要设置一些基础的安全选项。

1
mysql_secure_installation

然后,新建一个数据库,用来提供给Koel程序使用。首先,进入MariaDB命令行:

1
mysql -u root -p

然后,新建一个数据库。

1
2
3
CREATE DATABASE koeldb;
GRANT ALL ON koeldb.* TO 'koeluser' IDENTIFIED BY 'qing.su';
quit;

这样,我们新建了一个名为koeldb的数据库,数据库用户名为koeluser, 密码为qing.su.

 

4, 安装Composer与Laravel

Koel使用Laravel PHP框架作为后端。因此,我们需要安装Laravel框架。这里我们使用Composer来安装。

首先,安装Composer.

1
2
3
wget https://getcomposer.org/installer
php installer
mv composer.phar /usr/local/bin/composer

然后,使用Composer安装Laravel.

1
composer global require laravel/installer

上面这一步的执行过程中可能会看到如下的警告,可以无视。

Composer提示不能使用root执行。

 

5, 安装NodeJS与Yarn

Koel的前端使用了Vue JS框架,因此我们需要安装NodeJS与yarn来编译生成前端JS文件。

首先,安装NodeJS.  请注意,Koel目前仅支持10.x版本的NodeJS.  新版本比如14.x版本的NodeJS无法正常运行Koel.

1
2
curl -sL https://deb.nodesource.com/setup_10.x | bash -
apt-get install nodejs

然后,使用Node安装yarn.

1
npm install -g yarn

您也可以添加源然后使用包管理器安装yarn.

1
2
3
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt-get update && apt-get install yarn

 

6, 安装Koel主程序

安装好所有这些组件之后,我们就可以开始部署Koel主程序了。我们将Koel主程序部署在/srv/www/koel/public_html/目录,您可以根据个人喜欢部署在其他目录。

1
2
3
mkdir -p /srv/www/koel/public_html
cd /srv/www/koel/public_html
git clone --recurse-submodules https://github.com/phanan/koel.git .

这里,您可以前往https://github.com/phanan/koel/releases查看最新的Koel版本号,然后安装对应的版本。我这里是4.4.0.

1
2
git checkout v4.4.0
composer install

此时,我们需要编辑文件.env, 配置数据库与管理员用户信息。在这个文件中,我们有三处需要修改。

首先,在下面几行中,填入我们在第三部分建立的数据库信息:

1
2
3
DB_DATABASE=koeldb
DB_USERNAME=user
DB_PASSWORD=qing.su

在下面几行中填入管理员用户信息:

1
2
3
ADMIN_NAME="香菇肥牛"
ADMIN_EMAIL=hi@example.com
ADMIN_PASSWORD=qing.su

更改APP_URL的值,将其修改为您的Koel域名:

1
APP_URL=http://koel.qing.su

如下图:

修改Koel配置文件

修改完毕后,保存退出。

最后,我们初始化Koel.  该步骤将初始化Koel数据库,并自动执行yarn install安装前端文件。这一步需要较长时间,且中途可能会遇到各种warning, 可以不予理会。

1
php artisan koel:init

执行完毕后,我们可以测试一下Koel是否正确安装。我们可以使用PHP自带的临时服务器,测试一下我们是否能够正常访问Koel.  执行:

1
php artisan serve --host 0.0.0.0

然后,在浏览器中访问http://koel.qing.su:8000, 如果您的Koel正确安装,浏览器中将会出现Koel的登录界面了。

Koel电台的登录界面

测试完毕后,执行CTRL + C结束这个临时服务器。我们将使用Nginx来实现浏览器访问,而不是用这个简易的临时服务器来提供访问。

 

7, 配置Nginx虚拟主机文件

Koel安装目录中提供了默认的Nginx虚拟主机配置文件,我们仅需稍微修改即可。请注意,您当前的操作目录应该是/srv/www/koel/public_html/.

1
cp nginx.conf.example /etc/nginx/conf.d/koel.conf

编辑文件/etc/nginx/conf.d/koel.conf:

将默认的程序路径/var/www/koel设置为我们安装的路径:

1
root            /srv/www/koel/public_html;

找到server_name选项,将其值设置为您的域名:

1
server_name     koel.qing.su;

找到fastcgi_pass选项。我们将其值设置为PHP-FPM的Unix Socket文件路径:

1
fastcgi_pass              unix:/run/php/php7.4-fpm.sock;

编辑完毕后,退出该文件。然后,设置程序目录的访问权限,并重新载入Nginx配置文件,使得配置生效。

1
2
chown -R www-data:www-data .
service nginx reload

此时,在浏览器中访问http://koel.qing.su, 将可以正确打开Koel登录界面了。

 

8, 配置Let’s Encrypt安全证书

配置好Nginx虚拟主机之后,我们还可以使用Let’s Encrypt免费TLS安全证书来提高安全性。Ubuntu 20.04 LTS系统的包管理器自带了certbot及配套的Nginx-certbot安装程序,我们直接从包管理器安装即可。

1
apt-get install certbot python3-certbot-nginx

然后,让certbot自动帮我们配置证书即可。

1
certbot --nginx --redirect --staple-ocsp -d koel.qing.su

证书安装好之后,Certbot会自动帮我们重新载入Nginx配置文件。

由于更改了网站URL, 我们需要重新编译一下前端js文件。修改文件.env, 将APP_URL=http://koel.qing.su修改为https地址:

1
APP_URL=https://koel.qing.su

然后重新编译前端文件。执行:

1
php artisan koel:init

此时,访问https://koel.qing.su, 即可看到Koel登录界面与安装好的安全证书了。我们使用之前设置的管理员账户即可登录并同步音乐文件。

 

9, 使用Koel

最后,我们简要介绍一下如何使用Koel.  首先,我们需要把所有的音乐文件与目录放在服务器的一个目录里面。比如,我这里放在目录/media中。

然后,我们登录Koel, 点击左侧Settings, 再Media Path中输入我们的音乐文件存储位置,比如这里的/media.  请注意,存储在该目录的子目录中的所有音乐文件都会被包括在Koel库中。输入完毕后,点击Scan, 系统将会自动索引您的音乐文件。

设置Koel媒体文件储存路径

索引完毕后,就可以开始听歌啦。

使用Koel播放歌曲

 

至此,我们在Ubuntu 20.04 LTS服务器中安装并配置好了Koel个人音乐播放与电台程序。

如果有任何问题,您可以在这里留言,我将尽力解答。本文作者为香菇肥牛,原文链接为https://qing.su/article/personal-music-streaming-server-with-koel.html, 转载需著名原文链接。谢谢!

 

6 thoughts on “使用Koel在Ubuntu 20.04 LTS系统中搭建私人音乐电台”

  1. Link exchange is nothing else but it is simply placing the other person’s web
    site link on your page at proper place and other person will also do same for you.
    asmr 0mniartist

    Reply
  2. Its like you read my thoughts! You appear to understand
    so much approximately this, like you wrote the
    book in it or something. I believe that you just could do with some p.c.
    to drive the message home a bit, but instead of that,
    this is magnificent blog. An excellent read. I will certainly be back.
    0mniartist asmr

    Reply
  3. I will right away clutch your rss as I can not in finding your email subscription hyperlink or e-newsletter service.
    Do you have any? Please permit me understand in order that I may just subscribe.
    Thanks. asmr 0mniartist

    Reply
  4. Thank you, I have just been looking for info approximately this topic for ages
    and yours is the best I’ve found out so far. But, what in regards to the conclusion?
    Are you positive about the supply?

    Reply
  5. Hello to every body, it’s my first pay a visit of this webpage;
    this weblog includes awesome and in fact good data in support of visitors.

    Reply

Leave a Comment