Recovery and deployment of internet radio from scratch


Client

Community of independent artists with a mobile application and an audience of several dozen daily listeners


Challenge

After losing a rented VPS (along with the active configuration, website, and broadcast history), it was necessary to completely restore broadcasting for two internet radio stations. The only input data was a set of mp3 files. The task required deploying a new server, setting up an automated broadcasting platform, recreating a landing page with an embedded player, and ensuring stable 24/7 operation.


Solution

1. Infrastructure and control panel
  • Rented a new VPS and installed Hestia Control Panel as the base server management layer
  • Hestia provided: basic protection (fail2ban, firewall), automatic acquisition and renewal of Let’s Encrypt certificates, domain management, and website backup
  • Created a separate domain in Hestia for AzuraCast β€” for obtaining SSL certificates; the domain was configured as a reverse proxy to the AzuraCast port
  • Nginx within Hestia acted as a frontend proxy: terminated TLS and forwarded traffic to the internal service
2. AzuraCast β€” broadcasting platform
  • Installed AzuraCast (self-hosted, Docker variant) from scratch on the prepared server
  • Deployed two independent radio stations within a single installation:
    • Station 1 β€” meditative and ethnic music, long compositions (including tracks up to 30 minutes in duration)
    • Station 2 β€” original music by independent artists from the community
  • Configured the broadcasting stack: Liquidsoap (automation and rotation) + Icecast (streaming server for listeners)
  • Uploaded and cataloged the entire media library from the provided mp3 files
3. Rotation and broadcast scheduling
  • Configured smart rotation taking into account track duration: long compositions (20–30 minutes) were moved to the night schedule to avoid disrupting the daytime listening experience
  • Daytime broadcast composed of short and medium tracks with a comfortable rhythm
  • Added jingles (station IDs) at 30-minute intervals β€” to create a radio feel and station branding
  • Configured playlists with different rotation modes (sequential, shuffled, scheduled)
4. Statistics and monitoring
  • Activated the built-in AzuraCast statistics module (AzuraCast Analytics) based on InfluxDB
  • Data collection: real-time listener count, connection history, listener geography, popular tracks, peak loads
  • The data confirmed the audience: 20–30 unique listeners daily, sessions lasting several hours, peaks up to 50 simultaneous connections
5. Broadcasting formats and streams
  • Configured multiple Mount Points for each station with different bitrates:
    • High quality: MP3 320 kbps for desktop clients
    • Medium quality: MP3 128 kbps for mobile devices and the embedded player in the application
    • AAC / OGG as alternative formats
  • Configured stream metadata: station name, current track, cover art β€” all transmitted in ICY metadata
6. Landing page on Joomla
  • On the same server (separate domain via Hestia) deployed Joomla CMS with bilingual configuration (ru / en)
  • Used Helix3 Ultimate Framework + SP Page Builder page constructor β€” allowed building a landing page without manual coding
  • Site structure: homepage with community and radio station descriptions, embedded HTML5 player from AzuraCast (iframe embed) for both stations, contact information
  • The site is accessible via direct links and serves as an entry point for listeners outside the mobile application
7. Backup
  • AzuraCast backup configured on schedule using the built-in script: full backup (configuration, database, media library) saved locally
  • Configured backup replication via SSH to a remote server β€” to protect against data loss in case of primary host failure (this scenario had already occurred previously)
  • Website backup (Joomla) β€” via the built-in Hestia mechanism

Technologies

Linux
Linux
Nginx
Nginx
Docker
Docker
Bash
Bash
Joomla
Joomla
Let's Encrypt
Let's Encrypt

Results

βœ… Recovery: broadcasting resumed from scratch using the only source data β€” a set of mp3 files
βœ… Two stations: independent broadcasts with different formats and rotation schedules
βœ… Audience: 20–30 daily listeners, sessions lasting several hours, peaks up to 50 simultaneous connections
βœ… Reliability: 24/7 operation, multi-level backup (local + remote SSH)
βœ… Security: SSL/TLS for all entry points, fail2ban, isolated domains
βœ… Maintenance: technical support for ~2 years β€” updates, adding tracks, website edits


Architecture

graph TB A[Listeners / Mobile App] --> B[Nginx / Hestia :443] B --> C[AzuraCast Docker] C --> D[Liquidsoap β€” automation] D --> E[Icecast β€” streaming] E --> A B --> F[Joomla β€” landing page] F --> G[Embedded AzuraCast player] C --> H[InfluxDB β€” statistics] C --> I[Local backup] I --> J[Remote server via SSH]

Duration

2–3 days (deployment + configuration + media library population)

+ 2 years of technical support


Price

from $200