Webradio in der Cloud – Einrichtung von LibreTime als Radio Station

Wir haben wieder in einer Kooperation mit dem Verein klangtapete e.V. ein neues Projekt gestartet. Ziel war es eine Website und ein Backend für ein eigenes Webradio zu erstellen. In Zeiten der Podcast-Flut ist es vielleicht ein wenig anachronistisch ein Webradio zu starten, aber der primäre Zweck des Projekts soll die Präsentation diverser Audioinhalte sein, die wiederrum von jungen Erwachsenen und Jugendlichen erstellt werden.

Freie Software für ein entsprechendes Backend gibt es. Zum einen ist da AzuraCast, ein relativ neues Projekt, welches mit einem kurzen und einfachem Skript die Möglichkeit bietet ein System mit Web-Interface zu erstellen, welches sogar mehrere unterschiedliche Streams und damit Radio Stationen verwalten kann. Auch wenn die Einrichtung da einfach war, so gab es in der Praxis einige Probleme mit dem System, die auch durch ein nicht so ganz übersichtliches Web-Interface mit verstärkt wurden. Auch die geplanten und einprogrammierten Sendungen wurden nicht zuverlässig abgespielt und last-minute Änderungen führten teilweise zu einem richtigen Chaos im Programm.

Als zweite Alternative gibt es LibreTime, welches als Fork aus dem nicht mehr weiterentwickelten Sourcefabric Airtime entstanden ist. Allerdings ist auch da die Weiterentwicklung schleppend.

© LibreTime.org

Installation von LibreTime

Im wesentlichen kann die Installation von der Documentation auf der offiziellen Website übernommen werden (siehe libretime.org/install ), es gibt aber einige Änderungen die bei einem aktuellen Betrieb beachtet werden müssen. Als Basis und zum Start wird ein installiertes Ubuntu Server System vorausgesetzt.

Die statische IP (bei einer Cloud Instanz in der Regel schon gegeben) kann hier konfiguriert werden:

cd /etc/netplan && ls  # find the netplan filename
sudo nano ##-netcfg.yaml

Wenn die Netplan Konfiguration leer ist, dann das folgende Beispiel benutzen um die Datei entsprechend zu ergänzen. 192.168.123.456/24 ist in diesem Beispiel entsprechend die Server IP, die als statisch vorausgesetzt wird und 192.168.123.1 das Gateway, welches auch als primärer DNS-Server benutzt wird (hier könnte man auch öffentliche DNS-Nameserver eintragen).

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      addresses: [192.168.123.456/24]
      gateway4: 192.168.123.1
      nameservers:
        addresses: 192.168.123.1

Danach die Datei speichern und anschließend den Befehl sudo netplan apply ausführen.

Jetzt kommen wir zu den Firewall Einstellungen und den ersten wichtigen Unterschied zu der offiziellen Dokumentation. Wir aktivieren die vorinstallierte Firewall bei Ubuntu und dann brauchen LibreTime und der Icecast-Server folgende offene Ports:

sudo ufw enable
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8000/tcp
sudo ufw allow 8001/tcp
sudo ufw allow 8002/tcp

Im Gegensatz zur originalen Dokumentation öffnen wir auch den Port 443, da wir für das Webinterface nur verschlüsselte Verbindungen über https zulassen wollen.

Zuerst müssen wir Git selbst erst einmal installieren. Dies erfolgt einfach über folgende Befehle:

sudo apt update
sudo apt upgrade
sudo apt install git -y

Als nächstes installieren wir LibreTime selbst, indem wir uns die Dateien von Github holen, und starten mit dem lezten Befehl das Installationsskript, welches alles bequem für uns einrichtet:

git clone https://github.com/LibreTime/libretime.git
cd libretime
sudo ./install -fiap

Als nächstes konfigurieren wir die benötigten Dienste, damit diese schon beim Booten mit starten:

sudo systemctl enable libretime-liquidsoap
sudo systemctl enable libretime-playout
sudo systemctl enable libretime-celery
sudo systemctl enable libretime-analyzer
sudo systemctl enable apache2
sudo systemctl enable rabbitmq-server

Falls eine Fehlermeldung kommt, kann man hinter den Dienstnamen noch .service schreiben. Beispielhaft sieht das dann so aus:

sudo systemctl enable apache2.service

Als nächstes passen wir die Konfiguration bei Apache an, damit das Webinterface bei Apache nicht über den unverschlüsselten Port 80 sondern, mit ein kostenloses Zertifikat von Let’s Encrypt abgesichert, über den Port 443 läuft.

Dafür benötigen wir zunächst zwei Domains oder Subdomains, welche jeweils in einem A-Eintrag auf die passende IP vom Server verweisen. Wir nehmen als Beispiel radio.nerdworking.de und icecast.nerdworking.de.

Dann öffnen wir als erstes die Konfigurationsdatei von Icecast:

sudo nano /etc/icecast2/icecast.xml

Anschließend suchen wir die Zeile <hostname>localhost</hostname> im Dokument und ersetzen diese durch:

<hostname>icecast.nerdworking.de</hostname>

Anschließend starten wir den Icecast Server neu mit dem Befehl

sudo systemctl restart icecast2

Als nächstes richten wir das passende Zertifikat noch ein. Dafür benutzen wir certbot von Let’s Encrypt den wir erstmal installieren und dann benutzen, um das passende Zertifikat zu generieren. Wichtig hier, die Subdomain radio.nerdworking.de muss durch eine eigene ersetzt werden:

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python3-certbot-apache
sudo certbot certonly --apache

Anschließend bearbeiten wir noch die Apache Seitenkonfiguration. Zunächst öffnen wir die Konfigurationsdatei:

sudo nano /etc/apache2/sites-available/airtime-vhost.conf

Danach in der Konsole fden Inhalt des Dokuments mit folgendem Text ersetzen, vorher aber noch radio.nerdworking.de in die eigene Subdomain umändern:

<VirtualHost *:443>
      SSLEngine on
      SSLProtocol All -SSLv2 -SSLv3
      SSLCompression off
      SSLCertificateFile /etc/letsencrypt/live/radio.nerdworking.de/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/radio.nerdworking.de/privkey.pem

      ServerName radio.nerdworking.de
      #ServerAlias www.radio.nerdworking.de

      ServerAdmin admin@radio.nerdworking.de

      DocumentRoot /usr/share/airtime/php/airtime_mvc/public
      DirectoryIndex index.php

      <Directory /usr/share/airtime/php/airtime_mvc/public>
              Options Indexes FollowSymLinks MultiViews
              AllowOverride all
              Order allow,deny
              Allow from all
      </Directory>
</VirtualHost>

<VirtualHost *:80>
      ServerName radio.nerdworking.de

      ServerAdmin admin@radio.nerdworking.de

      DocumentRoot /usr/share/airtime/php/airtime_mvc/public
      Redirect permanent /login https://radio.nerdworking.de/login

      SetEnv APPLICATION_ENV "production"

      <Directory /usr/share/airtime/php/airtime_mvc/public>
              Options Indexes FollowSymLinks MultiViews
              AllowOverride All
              Order allow,deny
              Allow from all
      </Directory>
</VirtualHost> 

Mit Strg+X Abschließen; speichern, bestätigen und beenden und dann noch Apache neu starten:

sudo service apache2 restart

Fertig, die erste Einrichtung ist geschafft. Jetzt kann unter der eigenen Adresse, bzw. in diesem Beispiel unter https://radio.nerdworking.de im Browser die Einrichtung beendet werden und ein Administrator-Account angelegt werden.

Ein Problem besteht allerdings noch. Aktuelle Browser lassen Streaming nur noch über https, also verschlüsselt, zu. Momentan streamt der Icecast Server noch über http auf Port 80. Dieses Problem wird in einem zukünftigen Artikel beschrieben und Schritt-für-Schritt behoben.

Dieser Artikel ist entstanden durch eine Projektarbeit in Kooperation mit dem Verein klangtapete e.V. Falls du gerne Unterstützung für ähnliche Projekte haben würdest, kontaktiere uns gerne.