MAATRIX / Блог / Icecast на Ubuntu 24.04: пошаговая установка

Icecast на Ubuntu 24.04: пошаговая установка

MAATRIX

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

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

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

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

Что такое Icecast и зачем он нужен

Icecast — это потоковый медиасервер с открытым исходным кодом, который принимает аудио- (и видео-) поток от источника и раздаёт его слушателям по HTTP. Источником может быть что угодно: DJ-софт вроде Mixxx, консоль вроде BUTT (Broadcast Using This Tool), или обычный ffmpeg, который транслирует файл или захват с микрофона.

Ключевая особенность архитектуры — разделение ролей:

  • Источник (source) подключается к серверу и льёт поток по протоколу source-client (по сути, расширенный HTTP PUT).
  • Icecast принимает этот поток и раздаёт его копии всем подключённым слушателям.
  • Слушатель просто открывает URL вида http://ваш-домен:8000/radio.mp3 в любом плеере или браузере.

Так как раздача идёт по HTTP, поток проходит почти через любой файрвол и NAT без танцев с бубном, а слушать его можно из VLC, из встроенного HTML5-аудио на сайте или из мобильных радио-приложений.

Для десятка-другого одновременных слушателей хватает самого скромного VPS: 1 vCPU и 1 ГБ RAM Icecast использует едва ли на четверть — львиная доля нагрузки это сетевой трафик на раздачу, а не CPU (кодирует источник, а не сервер).

Подготовка сервера

Обновите систему и поставьте базовые утилиты:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget nano ufw

Проверьте версию Ubuntu — инструкция рассчитана именно на 24.04 LTS:

lsb_release -a

Если сервер свежий, стоит сразу настроить файрвол — ниже мы откроем только нужные порты, подробный разбор ufw в отдельной статье. Часовой пояс лучше выставить в UTC или в ваш локальный, чтобы логи было проще читать:

sudo timedatectl set-timezone Europe/Moscow

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

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

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

Установка Icecast из репозитория

В Ubuntu 24.04 Icecast есть в стандартных репозиториях, версия в них — 2.4.4, актуальная стабильная ветка на конец августа 2026 года. Ставим:

sudo apt install -y icecast2

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

sudo dpkg-reconfigure icecast2

Мастер спросит:

  1. Icecast2 hostname — доменное имя или IP сервера.
  2. Source password — пароль, которым источник (ffmpeg/BUTT/Mixxx) авторизуется при подключении для вещания.
  3. Relay password — пароль для ретрансляции между серверами Icecast (если строите цепочку из нескольких серверов).
  4. Administration password — пароль администратора для веб-панели /admin/.

Обязательно запишите эти пароли — они понадобятся и в конфиге, и в клиенте-источнике. После установки сервис по умолчанию выключен, чтобы вы сначала настроили пароли:

sudo systemctl status icecast2

Настройка icecast.xml

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

sudo nano /etc/icecast2/icecast.xml

Разберём ключевые блоки. Сначала лимиты:

<limits>
    <clients>200</clients>
    <sources>4</sources>
    <queue-size>524288</queue-size>
    <client-timeout>30</client-timeout>
    <header-timeout>15</header-timeout>
    <source-timeout>10</source-timeout>
    <burst-on-connect>1</burst-on-connect>
    <burst-size>65535</burst-size>
</limits>
  • clients — максимум одновременных слушателей суммарно по всем точкам монтирования (mountpoints).
  • sources — сколько одновременных потоков-источников можно подключить (полезно, если хотите вещать сразу несколько станций или резервный поток).
  • burst-size — сколько данных сервер сразу отдаёт новому слушателю, чтобы плеер быстрее начал буферизацию и заиграл без задержки.

Пароли (если не задали через dpkg-reconfigure или хотите сменить):

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

Сетевые настройки:

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

По умолчанию Icecast слушает на порту 8000 на всех интерфейсах. Если нужно ограничить это конкретным IP сервера, добавьте тег <bind-address>:

<listen-socket>
    <port>8000</port>
    <bind-address>203.0.113.10</bind-address>
</listen-socket>

