Cómo instalar el servidor de streaming de música Koel en Ubuntu 18.04

Koel es una aplicación de streaming de audio personal basada en la web y escrita en Vue.js en el lado del cliente y Laravel en el lado del servidor. Este tutorial cubrirá cómo instalar Koel en un servidor basado en Ubuntu 18.04.

Requisitos previos

  • Un servidor con Ubuntu 18.04.

  • Un usuario sudo no root.

  • Asegúrate de que todo está actualizado.

    $ sudo apt update && sudo apt upgrade
  • Pocos paquetes que necesite tu sistema.

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

    Algunos de estos paquetes pueden estar ya instalados en tu sistema.

Configurar el cortafuegos

El primer paso es configurar el cortafuegos. Antes de habilitar el cortafuegos, tenemos que permitir los puertos SSH, de lo contrario nos bloquearemos en nuestro servidor.

$ sudo ufw allow OpenSSH

Habilita el cortafuegos.

$ sudo ufw enable

Permite los puertos HTTP y HTTPS.

$ sudo ufw allow http
$ sudo ufw allow https

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver una salida similar.

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)

Instalar Git

Empezaremos por instalar Git.

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

Instala Node.js

Instalaremos Node 10.x en lugar de la última 12.x porque Koel empaqueta algunas bibliotecas obsoletas que no son compatibles con Node 12.

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

Comprueba si Node está bien instalado.

$ node --version

Deberías ver una salida similar.

v10.17.0

Instala Yarn

Instala el gestor de paquetes 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

Comprueba si Yarn funciona correctamente.

$ yarn --version

Deberías ver una salida similar.

1.19.1

Instala PHP

Instala PHP 7.2 con todas sus extensiones necesarias.

$ 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

Comprueba si PHP funciona correctamente.

$ php --version

Deberías ver un resultado similar.

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

Instalar MariaDB

MariaDB es un sustituto de MySQL, lo que significa que los comandos para ejecutar y hacer funcionar MariaDB son los mismos que los de MySQL. Para instalar MariaDB emite los siguientes comandos.

$ sudo apt install mariadb-server

Comprueba si MariaDB se ha instalado correctamente.

$ mysql --version

Deberías ver la siguiente salida.

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

Ejecuta el siguiente comando para realizar la configuración por defecto, como dar una contraseña de root, eliminar los usuarios anónimos, no permitir el inicio de sesión de root de forma remota y eliminar las tablas de prueba. Introduce el sí para todo y configura una contraseña de root.

$ sudo mysql_secure_installation

Hay una advertencia sobre la configuración de la contraseña de root. MariaDB permite por defecto que los usuarios root del sistema se conecten a MariaDB sin contraseña. Pero si vas a utilizar una aplicación de terceros para acceder a través de la raíz, la contraseña es imprescindible, de lo contrario aplicaciones como PHPMyAdmin fallarán. Para ello, tienes que desactivar la autenticación basada en plugins, que es la opción por defecto en MariaDB.

Para deshabilitar la autenticación por plugins y restaurar la contraseña de root, entra primero en el prompt de MySQL utilizando el siguiente comando.

$ sudo mysql -u root

Ahora introduce los siguientes comandos para desactivar la autenticación por plugins.

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

Después de esto reinicia tu servicio MariaDB.

$ sudo systemctl restart mariadb.service

Eso es todo. La próxima vez que quieras entrar en MySQL, utiliza el siguiente comando

$ sudo mysql -u root -p

Introduce tu contraseña de root cuando se te pida.

Configurar MariaDB para Koel

Ahora tenemos que configurar una base de datos para utilizarla en la aplicación Koel. Para ello, entra en el prompt de MySQL. Asumiremos que estás usando el método de autenticación por defecto de MariaDB (es decir, sin usar la contraseña de root) para el resto del tutorial.

$ sudo mysql -u root

Una vez en el prompt, introduce los siguientes comandos que configurarán una base de datos llamada koelmusic y un usuario de base de datos llamado koeluser y le dará acceso a la base de datos.

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

Instalar Nginx

Instala el servidor Nginx.

$ sudo apt install nginx

