Koel Music Streaming Server installeren op Ubuntu 18.04

Koel is een web-gebaseerde persoonlijke audio streaming app, geschreven in Vue.js aan de client-kant en Laravel aan de server-kant. Deze handleiding behandelt hoe je Koel op een Ubuntu 18.04 gebaseerde server kunt installeren.

Vereisten

  • Een server met Ubuntu 18.04.

  • Een niet-root sudo gebruiker.

  • Zorg ervoor dat alles bijgewerkt is.

    $ sudo apt update && sudo apt upgrade
  • Een paar pakketten die je systeem nodig heeft.

    $ sudo apt install ca-certificates curl unzip build-essential libpng-dev gnupg2 lsb-release ufw -y

    Sommige van deze pakketten kunnen al op je systeem geïnstalleerd zijn.

Configureer Firewall

De eerste stap is het instellen van de firewall. Voordat we de firewall inschakelen, moeten we SSH poorten toestaan, anders worden we van onze server afgesloten.

$ sudo ufw allow OpenSSH

Schakel de firewall in.

$ sudo ufw enable

Sta HTTP en HTTPS poorten toe.

$ sudo ufw allow http
$ sudo ufw allow https

Controleer de status van de firewall.

$ sudo ufw status

Je zou een gelijkaardige uitvoer moeten zien.

Status: active
To                         Action     From
--                         ------      ----
OpenSSH                   ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                   ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)               ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Git installeren

We beginnen met het installeren van Git.

$ sudo apt install git -y
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"

Installeer Node.js

We zullen Node 10.x installeren in plaats van de nieuwste 12.x omdat Koel enkele verouderde bibliotheken verpakt die niet compatibel zijn met Node 12.

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt install -y nodejs

Controleer of Node goed geïnstalleerd is.

$ node --version

Je zou een soortgelijke uitvoer moeten zien.

v10.17.0

Installeer Yarn

Installeer de pakketbeheerder Yarn.

$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
$ sudo apt update && sudo apt install -y yarn

Controleer of Yarn goed werkt.

$ yarn --version

Je zou een gelijkaardige output moeten zien.

1.19.1

Installeer PHP

Installeer PHP 7.2 met al zijn vereiste extensies.

$ sudo apt install -y php7.2-fpm php7.2-mbstring php7.2-bcmath php7.2-xml php7.2-mysql php7.2-curl php7.2-zip

Controleer of PHP correct werkt.

$ php --version

Je zou een gelijkaardige uitvoer moeten zien.

PHP 7.2.24-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Oct 24 2019 18:29:11) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
  with Zend OPcache v7.2.24-1+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies

Installeer MariaDB

MariaDB is een drop-in vervanger voor MySQL, wat betekent dat de commando’s om MariaDB te draaien en te bedienen dezelfde zijn als die voor MySQL. Om MariaDB te installeren voer je de volgende commando’s uit.

$ sudo apt install mariadb-server

Controleer of MariaDB correct geïnstalleerd is.

$ mysql --version

Je zou de volgende uitvoer moeten zien.

mysql  Ver 15.1 Distrib 10.1.41-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Voer het volgende commando uit om standaard instellingen uit te voeren, zoals het geven van een root wachtwoord, het verwijderen van anonieme gebruikers, het op afstand verbieden van root login en het laten vallen van testtabellen. Voer voor alles yes in en stel een root wachtwoord in.

$ sudo mysql_secure_installation

Er is een voorbehoud bij het instellen van het root wachtwoord. MariaDB staat systeem root gebruikers standaard toe in te loggen in MariaDB zonder een wachtwoord. Maar als je een toepassing van derden gaat gebruiken om via root toegang te krijgen, is een wachtwoord een must, anders zullen apps als PHPMyAdmin falen. Hiervoor moet je de plugin-gebaseerde authenticatie uitschakelen, die op MariaDB de standaard optie is.

Om plugin authenticatie uit te schakelen en het root wachtwoord te herstellen, ga je eerst naar de MySQL prompt met het volgende commando.

$ sudo mysql -u root

Voer nu de volgende commando’s in om de plugin authenticatie uit te schakelen.

use mysql;
update user set plugin='' where User='root';
flush privileges;
exit

Herstart hierna je MariaDB dienst.

$ sudo systemctl restart mariadb.service

Dat is het. De volgende keer dat je op MySQL wilt inloggen, gebruik je het volgende commando

$ sudo mysql -u root -p

Voer je root wachtwoord in als daarom gevraagd wordt.

Configureer MariaDB voor Koel

Nu moeten we een databank instellen om te gebruiken voor de Koel toepassing. Om dat te doen log je in op de prompt van MySQL. We zullen aannemen dat je de standaard authenticatie methode van MariaDB gebruikt (dus zonder root wachtwoord te gebruiken) voor de rest van de handleiding.

$ sudo mysql -u root

Eenmaal op de prompt voer je de volgende commando’s in die een databank met de naam koelmusic en een databank gebruiker met de naam koeluser en deze toegang tot de databank verlenen.

mysql> CREATE DATABASE koelmusic;
mysql> CREATE USER 'koeluser'@'localhost' IDENTIFIED BY 'yourpassword';
mysql> GRANT ALL PRIVILEGES ON koelmusic.* TO 'koeluser'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> exit

Installeer Nginx

Installeer Nginx server.

$ sudo apt install nginx

Controleer of hij goed werkt.

$ nginx -v

Je zou de volgende uitvoer moeten zien.

nginx version: nginx/1.14.0 (Ubuntu)

