MAATRIX / Блог / Как установить и настроить Icecast на VPS

Как установить и настроить Icecast на VPS

MAATRIX

Если вы делаете интернет-радио, стрим лекций или фоновую музыку для сайта, рано или поздно упрётесь в вопрос — где брать поток. Готовые SaaS-сервисы либо дорогие, либо режут битрейт и ставят рекламу между треками. Icecast закрывает эту задачу без посредников: вы поднимаете сервер на своём VPS, подключаете источник (хоть плеер, хоть автоматизированный плейлист) и раздаёте поток слушателям напрямую — с полным контролем над качеством, лимитами и доменом.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Icecast и когда он нужен

Icecast — открытый потоковый медиасервер, который существует с конца 90-х и с тех пор почти не менял протокол. Именно поэтому он до сих пор остаётся стандартом де-факто для интернет-радио: любой плеер, который умеет проигрывать SHOUTcast/Icecast-поток (VLC, встроенные плееры на сайтах, мобильные радио-приложения), понимает его без танцев с бубном.

Сервер сам по себе не кодирует и не генерирует звук — он принимает поток от источника (энкодера) и раздаёт его слушателям, дублируя на нужное число точек подключения (mount points). Источником может быть:

  • Liquidsoap — если нужна автоматизация: плейлисты, ротация, джинглы, переключение на прямой эфир;
  • BUTT (Broadcast Using This Tool) — простой GUI-энкодер для прямых эфиров с микрофона;
  • ffmpeg — для перекодирования существующего потока или файла в формат Icecast;
  • любой DJ-софт с поддержкой Shoutcast/Icecast-выхода (Mixxx, Virtual DJ и т.д.).

Типичные сценарии: интернет-радиостанция, фоновая музыка для e-commerce сайта, ретрансляция подкаста в реальном времени, учебные и корпоративные аудиотрансляции. Если вам нужна не разовая трансляция, а постоянно работающий сервис с предсказуемой нагрузкой, отдельный VPS для этого разумнее шэрингового хостинга — подробнее про параметры под стриминг есть в статье аренда VPS для стриминга в России.

Требования к серверу и подготовка VPS

Icecast сам по себе лёгкий — процессор почти не грузит, вся нагрузка упирается в канал и оперативную память на буферы. Прикидка по ресурсам:

ПараметрМинимумКомфортно
CPU1 vCPU2 vCPU
RAM512 МБ1-2 ГБ
Канал (аплинк к серверу)зависит от битрейта источникаот 5 Мбит/с
Канал (раздача слушателям)битрейт × число слушателейс запасом ×2-3

Ключевая цифра — исходящий трафик. При битрейте 128 кбит/с и 100 одновременных слушателей вам нужно около 12,8 Мбит/с исходящего канала непрерывно (128 × 100 / 1000). Если провайдер VPS ограничивает или тарифицирует трафик, посчитайте это заранее — суточный расход в примере выше уже больше 130 ГБ. Это ориентир для прикидки, точная цифра зависит от вашего битрейта, кодека и реального числа слушателей.

Для установки понадобится:

  • VPS с Ubuntu 24.04 LTS (подойдёт и Debian 12, команды почти идентичны);
  • root-доступ или пользователь с sudo;
  • домен, если планируете HTTPS (для радио это не обязательно технически, но браузеры и мобильные приложения всё активнее требуют защищённое соединение).

Подключаемся по SSH и обновляем систему:

apt update && apt upgrade -y

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Icecast2 на Ubuntu 24.04

Icecast есть в стандартных репозиториях Ubuntu и Debian, поэтому ставится одной командой:

apt install icecast2 -y

В процессе установки debconf спросит несколько параметров: hostname, source-пароль, relay-пароль, admin-пароль. Если экран настройки не появился (бывает при неинтерактивной установке) или вы хотите переконфигурировать позже — вызовите его вручную:

dpkg-reconfigure icecast2

Проверьте, что сервис включён и не запускается автоматически до вашей настройки — на некоторых сборках Ubuntu после установки Icecast стоит на паузе, пока вы не подтвердите конфиг:

