We use icecast without a proxy, which means the following configuration options need to be set:
<icecast>
<listen-socket>
<port>80</port>
</listen-socket>
<listen-socket>
<port>443</port>
<ssl>1</ssl>
</listen-socket>
<paths>
<!--
The bundle is a combination of multiple certificates,
use Let's encrypt's certbot to generate them.
-->
<ssl-certificate>/etc/icecast2/bundle.pem</ssl-certificate>
</paths>
<security>
<changeowner>
<user>icecast2</user>
<group>icecast</group>
</changeowner>
</security>
</icecast>We also host the website through icecast. To build it, run bundler<ruby-version> exec jekyll build in the website directory. On the side of icecast, set the following config options for the website to work:
<icecast>
<paths>
<webroot>/srv/tpr/website/_site</webroot>
<alias source="/" destination="/index.html"/>
<alias source="/tpr" destination="/tpr.html"/>
</paths>
</icecast>The icecast mountpoint is occupied by ezstream. The sample config in the ezstream directory should be kept updated with the changes of the config on the server. We don't keep the config itself there because of the password contained within.
In the future, you can copy the config and create another radio station by occupying another mountpoint with ezstream by running it with another systemd service.
Ezstream utilizes the playlist in /srv/music/tpr.txt, which is a list of absolute paths to music files. The music files accepted by ezstream are listed in the configuration file.
The images/nowplaying.sh script is used to generate images of the currently playing song on the background of the images/tpr.png image.
The scripts in ffmpeg directory are used for streaming the contents of the radio onto various social streaming sites.