Comprueba que funciona correctamente.

$ nginx -v

Deberías ver la siguiente salida.

nginx version: nginx/1.14.0 (Ubuntu)

Ejecuta el siguiente comando para añadir un archivo de configuración para Koel.

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

Pega el siguiente código en el 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;
}
}

Este archivo supone que vamos a instalar Koel en el dominio koel.example.com y en el directorio /var/www/koel.

Activa este archivo de configuración vinculándolo al directorio sites-enabled directorio.

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

Prueba la configuración.

$ sudo nginx -t

Deberías ver la siguiente salida que indica que tu configuración es correcta.

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

Recarga el servicio Nginx.

$ sudo systemctl reload nginx

Instalar Composer

Esto es lo último que necesitamos antes de pasar a la instalación.

Introduce los siguientes comandos para instalar Composer.

$ 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

Comprueba si funciona correctamente.

$ composer --version

Deberías ver la siguiente salida.

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

Instalar Koel

Crea una carpeta raíz de documentos vacía para Koel.

$ sudo mkdir -p /var/www/koel

El comando -p asegura que los directorios padre var y www se creen automáticamente si no existen.

Navega hasta la carpeta raíz del documento.

$ cd /var/www/koel

Cambia la propiedad de la raíz del documento a user que es el usuario no root que hemos utilizado para el tutorial.

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

Clona el repositorio Git de Koel y comprueba su última versión. Puedes comprobar la última versión desde su página de versiones.

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

Instala las dependencias.

$ composer install

Ejecuta el siguiente comando para configurar la base de datos y la cuenta de administrador. Introduce mysql como tipo de base de datos, omite el puerto e introduce las credenciales de la base de datos que creamos anteriormente. Para la carpeta de medios, puedes introducir algo como /home/user/songs.

$ php artisan koel:init

Cambia la propiedad de la carpeta raíz de los documentos al www-data usuario.

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

La configuración ya está completa. Abre koel.example.com en tu navegador e inicia la sesión con las credenciales que has creado anteriormente y empieza a transmitir. El sitio web de Koel también es accesible a través del móvil.

Configurar Koel

Hay más detalles que puedes configurar editando el archivo .env con el siguiente comando.

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

Aquí puedes introducir tus datos SMTP, configurar Youtube y Last.fm para Koel y hacer muchas más cosas.

Recarga el servidor Nginx para aplicar los cambios.

Si quieres restablecer tu contraseña de administrador, puedes hacerlo emitiendo el siguiente comando.

$ php artisan koel:admin:change-password

Si quieres escanear la biblioteca multimedia en busca de archivos actualizados, puedes hacerlo mediante el siguiente comando.

$ php artisan koel:sync

Deberías ver la siguiente salida.

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

Añade al comando el sufijo -v que te dará más detalles como los errores de sincronización.

Incluso puedes configurar este comando como una tarea cron, por ejemplo, para que se ejecute cada medianoche. Para ello, ejecuta el siguiente comando.

$ crontab -e

Selecciona 1(nano) como editor.

Pega la siguiente línea al final del archivo.

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

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida. Ahora, tu biblioteca multimedia se sincronizará cada medianoche.

Para más cosas, consulta la documentación oficial de documentación de Koel.

Configuración de HTTPS con Let’s Encrypt

Para usar Let’s encrypt, necesitamos instalar el programa Certbot .

Añade el repositorio.

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

Instala Certbot.

$ sudo apt install python-certbot-nginx

Instala el certificado.

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

Si es la primera vez que utilizas la herramienta en este servidor, tienes que aceptar las condiciones e introducir tu dirección de correo electrónico. Di no cuando te pregunten si quieres compartir tu correo electrónico con la fundación EFF.

Si lo consigues, certbot te preguntará cómo quieres configurar tus ajustes HTTPS.

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):

Selecciona 2 y luego pulsa ENTER. Tu certificado ya está instalado y activado. Tu certificado se renovará automáticamente en 90 días.

Conclusión

Con esto concluye nuestro tutorial. Ya puedes transmitir medios de comunicación desde tu servidor a tu antojo.

También te podría gustar...