systemctl status icecast2

Если видите Active: inactive (dead) — это нормально, пока не отредактирован конфиг и не выставлен флаг автозапуска (см. ниже).

Настройка icecast.xml: точки монтирования, пароли, лимиты

Основной конфиг лежит в /etc/icecast2/icecast.xml. Откройте его редактором:

nano /etc/icecast2/icecast.xml

Ключевые блоки, которые стоит проверить и поправить:

<icecast>
    <location>Earth</location>
    <admin>admin@yourdomain.com</admin>

    <limits>
        <clients>200</clients>
        <sources>5</sources>
        <queue-size>524288</queue-size>
        <client-timeout>30</client-timeout>
        <header-timeout>15</header-timeout>
        <source-timeout>10</source-timeout>
        <burst-size>65536</burst-size>
    </limits>

    <authentication>
        <source-password>ваш-надёжный-пароль</source-password>
        <relay-password>ваш-relay-пароль</relay-password>
        <admin-user>admin</admin-user>
        <admin-password>другой-надёжный-пароль</admin-password>
    </authentication>

    <hostname>stream.yourdomain.com</hostname>

    <listen-socket>
        <port>8000</port>
    </listen-socket>
</icecast>

Что важно понимать по каждому пункту:

  • clients — максимум одновременных слушателей. Ставьте с запасом, но не бесконечность: каждый лишний слот — потенциальный расход канала при DDoS-подобной нагрузке.
  • sources — сколько источников (энкодеров) может подключиться одновременно. Для одной радиостанции с резервным источником достаточно 2-3.
  • source-password — пароль, которым энкодер (Liquidsoap, BUTT) авторизуется при подключении к серверу. Обязательно замените дефолтный.
  • admin-password — доступ к веб-панели администрирования Icecast, где видно статистику по слушателям в реальном времени.
  • burst-size — сколько данных сервер отдаёт сразу при подключении нового слушателя, чтобы плеер быстрее начал играть без пустого буфера. 64 КБ — разумное значение по умолчанию.

Точки монтирования (mount points) можно не объявлять явно в конфиге — Icecast создаёт их автоматически, когда источник подключается по нужному пути (например, /stream.mp3 или /radio.ogg). Но если хотите жёстко зафиксировать параметры конкретного потока — название, публичность в каталоге, максимум слушателей отдельно на этот mount — добавьте блок:

<mount type="normal">
    <mount-name>/radio.mp3</mount-name>
    <max-listeners>150</max-listeners>
    <public>1</public>
    <stream-name>Мой канал</stream-name>
    <stream-description>Описание радиостанции</stream-description>
</mount>

После правок разрешите автозапуск и запустите сервис:

sed -i 's/ENABLE=false/ENABLE=true/' /etc/default/icecast2
systemctl enable --now icecast2
systemctl restart icecast2

Проверить, что сервер поднялся, можно локально:

curl -I http://localhost:8000

Ответ 200 OK или HTTP/1.0 200 OK с заголовками Icecast означает, что сервис слушает порт.

Firewall, домен и SSL через Nginx

Порт 8000 (или тот, что вы указали в listen-socket) нужно открыть в фаерволе. Если используете UFW:

ufw allow 8000/tcp
ufw allow OpenSSH
ufw enable

Подробный разбор правил и типичных ошибок UFW — в статье как установить и настроить фаервол UFW на VPS.

Отдавать поток напрямую с порта 8000 работает, но у этого подхода два минуса: нет HTTPS «из коробки» и адрес выглядит как http://ваш-ip:8000/radio.mp3, что неудобно для пользователей и небезопасно для мобильных приложений, которые всё чаще блокируют смешанный контент. Решение — поставить Nginx перед Icecast как обратный проксирующий сервер и повесить на него сертификат.

Общий подход к настройке Nginx-прокси описан в статье как установить и настроить Nginx как обратный прокси на VPS, здесь — специфика именно для потокового аудио. Важный нюанс: Icecast стримит долгоживущее соединение, поэтому в конфиге нужно явно отключить буферизацию, иначе Nginx будет накапливать данные вместо мгновенной передачи слушателю:

server {
    listen 443 ssl http2;
    server_name stream.yourdomain.com;

    ssl_certificate     /etc/letsencrypt/live/stream.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/stream.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_buffering off;
        proxy_request_buffering off;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}

Сертификат Let's Encrypt выпускается через certbot стандартным способом — если раньше не занимались этим на своём VPS, пошагово всё расписано в статье как установить и настроить Let's Encrypt SSL на VPS. После выпуска сертификата слушатели подключаются уже по адресу https://stream.yourdomain.com/radio.mp3, а порт 8000 можно закрыть для внешнего доступа и оставить проксирование только через Nginx на 127.0.0.1.

Подключение источника и проверка вещания

Проще всего проверить связку — через BUTT: указываете адрес сервера, порт, mount point и source-пароль из icecast.xml, выбираете аудиовход (микрофон или виртуальный кабель) и жмёте старт. Если всё настроено верно, в веб-панели администрирования Icecast (http://ваш-домен/admin/, логин — admin-user/admin-password из конфига) появится активный mount point со статистикой слушателей.

Для постоянного вещания с плейлистом обычно ставят Liquidsoap — он умеет собирать очередь треков, миксовать джинглы и переключаться на live-вход, когда ведущий выходит в эфир. Минимальный скрипт для трансляции папки с треками в Icecast:

radio = playlist("/home/radio/music")
radio = fallback(track_sensitive=false, [radio, blank()])

output.icecast(%mp3(bitrate=128),
  host="127.0.0.1", port=8000,
  password="ваш-source-password",
  mount="radio.mp3",
  radio)

Запускается это как systemd-сервис, чтобы вещание переживало перезагрузку сервера и падение процесса:

[Unit]
Description=Liquidsoap radio stream
After=network.target icecast2.service

[Service]
User=radio
ExecStart=/usr/bin/liquidsoap /home/radio/radio.liq
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Проверить реальный поток из терминала можно так — если команда возвращает поток данных без ошибок, слушатель на другом конце подключится корректно:

curl -s https://stream.yourdomain.com/radio.mp3 --output test.mp3 --max-time 10
file test.mp3

file должен опознать файл как MP3-аудио — если вместо этого выводится HTML или пустой файл, проблема в проксировании или в том, что источник не подключён к mount point.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Icecast поддерживает несколько радиостанций на одном сервере?

Да, через несколько mount points — каждый со своим путём (/radio1.mp3, /radio2.mp3) и, при желании, отдельными лимитами слушателей. Один процесс Icecast обслуживает их все.

Чем Icecast отличается от SHOUTcast?

Протоколы близкие и большинство плееров понимают оба, но Icecast — открытый проект с открытым исходным кодом, тогда как SHOUTcast — проприетарный продукт с более закрытой моделью развития. Для нового проекта Icecast обычно предпочтительнее.

Можно ли раздавать видео, а не только аудио?

Технически Icecast умеет проксировать любой поток данных, но заточен он именно под аудио-протоколы (MP3, Ogg Vorbis, Opus, AAC). Для видео есть более подходящие инструменты — RTMP-серверы или HLS-стек.

Сколько слушателей выдержит один VPS?

Упирается почти всегда в канал, а не в CPU. При битрейте 128 кбит/с и канале 100 Мбит/с теоретический потолок — несколько сотен слушателей одновременно, но реальную цифру нужно проверять нагрузочным тестом именно на вашей конфигурации.

Нужен ли HTTPS для радиопотока?

Не строго обязателен для работы самого протокола, но многие мобильные приложения и современные браузеры настороженно относятся к незащищённому контенту, а часть плееров вовсе отказывается проигрывать http:// поток на HTTPS-странице. Ставить сертификат стоит почти всегда.

Как ограничить доступ к потоку по IP или паролю?

Через дополнительный модуль аутентификации в блоке <authentication> конкретного mount point (<mount-name><authentication type="htpasswd">) — можно завести отдельный файл с логинами и паролями слушателей, если поток платный или закрытый.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →