Наша Платформа Интернет-радио состоит из нескольких основных компонентов:
- Интерфейс администратора, где администратор может создавать новые радио аккаунты на сервере.
- Интерфейс радио-вещателя, где владелец станции управляет эфиром станции.
- Вещательное “ядро”, которое осуществляет обработку звука, планирование эфира и формирует стрим радио.
Она так же зависит от системных сервисов операционной системы 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
Отладка:
- Проверьте запущен ли uWSGI процесс командой
ps -Af | grep uwsgi | grep sc_radio - Проверьте системные логи Supervisord в
/var/log/supervisor/supervisord.log - Проверьте системные логи Nginx в
/var/log/nginx/error.log - Если сервис 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 - Проверьте запускается ли административный интерфейс с консоли сервера, перейдя в директорию
/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
Отладка:
- Проверьте запущен ли uWSGI процесс командой
ps -Af | grep uwsgi | grep <USERNAME> - Проверьте системные логи Supervisord в
/var/log/supervisor/supervisord.log - Проверьте системные логи Nginx в
/var/log/nginx/error.log - Если сервис 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 - Проверьте запускается ли административный интерфейс с консоли сервера, перейдя в директорию
/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>/dev/null 2>/dev/nullна настоящие файлы логов для сохранения потоков stdout/stderr каждой из утилит, чтобы посмотреть логи их рабты. - Попробуйте запустить каждую из утилит вручную из терминала, чтобы посмотреть их вывод и возможные сообщения об ошибках, например
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