Я заметил, что большинство гайдов в интернете и на нашем форуме либо устарели, либо не соответствуют тем стандартам, которые я хотел бы видеть для своих радиостанций.
На данный момент у меня уже две полноценные станции - обе отлично работают и являются важной частью ролевого отыгрыша моего персонажа (и да, немного рекламы — это 88 и 129).
Для их создания я использовал собственный хостинг. Ссылки на него оставлять не буду, в сети достаточно качественных вариантов, которые вы сможете подобрать под свои задачи.
ОС: Терминальный Ubuntu (использовал 24.03) без UI
Софт:
Icecast — сервер, который раздаёт поток слушателям.
Liquidsoap — программа, которая формирует сам поток из музыки.
Эта комбинация проста, стабильна и не требует большого количества ресурсов.
Порядок установки:
1. Установка Icecast2
sudo apt update
sudo apt install icecast2
2. Настройка конфига /etc/icecast2/icecast.xml:
В файле /etc/icecast2/icecast.xml я прописал:
Порт для каждой станции (у меня это 8040 и 8041)
<listen-socket>
<port>8040</port>
<bind-address>0.0.0.0</bind-address>
</listen-socket>
<listen-socket>
<port>8041</port>
<bind-address>0.0.0.0</bind-address>
</listen-socket>
Хостнейм (указал текущий айпишник машины, не заморачивался - звездочками закрасил)
<hostname>193.*.*.*</hostname>
Блоки аутентификации
<authentication>
<!-- Sources log in with username 'source' -->
<source-password>testsource</source-password>
<!-- Relays log in with username 'relay' -->
<relay-password>relaytest</relay-password>
<!-- Admin logs in with the username given below -->
<admin-user>admintest</admin-user>
<admin-password>admintest</admin-password>
</authentication>
Пароль указал для примера.
Перезапуск службы осуществляется командой (после изменений - обязательна ее перезагрузка):
systemctl restart icecast2
3. Установка и настройка Liquidsoap
sudo apt install liquidsoap
Для каждой станции я сделал свой .liq файл, где указал:
Путь до папки с треками
Параметры подключения к Icecast (IP, порт, пароль, mount point)
Формат потока (MP3, битрейт 128 kbps)
Полный конфиг - ниже.
set("init.allow_root", true)
set("log.file.path", "/tmp/liquidsoap2.log")
music = playlist("/media/radio2", mode="random")
# Добавляем fallback с тишиной, чтобы не было fallible ошибки
radio = fallback([music, blank(duration=2.0)])
output.icecast(
%mp3(bitrate=128),
host = "localhost",
port = 8041,
password = "testsource",
mount = "live2",
name = "Terminal Radio",
description = "Radio from headless Ubuntu",
genre = "Various",
radio
)
Что за что отвечает?
music - адрес до музыки + мод "random", что случайно выбирает песню
host - имя хоста при переходе на (IP:8041)
port - порт
password - пароль source-password из конфига icecast
mount - маунт странички с радио (в данном примере - IP:8041/live2)
3. Открытие порта 8041 (для примера):
sudo ss -tulnp | grep 8041
sudo ufw allow 8041/tcp
Автозапуск станций
Чтобы станции работали круглосуточно и автоматически перезапускались при перезагрузке сервера, я создал для каждой systemd-сервис. Это избавило от необходимости держать терминал открытым.
sudo nano /etc/systemd/system/liquidsoap.service
В сервисе прописываем:
[Unit]
Description=Liquidsoap Radio Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/liquidsoap /root/radio.liq
Restart=on-failure
[Install]
WantedBy=multi-user.target
Сохраняем эту службу, далее:
sudo systemctl daemon-reload
sudo systemctl enable liquidsoap
sudo systemctl start liquidsoapchill
Должно запуститься, проверить - sudo systemctl status liquidsoapchill
Итог:
В итоге получил станцию, которая всегда в онлайне и доступны по ссылке:
http://<IP>:8041/live2
За диагностикой ваших стендов - пишите мне, отвечу. Для оперативности - лучше в Фейс (https://face.gtaw.io/KoSi). Просьба писать по РП - "привет, слышал ты помогаешь со станциями?" и т.д.