Voer het volgende commando uit om een configuratiebestand voor Koel toe te voegen.

$ sudo nano /etc/nginx/sites-available/koel.conf

Plak de volgende code in de editor.

server {
 listen         *:80;
 server_name     koel.example.com;
 root           /var/www/koel;
 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;

 # Whitelist only index.php, robots.txt, and some special routes
 if ($request_uri !~ ^/$|index\.php|robots\.txt|(public|api)/|remote|api-docs|sw\.js) {
   return 404;
}

 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 unix:/var/run/php/php7.2-fpm.sock;
   fastcgi_index index.php;
   fastcgi_split_path_info   ^(.+\.php)(/.+)$;
   fastcgi_intercept_errors on;
   include fastcgi_params;
}
}

Dit bestand neemt aan dat we Koel installeren op het domein koel.example.com en in de directory /var/www/koel.

Activeer dit configuratiebestand door het te linken naar de sites-enabled directory.

$ sudo ln -s /etc/nginx/sites-available/koel.conf /etc/nginx/sites-enabled/

Test de configuratie.

$ sudo nginx -t

Je zou de volgende uitvoer moeten zien die aangeeft dat je configuratie juist is.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Herlaad de Nginx dienst.

$ sudo systemctl reload nginx

Installeer Composer

Dit is het laatste wat we nodig hebben voor we verder gaan met de installatie.

Voer de volgende commando’s in om Composer te installeren.

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"
$ sudo mv composer.phar /usr/local/bin/composer

Controleer of het correct werkt.

$ composer --version

Je zou de volgende uitvoer moeten zien.

Composer version 1.9.1 2019-11-01 17:20:17

Installeer Koel

Maak een lege document root map voor Koel.

$ sudo mkdir -p /var/www/koel

De -p argument zorgt ervoor dat bovenliggende mappen var en www automatisch worden aangemaakt als ze niet bestaan.

Navigeer naar de document root map.

$ cd /var/www/koel

Verander het eigendom van de document root in user dat is de niet-root gebruiker die we voor de handleiding gebruikt hebben.

$ sudo chown -R user:user /var/www/koel

Kloon de Koel Git repository en checkout de laatste versie. Je kunt de laatste versie bekijken op zijn releases pagina.

$ git clone --recurse-submodules https://github.com/phanan/koel.git .
$ git checkout v4.1.1

Installeer de afhankelijkheden.

$ composer install

Voer het volgende commando uit om de database en de beheerdersaccount in te stellen. Voer als databasetype mysql in, sla de poort over en voer de databasereferenties in die we hierboven gemaakt hebben. Voor de mediamap kun je iets invoeren als /home/user/songs.

$ php artisan koel:init

Verander het eigendom van de document root map terug naar de www-data gebruiker.

$ sudo chown -R www-data:www-data /var/www/koel

De setup is nu voltooid. Open koel.example.com in je browser en log in met de credentials die je hierboven gemaakt hebt en begin te streamen. De website van Koel is ook toegankelijk via mobiel.

Configureer Koel

Er zijn meer details die je kunt configureren door het bewerken van het .env bestand met het volgende commando.

$ sudo nano /var/www/koel/.env

Hier kun je je SMTP gegevens invoeren, Youtube en Last.fm configureren voor Koel en nog veel meer dingen doen.

Herlaad Nginx server om de veranderingen door te voeren.

Als je je admin wachtwoord wilt resetten, kun je dat doen door het volgende commando te geven.

$ php artisan koel:admin:change-password

Als je de mediabibliotheek wilt scannen op bijgewerkte bestanden, kun je dat doen met het volgende commando.

$ php artisan koel:sync

Je zou de volgende uitvoer moeten zien.

Koel syncing started.
953/953 [????????????????????????????] 100%
Completed! 944 new or updated song(s), 0 unchanged song(s), and 9 invalid file(s).

Voeg het commando toe met -v vlag die je meer details geeft zoals synchronisatiefouten.

Je kunt dit commando zelfs instellen als een cron job, bijvoorbeeld om elke middernacht te draaien. Om dat te doen voer je het volgende commando uit.

$ crontab -e

Kies 1(nano) als je editor.

Plak de volgende regel aan het eind van het bestand.

0 0 * * * cd /var/www/koel && /usr/bin/php artisan koel:sync >/dev/null 2>&1

Sla het bestand op door op Ctrl + X en voer in Y wanneer daarom gevraagd wordt. Nu zal je mediabibliotheek elke middernacht gesynchroniseerd worden.

Voor meer dingen raadpleeg je de officiële Koel documentatie.

HTTPS instellen met Let’s Encrypt

Om Let’s encrypt te gebruiken, moeten we de Certbot pakket installeren.

Voeg de repository toe.

$ sudo add-apt-repository ppa:certbot/certbot

Installeer Certbot.

$ sudo apt install python-certbot-nginx

Installeer het certificaat.

$ sudo certbot --nginx -d koel.example.com

Als dit de eerste keer is dat je het gereedschap op deze server gebruikt, moet je akkoord gaan met de voorwaarden en je email adres invoeren. Zeg geen als je gevraagd wordt of je je e-mail met de EFF stichting wilt delen.

Als dat gelukt is, certbot wordt gevraagd hoe je je HTTPS instellingen wilt configureren.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Kies 2 en druk dan op ENTER. Je certificaat is nu geïnstalleerd en geactiveerd. Je certificaat vernieuwt zichzelf automatisch over 90 dagen.

Conclusie

Hiermee is onze handleiding beëindigd. Je kunt naar hartelust media streamen vanaf je server.