Atlantic.Net Blog

Setup Personal Audio Streaming Server with Koel on Oracle Linux 8

Koel is a free, open-source, web-based personal audio streaming server written in Laravel. Koel client is written in Vue.js. Koel Player is the official mobile app for Koel, which supports both iOS and Android without the limitations of the mobile web version. Koel allows you to stream your music and access it from anywhere through the Internet.

In this post, we will show you how to install a Koel streaming server on Oracle Linux 8.

Prerequisites

  • A fresh Oracle Linux 8 server on the Atlantic.Net Cloud Platform
  • A root password configured on your server

Step 1 – Create Atlantic.Net Cloud Server

First, log in to your Atlantic.Net Cloud Server. Create a new server, choosing Oracle Linux 8 as the operating system with at least 2GB RAM. Connect to your Cloud Server via SSH and log in using the credentials highlighted at the top of the page.

Once you are logged in to your Oracle Linux 8 server, run the following command to update your base system with the latest available packages.

dnf update -y

Step 2 – Install Nginx, MariaDB and PHP

First, install Nginx and MariaDB with the following command:

dnf install nginx mariadb-server -y

Next, reset the default PHP modules and enable the PHP 8.0 module with the following command:

dnf module reset php
dnf module enable php:8.0

Next, install PHP 8.0 and other required dependencies with the following command:

dnf install php php-cli php-fpm php-json php-common php-mysqlnd php-zip php-gd  php-mbstring php-curl php-xml php-pear php-bcmath php-tokenizer openssl php-json -y

Once all the packages are installed, edit the PHP-FPM file:

nano /etc/php-fpm.d/www.conf

Change the user from Apache to Nginx:

user = nginx
group = nginx

Next, find the following line:

;listen = /run/php-fpm/www.sock

And replace it with the following line:

listen = 9000

Save and close the file, then start and enable the Nginx, MariaDB, and PHP-FPM services:

systemctl start nginx mariadb php-fpm
systemctl enable nginx mariadb php-fpm

Step 3 – Install Required Dependencies

Before starting, you will need to install some required dependencies on your server. First, install the development tools group package and Composer with the following command:

dnf group install "Development Tools"  -y
curl -sS https://getcomposer.org/installer -o composer-setup.php
php composer-setup.php --install-dir=/usr/local/bin --filename=composer

Next, enable the EPEL and RPM fusion repo with the following command:

dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm

Next, install the SDL2 and FFMPEG package with the following command:

dnf install http://rpmfind.net/linux/centos/8-stream/PowerTools/x86_64/os/Packages/SDL2-2.0.10-2.el8.x86_64.rpm -y
dnf install ffmpeg ffmpeg-devel -y

Step 4 – Create a Database and User for Koel

Next, you will need to create a database and user for Koel.

First, connect to MariaDB with the following command:

mysql

Once you are connected, create a database and user with the following command:

CREATE DATABASE koeldb;
CREATE USER 'koeluser'@'localhost' IDENTIFIED BY 'password';

Next, grant all the privileges to the Koel database with the following command:

GRANT ALL PRIVILEGES ON koeldb . * TO 'koeluser'@'localhost';

Next, flush the privileges and exit from MariaDB with the following command:

FLUSH PRIVILEGES;
EXIT;

Step 5 – Install Node.js and Yarn

Next, you will also need to install Node.js and Yarn on your server.

First, add the Node.js repository with the following command:

curl --silent --location https://rpm.nodesource.com/setup_14.x | bash -

Next, install Node.js with the following command:

dnf install nodejs -y

Once Node.js is installed, verify the Node.js version using the following command:

node --version

You will get the following output:

v14.20.0

Next, add the Yarn repo with the following command:

curl -sL https://dl.yarnpkg.com/rpm/yarn.repo | tee /etc/yum.repos.d/yarn.repo

Next, install the Yarn package using the following command:

dnf install yarn -y

Step 6 – Install and Configure Koel

First, download the Laravel installer with the following command:

composer global require laravel/installer

Next, download the latest version of Koel using the following command:

git clone https://github.com/koel/koel.git  --recursive

Next, change the directory to Koel and install all required dependencies with the following commands:

cd koel
npm install
npm audit fix
npm audit fix --force
composer install

Next, rename the example environment file:

mv .env.example .env

Next, edit the .env file:

nano .env

Define your database and other settings as shown below:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=koeldb
DB_USERNAME=koeluser
DB_PASSWORD=password

MEMORY_LIMIT=512
FFMPEG_PATH=/usr/bin/ffmpeg

Save and close the file, then migrate the database with the following command:

php artisan koel:init --no-interaction

Next, set the admin password with the following command:

php artisan koel:admin:change-password

Define your new admin password as shown below:

Changing the user's password (ID: 1, email: [email protected])

 Your desired password:
 > 

 Again, just to be sure:
 > 

Alrighty, the new password has been saved. Enjoy! 👌

Next, create a directory for Koel inside the Nginx web root:

mkdir /var/www/html/streaming/

Next, move the Koel directory to the streaming directory:

cd
mv ~/koel /var/www/html/streaming/

Step 7 – Configure Nginx for Koel

Next, create an Nginx virtual host configuration file for Koel:

nano /etc/nginx/conf.d/koel.conf

Add the following lines:

server {
        listen       80;
        server_name  koel.example.com;
        root         /var/www/html/streaming/koel/public;
        index index.html index.htm index.php;

        location / {
                try_files $uri /index.php$is_args$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              127.0.0.1:9000;
    fastcgi_index             index.php;
    fastcgi_split_path_info   ^(.+\.php)(/.+)$;
    fastcgi_intercept_errors  on;
    include                   fastcgi_params;
        }
    }

Save and close the file, then edit the Nginx main configuration file:

nano /etc/nginx/nginx.conf

Define the hash bucket size below the line http {:

server_names_hash_bucket_size 64;

Save and close the file, then set proper permissions and ownership:

chown -R nginx:nginx /var/www/html/streaming/
chmod -R 755 /var/www/html/streaming/

Finally, restart the Nginx and PHP-FPM services to apply the changes:

systemctl restart nginx php-fpm

Step 8 – Access Koel Web UI

Now, open your web browser and access the Koel web interface using the URL http://koel.example.com. You should see the Koel login page:
Koel login page
Provide the Koel default username as [email protected] and the password which you set earlier, then click on the Log In button. You should see the Koel dashboard on the following page:
Koel dashboard page

Conclusion

Congratulations! You have successfully installed and configured the Koel music streaming server on Oracle Linux 8. You can now upload media on your server, install the Koel client app on your smartphone and start listening to your music on your smartphone. Try Koel on dedicated hosting from Atlantic.Net!

Get started with 12 months of free cloud VPS hosting

Free Tier includes:
G3.2GB Cloud VPS Server Free to Use for One Year
50 GB of Block Storage Free to Use for One Year
50 GB of Snapshots Free to Use for One Year