Блок hostname должен совпадать с тем, что вы указывали при установке, — это важно для формирования правильных ссылок в директории станций и в веб-интерфейсе:

<hostname>stream.example.com</hostname>

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

sudo systemctl enable --now icecast2
sudo systemctl status icecast2

Если всё в порядке, в логе /var/log/icecast2/error.log будет строка о старте сервера, а на http://IP-сервера:8000/ откроется стартовая страница Icecast со статусом (по умолчанию пока без активных потоков).

Открываем порт и настраиваем файрвол

Если используете ufw, откройте порт вещания:

sudo ufw allow 8000/tcp comment 'Icecast stream'
sudo ufw enable
sudo ufw status

Если позже вынесете Icecast за nginx-проксирование (см. ниже), внешний порт 8000 можно будет закрыть совсем и оставить только 80/443 — так поток пойдёт через привычный HTTPS-порт, и слушателям не придётся указывать нестандартный порт в URL.

Запуск источника вещания: ffmpeg, файл, live-микрофон

Icecast сам по себе ничего не кодирует — он только раздаёт то, что ему присылает источник. Самый универсальный вариант источника на сервере — ffmpeg.

Поставьте ffmpeg:

sudo apt install -y ffmpeg

Вариант 1: трансляция плейлиста файлов по кругу

Создайте директорию с треками в формате MP3 и текстовый плейлист:

mkdir -p /home/radio/tracks
ls /home/radio/tracks/*.mp3 > /home/radio/playlist.txt

Запуск бесконечной трансляции плейлиста в Icecast:

ffmpeg -re -stream_loop -1 -f concat -safe 0 -i /home/radio/playlist.txt \
  -vn -c:a libmp3lame -b:a 128k -content_type audio/mpeg \
  icecast://source:ваш-source-пароль@127.0.0.1:8000/radio.mp3

Разбор ключей: -re — читать файл с реальной скоростью воспроизведения (иначе ffmpeg прожуёт плейлист мгновенно); -stream_loop -1 — зациклить плейлист; -b:a 128k — битрейт потока (128 кбит/с — разумный компромисс для музыки, для разговорного контента хватит 64-96 кбит/с); radio.mp3 в конце URL — это mountpoint, точка монтирования, которую слушатели добавляют к адресу сервера.

Вариант 2: захват звука с линейного входа/микрофона (живой эфир)

ffmpeg -f alsa -i hw:1,0 -c:a libmp3lame -b:a 128k -content_type audio/mpeg \
  icecast://source:ваш-source-пароль@127.0.0.1:8000/live.mp3

Здесь hw:1,0 — устройство захвата, посмотреть список доступных можно командой arecord -l.

Автозапуск источника через systemd

Чтобы плейлист поднимался вместе с сервером и перезапускался при сбое, оформите его сервисом:

sudo nano /etc/systemd/system/icecast-source.service
[Unit]
Description=Icecast ffmpeg source
After=icecast2.service
Requires=icecast2.service

[Service]
Type=simple
User=radio
ExecStart=/usr/bin/ffmpeg -re -stream_loop -1 -f concat -safe 0 -i /home/radio/playlist.txt -vn -c:a libmp3lame -b:a 128k -content_type audio/mpeg icecast://source:ваш-source-пароль@127.0.0.1:8000/radio.mp3
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now icecast-source

Теперь при перезагрузке сервера сначала поднимется Icecast, затем — источник вещания.

Точки монтирования и метаданные

Каждый поток в Icecast — это отдельный mountpoint (в примерах выше — /radio.mp3 и /live.mp3). На одном сервере можно вести несколько независимых станций одновременно, ограничение — только <sources> из лимитов конфига.

Отдельные настройки для конкретного mountpoint задаются блоком <mount> в icecast.xml:

<mount type="normal">
    <mount-name>/radio.mp3</mount-name>
    <max-listeners>150</max-listeners>
    <public>1</public>
    <stream-name>Мое радио</stream-name>
    <stream-description>Музыка и разговоры 24/7</stream-description>
    <stream-genre>various</stream-genre>
</mount>

<public>1</public> — станция анонсируется в публичном каталоге yp.xml, <public>0</public> — скрытый поток, доступный только по прямой ссылке.

Метаданные "сейчас играет" обновляются через curl, если вещаете файлами через ffmpeg без встроенной поддержки ICY-метаданных:

curl -s "http://admin:ваш-admin-пароль@127.0.0.1:8000/admin/metadata?mount=/radio.mp3&mode=updinfo&song=Artist - Track Title"

Это удобно завязать на скрипт, который парсит имя текущего файла из плейлиста и раз в несколько секунд шлёт этот запрос.

SSL и проксирование через nginx

Слушать поток по HTTP на 8000 порту работает, но современные браузеры и мобильные приложения всё чаще требуют HTTPS, особенно если плеер встроен на сайт по HTTPS (mixed content блокируется). Правильный путь — поставить nginx перед Icecast и терминировать SSL на нём, а Icecast оставить слушать только на localhost.

Общий подход настройки nginx как reverse proxy подробно разобран в отдельной статье про nginx, а получение сертификата — в статье про Let's Encrypt SSL. Специфика для Icecast — потоковый ответ не должен буферизоваться nginx целиком, иначе слушатели будут получать поток рывками. Конфиг location:

location /radio.mp3 {
    proxy_pass http://127.0.0.1:8000/radio.mp3;
    proxy_set_header Host $host;
    proxy_buffering off;
    proxy_request_buffering off;
    proxy_read_timeout 3600s;
    proxy_send_timeout 3600s;
}

После этого поменяйте <bind-address> в icecast.xml на 127.0.0.1, закройте порт 8000 в ufw для внешнего доступа и слушайте станцию по адресу https://stream.example.com/radio.mp3 — без нестандартного порта в URL, что заметно упрощает жизнь мобильным клиентам и вставке плеера на сайт.

Мониторинг и обслуживание

Веб-статус сервера доступен на /status.xsl (или /status2.xsl для более компактной версии) — там видно активные потоки, число слушателей и битрейт. Административная панель — /admin/ с логином admin и паролем из конфига: там можно принудительно отключить слушателя, посмотреть список подключений и историю.

Логи стоит проверять при любых странностях:

sudo tail -f /var/log/icecast2/error.log
sudo tail -f /var/log/icecast2/access.log

Для долгоживущего радио стоит настроить внешний контроль доступности потока — если источник (ffmpeg) упадёт и Restart=always не сработает по какой-то причине, слушатели должны узнать об этом раньше, чем вы. Здесь подойдёт связка с Uptime Kuma — можно мониторить и HTTP-код ответа mountpoint, и сам факт, что поток вообще отдаёт байты.

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

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

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

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

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

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

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

Формально Icecast 2 умеет отдавать Ogg/Theora и WebM-видеопотоки, но на практике для видео уже давно используют более специализированные решения — Icecast остаётся нишевым инструментом именно для аудио, и лучше не пытаться выжать из него видеостриминг в проде.

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

Зависит от битрейта потока и канала сервера, а не от CPU. Условный расчёт: при битрейте 128 кбит/с и канале 1 Гбит/с теоретический потолок — несколько тысяч одновременных слушателей, но на практике стоит закладывать запас по трафику и следить за реальной нагрузкой через /status.xsl, а не полагаться на теоретические цифры.

Icecast или SHOUTcast — что выбрать?

Icecast — open source, бесплатен без ограничений, поддерживает несколько mountpoints на одном порту и лучше документирован сообществом. SHOUTcast исторически был проприетарным и с более жёсткими лицензионными условиями. Для нового проекта в 2026 году Icecast — более естественный выбор.

Как защитить поток паролем для слушателей, а не только для источника?

В блоке <mount> можно добавить <authentication type="htpasswd"><option name="filename" value="/etc/icecast2/listener.htpasswd"/></authentication> и создать файл через htpasswd -c. Это полезно для приватных или платных трансляций.

Что делать, если поток заикается у слушателей?

Чаще всего дело либо в недостаточном исходящем канале сервера при пиковой нагрузке, либо в буферизации на стороне nginx (proxy_buffering off решает это), либо в нестабильном источнике — проверьте, что ffmpeg-процесс не перезапускается циклически из-за проблем с сетью или файлами плейлиста.

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

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

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