This blog's original SHOUTcast guide ran a radio station on a Windows VPS with Winamp. The idea still works, but the tools have changed: Flash players are gone, browsers play streams natively, and free self-hosted software now gives you a whole radio station, AutoDJ and web dashboard included, in one command on a Linux VPS. This guide covers the options and walks through the two most common setups.
The Pieces of an Internet Radio Station
- Streaming server: accepts one audio stream and fans it out to every listener. Icecast (open source) and SHOUTcast DNAS (proprietary, free tier available) are the two standards.
- Source / AutoDJ: plays your playlist (or a live DJ) and encodes it to MP3 or AAC for the server. Liquidsoap is the most popular open-source AutoDJ; SHOUTcast's equivalent is its transcoder.
- Player: an HTML5
<audio>tag on your website, or any app that opens a stream URL (VLC, mobile radio apps, smart speakers). - Management: uploading music, playlists, schedules, DJ accounts and listener statistics. AzuraCast bundles all of the above with a web UI.
Which Option Should You Choose?
| AzuraCast | Icecast + Liquidsoap | SHOUTcast DNAS | |
|---|---|---|---|
| Cost | Free, open source | Free, open source | Free tier; paid features |
| Setup effort | One install script | Config files | Config files + transcoder |
| Web dashboard | Yes (uploads, playlists, schedules, stats) | Basic status page | Admin page |
| AutoDJ | Built in (Liquidsoap) | Liquidsoap script | Transcoder |
| Live DJs | Yes, per-DJ logins | Yes, via Liquidsoap | Yes |
| Best for | Most people | Minimal, scriptable setups | Listing in the SHOUTcast directory |
For a new station, AzuraCast is the easiest path. Choose plain Icecast + Liquidsoap if you want the smallest possible footprint or want everything in version-controlled config files.
Choosing a VPS
- CPU and RAM: AzuraCast's documented minimum is 2 GB RAM and 20 GB of disk (4 GB RAM recommended). Icecast + Liquidsoap alone runs comfortably on 1 GB.
- Disk: enough for your music library plus room to grow.
- Bandwidth is the real limit. Each listener of a 128 kbps stream uses 128 kbps, which is about 57.6 MB per hour. 100 simultaneous listeners need about 12.8 Mbps of upload and, listening around the clock, roughly 4 TB of transfer per month. Check the VPS plan's monthly transfer allowance.
Option 1: AzuraCast (Recommended)
On a fresh Ubuntu LTS VPS, the official installer sets up Docker and the whole stack:
# Ubuntu LTS VPS, as root (or with sudo)
mkdir -p /var/azuracast
cd /var/azuracast
curl -fsSL https://raw.githubusercontent.com/AzuraCast/AzuraCast/main/docker.sh > docker.sh
chmod a+x docker.sh
./docker.sh install
# Later: update to the latest release
./docker.sh update-self
./docker.sh update
Then open the server's address in a browser, create the admin account, and add a station. From the dashboard you can:
- Upload music (in the browser, or by SFTP for big libraries) and build playlists with rotation rules.
- Schedule shows, jingles and playlists by time of day.
- Create streamer (DJ) accounts so presenters can go live from software like BUTT or Mixxx, with AutoDJ taking over when they disconnect.
- Get a public player page and embed code, plus listener statistics.
Open the ports the installer uses. Web traffic uses 80 and 443, and station streams use the 8000 range:
# Allow SSH, the web UI and the station port range (adjust if you changed ports)
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8000:8999/tcp
ufw enable
AzuraCast can use Icecast (built in) or SHOUTcast as each station's streaming server; Icecast works out of the box.
Option 2: Icecast + Liquidsoap (Minimal)
If you only need a 24/7 playlist, two packages and one script do the job:
sudo apt install -y icecast2 liquidsoap
# The installer asks for the hostname and the source/relay/admin passwords.
# They end up in /etc/icecast2/icecast.xml (listen port 8000 by default).
sudo systemctl enable --now icecast2
A Liquidsoap script that shuffles a folder of MP3s to Icecast. mksafe plays silence instead of stopping if the playlist is ever empty:
# /etc/liquidsoap/radio.liq - shuffle a folder of MP3s to Icecast forever
music = playlist("/srv/radio/music")
radio = mksafe(music)
output.icecast(
%mp3(bitrate=128),
host = "localhost",
port = 8000,
password = "YOUR_ICECAST_SOURCE_PASSWORD",
mount = "radio.mp3",
name = "My Radio",
description = "24/7 music",
radio
)
Run it as a service so it restarts automatically:
# /etc/systemd/system/radio.service
[Unit]
Description=Liquidsoap AutoDJ
After=network-online.target icecast2.service
Wants=network-online.target
[Service]
User=radio
ExecStart=/usr/bin/liquidsoap /etc/liquidsoap/radio.liq
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo useradd --system --no-create-home --shell /usr/sbin/nologin radio
sudo mkdir -p /srv/radio/music && sudo chown -R radio:radio /srv/radio
sudo systemctl daemon-reload
sudo systemctl enable --now radio
# Listen at http://YOUR_SERVER:8000/radio.mp3
Point a reverse proxy (nginx or Caddy) at Icecast if you want the stream on https://radio.example.com/radio.mp3: browsers on HTTPS pages block plain-HTTP audio.
What About SHOUTcast?
SHOUTcast DNAS still exists and runs on Linux and Windows. Its main draw is the SHOUTcast directory, which some radio apps use to find stations. The trade-offs are proprietary software and some features behind paid plans. If you want to be listed there, you can run SHOUTcast as the streaming server and keep Liquidsoap or AzuraCast for the AutoDJ. The Windows + Winamp SHOUTcast guide shows the classic setup.
Put the Player on Your Website
<!-- HTML5 player for your website (no Flash, no plugin) -->
<audio controls preload="none" src="https://radio.example.com/radio.mp3">
Your browser does not support audio playback.
</audio>
preload="none" stops browsers from downloading audio until someone presses play, which saves bandwidth.
Music Licensing
Running the software is the easy part. Playing commercial music to the public generally requires performance licenses: in the US, internet radio usually needs licenses from the performing rights organizations (ASCAP, BMI, SESAC, GMR) and from SoundExchange for the sound recordings. Rules differ by country. Without licenses, stick to music you own, have written permission to play, or that is released under a license allowing broadcast (some Creative Commons music, for example).
Frequently Asked Questions
How much does it cost to run an internet radio station?
The software can be free (AzuraCast, Icecast, Liquidsoap). A small VPS costs a few dollars a month; bandwidth and music licensing are the costs that grow with your audience.
Is Icecast better than SHOUTcast?
Icecast is open source, free and very widely supported; SHOUTcast offers its station directory and some commercial features. Both stream MP3 and AAC to the same players, so for most new stations Icecast (often through AzuraCast) is the simpler choice.
What is an AutoDJ?
Software that plays your playlists automatically, 24/7, and sends the audio to the streaming server. Liquidsoap (used by AzuraCast) and the SHOUTcast transcoder are common examples.
Can I run a radio station on a Windows VPS?
Yes. Icecast and SHOUTcast both run on Windows. Linux VPSs are cheaper and AzuraCast requires Linux, which is why most guides now use Linux.
Related: developing and automating a podcast radio station.

