Наша Платформа Интернет-радио состоит из нескольких основных компонентов:

  • Интерфейс администратора, где администратор может создавать новые радио аккаунты на сервере.
  • Интерфейс радио-вещателя, где владелец станции управляет эфиром станции.
  • Вещательное “ядро”, которое осуществляет обработку звука, планирование эфира и формирует стрим радио.

Она так же зависит от системных сервисов операционной системы Linux, таких так: Nginx, Apache, MySQL, Cron, Supervisord, ProFTPd, FFMPEG, Python и различные системные библиотеки.

Основные правила отладки:

В случае, если какой-либо компонент перестал функционировать, Вы можете:

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

Интерфейс администратора

Является Django/Python/Javascript приложением, находящемся в папке /opt/sc_radio сервера. Приложение работает под управлением Python контейнера uWSGI, файлы конфигурации сервисов доступны в:

  • Supervisord: /etc/supervisor/conf.d/sc_radio.conf
  • Nginx: /etc/nginx/conf.d/sc_radio.conf

Отладка:

  1. Проверьте запущен ли uWSGI процесс командой ps -Af | grep uwsgi | grep sc_radio
  2. Проверьте системные логи Supervisord в /var/log/supervisor/supervisord.log
  3. Проверьте системные логи Nginx в /var/log/nginx/error.log
  4. Если сервис Supervisord запущен и работает и при этом нет ошибок в системном логе, попробуйте включить логи идивидуально в /etc/supervisor/conf.d/sc_radio.conf заменив stdout_logfile=/dev/null на путь к лог-файлу, например stdout_logfile=/tmp/sc_uwsgi.log, перезапустите Supervisor сервис командой service supervisor restart и проверьте логи админки в файле /tmp/sc_uwsgi.log
  5. Проверьте запускается ли административный интерфейс с консоли сервера, перейдя в директорию /opt/sc_radio и выполнив команду в терминале ./manage.py shell. Если команда успешно выполняется (не показывает ошибок, например, соединения с БД) и показывает консоль - приложение в порядке, в противном случае она выведет подробную информацию о возможной ошибке или сбое. Наиболее типичными ошибками являются ошибки с зависимостями в пакетах Python и невозможносью подключиться к Базе Данных.

Интерфейс радио-вещателя

Django/Python/Javascript приложение, находится в папке /var/users/<USERNAME>/app. Приложение работает под управлением Python контейнера uWSGI, файлы конфигурации сервисов доступны в:

  • Supervisord: /etc/supervisor/conf.d/<USERNAME>.conf
  • Nginx: /etc/nginx/conf.d/<USERNAME>.conf

Отладка:

  1. Проверьте запущен ли uWSGI процесс командой ps -Af | grep uwsgi | grep <USERNAME>
  2. Проверьте системные логи Supervisord в /var/log/supervisor/supervisord.log
  3. Проверьте системные логи Nginx в /var/log/nginx/error.log
  4. Если сервис Supervisord запущен и работает и при этом нет ошибок в системном логе, попробуйте включить логи идивидуально в /etc/supervisor/conf.d/<USERNAME>.conf заменив stdout_logfile=/dev/null на путь к лог-файлу, например stdout_logfile=/tmp/sc_uwsgi.log, перезапустите Supervisor сервис командой service supervisor restart и проверьте логи панели управления в файле /tmp/sc_uwsgi.log
  5. Проверьте запускается ли административный интерфейс с консоли сервера, перейдя в директорию /var/users/<USERNAME>/app и выполнив команду в терминале ./manage.py shell. Если команда успешно выполняется (не показывает ошибок, например, соединения с БД) и показывает консоль - приложение в порядке, в противном случае она выведет подробную информацию о возможной ошибке или сбое. Наиболее типичными ошибками являются ошибки с зависимостями в пакетах Python и невозможносью подключиться к Базе Данных.

Вещательное ядро

Состоит из двух бинарных файлов:

  • content_indexer - утилита, которая обрабатывает закачанную на сервер для вещания через Авто-диджей музыку. Она вытаскивает обложки из треков (или ищет их на музыкальных сервисах), расчитывает уроверь громкости в файлах, обрабатывает ID тэги.
  • radiopoint - главный процесс, который непосредственно создает поток на радио, управляет эфиром диджеев, кодирует аудио и управляет каналами вещания.

Эти программы сильно оптимизированы на быстродействие и написаны на языке C++. Находятся они в папке /usr/local/bin сервера.

Сервис обработки музыки

Используется для обработки MP3/FLAC файлов, закачиваемых пользователями через WEB-интерфейс панели управления вещателя или через FTP. Этот сервис синхронизирует файлы на диске с музыкальной библиотекой радио, расчитывает длительность воспроизведения, уровень звука, подгружает обложки треков. Сервис использует сторонную программу: loudgain для расчёта уровня громкости в файлах.

Этот сервис запускается вещательным ядром, если оно обнаруживает новые файлы на диске и дополнительно каждые 5 минут через CRON правило: */5 * * * * root /usr/local/bin/content_indexer 1>/dev/null 2>/dev/null

это правило прописано в /etc/crontab.

Отладка:

Лог этого сервиса находится индивидуально в папке каждого радио аккаунта в

/var/users/<USERNAME>/log/indexer.log

Плюс к этому, можно перенаправить потоки STDERR/STDOUT этого сервиса, если в CRON правиле

*/5 * * * * root /usr/local/bin/content_indexer 1>/dev/null 2>/dev/null

поменять команду на

*/5 * * * * root /usr/local/bin/content_indexer 1>>/path/to/output.log 2>>/path/to/error.log

Либо можно просто запустить content_indexer в консоли сервера и посмотреть вывод команды. Если есть проблема с подключением к БД или другие проблемы - Вы сможете это увидеть в консоли.

Сервис использует файл конфигурации /opt/bin/indexer.cfg и подключается к серверу MySQL с правами root и пароль пользователя root указан в этом файле, т.е. если Вы сменили пароль root для MySQL - его необходимо поменять и в этом конфиге.

Вещательное ядро

Обычно, если аккаунт пользователя не отключен и работает без ошибок, в системе должен быть запущен процесс “radiopoint” с конфиг-файлом пользователя. Это можно проверить командой ps -Af | grep radiopoint | grep <USERNAME>", у одного пользователя может быть запущено несколько таких процессов - по одному на каждую станцию в аккаунте.

Отладка: Файл конфигурации находится в: /var/users/<USERNAME>/conf/radiopoint_<SERVER_ID>.conf

В этом конфиге можно поменять LOG=0 на LOG=3, чтобы в лог-файле, указанном в параметре LOGPATH появился детальный отчёт (лог) о работе вещательного ядра. После смены этого параметра в конфиг-файле необходим перезапуск радио через WEB-интерфейс радио вещателя или командой kill в терминале. Утилиты, которые запускаются периодически для сбора статистики слушателей также проверяют запущен ли этот процесс и перезапускают его автоматически, если он по каким-либо причинам не запущен.

Для подклчюения логов без необходимости перезапуска радио можно отправить сигнал SIGUSR2 процессу “radiopoint” этого пользователя через команду kill.

Для этого сначала получите PID запущенноо процесса командой ps -Af | grep radiopoint | grep <USERNAME>" и далее запустите kill -SIGUSR2 <PID> для подключения логов. Повторная отправка этого сигнала процессу остановит подробные логи.

Utilities

Дополнительные утилиты, необходимые для работы нашей Платформы Интернет-радио запускаются через системный сервис CRON, расписание их запуска хранится в файле /etc/crontab и выглядит примерно так:

1. */5 * * * * root /usr/local/bin/content_indexer 1>/dev/null 2>/dev/null
2. */1 * * * * root python3 /opt/bin/sc_stats 1>/dev/null 2>/dev/null
3. */15 * * * * root python3 /opt/bin/sc_backup 1>/dev/null 2>/dev/null
4. */1  * * * * root python3 /opt/bin/sc_accounts 1>/dev/null 2>/dev/null
5. 0    * * * * root python3 /opt/bin/awstats 1>/dev/null 2>/dev/null
6. 30 2 * * 1 root /usr/bin/letsencrypt renew
  • (1) - Сервис обработки аудио-файлов.
  • (2) - Утилита, которая обходит каждый радио-аккаунт и собирает данные статистики слушателей с Shoutcast/Icecast.
  • (3) - Скрипт бэкапа и восстановления пользовательских аккаунтов (настраивается в административном интерфейсе).
  • (4) - Создаёт и удаляет аккаунты радио на сервере, когда Вы их добавляете или удаляете из админки.
  • (5) - Скрипт сбора статистики на AWSTATS, который использует логи Icecast/Shoutcast для генерации отчётов.
  • (6) - Обновляет SSL сертификаты на сервере через LetsEncrupt.

Вы можете запустить каждую из этих утилит отдельно в терминале, чтобы проверить её работу.

Отладка:

  1. Измените 1>/dev/null 2>/dev/null на настоящие файлы логов для сохранения потоков stdout/stderr каждой из утилит, чтобы посмотреть логи их рабты.
  2. Попробуйте запустить каждую из утилит вручную из терминала, чтобы посмотреть их вывод и возможные сообщения об ошибках, например python3 /opt/bin/sc_accounts покажет Вам сообщения от утилиты, создающей аккаунты на сервере.

Наша Платформа Интернет-радио зависит от описанных ниже системных сервисов Linux, в случае возникновения проблем имеет смысл проверить их работоспособность.

Supervisord

  • команда перезапуска сервиса: service supervisor restart
  • системный лог сервиса: /var/log/supervisor/supervisord.log

Nginx

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

  • /etc/nginx/conf.d/<USERNAME>.conf - для интерфейса вещателя
  • /etc/nginx/conf.d/sc_radio.conf - для приложения админа

Отладка:

По умолчанию, логи Nginx отключены для экономии жесткого диска, их можно подключить изменив строки

access_log  /dev/null;
error_log   /dev/null;

на

access_log  /path/to/access.log;
error_log   /path/to/error.log;

в каждом из файлов конфигурации интерфейсов админа или вещателя, но обычно достаточно проверки общесистемного лога Nginx в файле /var/log/nginx/error.log

  • Команда перезапуска сервиса: service nginx restart

MySQL

MySQL хранит данные от интерфейсов администратора и вещателя в базах данных. Используется дефолтный конфигурационный файл дистрибутива Linux без изменений. Если после установки нашей Платформы Вы по какой-либо причине поменяли пароль пользователя root от MySQL - поменяйте его в следующих конфигурационных файлах:

  • /opt/bin/indexer.cfg
  • /opt/bin/utils.ini в секции “[MySQL]”

Отладка:

Наиболее частые проблемы с MySQL - это выход его из строя, повреждение таблиц БД (из-за проблем с диском, например или отключением питания), что приводит к невозможности его запуска. Конкретную проблему можно получить из системного лог файла MySQL в папке /var/log/mysql сервера. Для перезапуска сервиса используйте команду service mysql restart

или

service mariadb restart

Если установлен сервер MariaDB.

ProFTP

Сервер FTP по умолчанию, запущен и работает на порту 21. Он имеет стандартную настройку, дополненную поддержкой сервера MySQL для хранения учетных записей пользователей.

Файл конфигурации находится в файле /etc/proftpd.conf для CentoS Linux и папке /etc/proftpd/ для Ubuntu Linux.

  • команда перезапуска сервиса: service proftpd restart
  • системный лог-файл: /var/log/proftpd/proftpd.log