Для работы потребуется SSH доступ к серверу с правами root. Установка будет производится в консольном режиме через команды терминала. Если для получения привилегий root требуется выполнить команду sudo, то перед началом установки необходимо выполнить команду:
sudo su -
Установка необходимых пакетов и библиотек
Устанавливаем зависимости с помощью apt:
apt update apt install git libtiff-dev libjpeg-dev zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev python-tk uwsgi uwsgi-plugin-python3 redis-server build-essential wget pwgen libmariadb-dev nginx python-is-python3
Далее устанавливаем утилиту pip, она потребуется для установки используемых python-библиотек:
apt install python3-pip && pip install --upgrade pip
Далее необходимо скачать установочные deb-пакеты smarty-lite, jsonrpctcp и ujson, и установить их:
dpkg -i smarty-lite*.deb wget http://dl.micro.im/packets/release/python3-jsonrpctcp/jsonrpctcp-0.2.0.tar.gz pip install jsonrpctcp-0.2.0.tar.gz wget http://dl.micro.im/packets/release/ujson/bullseye/ujson-2.0.4.dev0.tar.gz pip install ujson-2.0.4.dev0.tar.gz
Будьте внимательны — необходимо использовать установочный пакет Smarty Lite именно для версии Debian Bullseye, он располагается в директории bullseye. В противном случае при выполнении дальнейших команд может возникнуть ошибка undefined symbol: PyFPE_jbuf.
После установки основных пакетов необходимо выполнить установку python-библиотек, используемых в Smarty Lite. Для этого нужно выполнить:
pip install -r /usr/share/microimpuls/smarty-lite/requirements.txt
Установка СУБД для работы Smarty Lite
Smarty Lite поддерживает различные СУБД, в базовом варианте рекомендуется использовать MySQL или MariaDB, для Debian Bullseye устанавливаем MariaDB:
apt install mariadb-server
Создаём пользователя для подключения Smarty Lite в БД и указываем пароль в настройках Smarty Lite:
export DBPASSWORD=`pwgen -s 16 1` echo "CREATE DATABASE smarty CHARACTER SET = utf8;" | mysql -u root echo "SET default_storage_engine=InnoDB;" | mysql -u root echo "CREATE USER 'smarty'@'%
' IDENTIFIED BY '$DBPASSWORD';" | mysql -u root echo "GRANT ALL PRIVILEGES ON smarty.* TO 'smarty'@'%
';" | mysql -u root echo "FLUSH PRIVILEGES;" | mysql -u root sed -i -e 's/PUT DB PASSWORD HERE/'"$DBPASSWORD"'/g' /etc/microimpuls/smarty-lite/smarty-lite.py
Последняя команда заменяет строку «PUT DB PASSWORD HERE» на сгенерированный автоматически пароль в файле /etc/microimpuls/smarty-lite/smarty-lite.py
— файл настроек Smarty Lite.
В файле настроек Smarty Lite по умолчанию указаны настройки подключения к локально установленной MySQL-совместимой СУБД (в данном примере это MariaDB), однако при необходимости можно установить СУБД на другую машину.
Подготовка конфигурации Web-сервера nginx и сервера приложений uWSGI
Прописываем секретный ключ для работы внутренних механизмов защиты Smarty Lite:
export SECRETKEY=`pwgen -s 32 1` sed -i -e 's/PUT RANDOM SECRET KEY HERE/'"$SECRETKEY"'/g' /etc/microimpuls/smarty-lite/smarty-lite.py
Активируем конфигурацию Smarty Lite для nginx и uwsgi:
ln -s /etc/nginx/sites-available/smarty-lite /etc/nginx/sites-enabled/smarty-lite ln -s /etc/uwsgi/apps-available/smarty-lite.ini /etc/uwsgi/apps-enabled/smarty-lite.ini
Изменяем дефолтный плагин uwsgi
с python
на python3
(строчка plugins
) в /etc/uwsgi/apps-available/smarty-lite.ini
Создаем директорию для кеша и логов nginx:
mkdir -p /var/cache/nginx/smarty-lite mkdir -p /var/log/nginx/microimpuls/smarty-lite
Конфигурируем хранение кеша nginx в tmpfs:
echo tmpfs /var/cache/nginx/smarty-lite tmpfs defaults,size=1200M 0 0 >> /etc/fstab mount -a
Изменяем лимит открытых сокетов для оптимальной работы uwsgi:
echo "net.core.somaxconn=64000" >> /etc/sysctl.conf sysctl -p
Установим правильные права на директории для логов и загрузки файлов в Smarty Lite:
chown -R www-data:www-data /var/log/microimpuls chown -R www-data:www-data /usr/share/microimpuls
Установка лицензионного ключа
Дальше необходимо прописать лицензионный ключ.
Для получения лицензионного ключа вам необходимо использовать HW key — отпечаток машины, на котором установлена Smarty Lite. Для его получения необходимо запустить uwsgi:
/etc/init.d/uwsgi restart
При каждом рестарте uwsgi не забудьте убедиться, что старые процессы uwsgi убиты (можно посмотреть с помощью ps aux | grep uwsgi
и обратить внимание на процессы с более ранним временем старта и убить их с помощью kill -9
при необходимости)
А затем в файле /var/log/uwsgi/app/smarty-lite.log
найти значение HW key, или воспользоваться командой:
cat /var/log/uwsgi/app/smarty-lite.log | grep "Exception: Key incorrect, HW key"
Например, полученный HW key будет иметь следующий вид:
9eb4a0c2b360c93e32cf2471780cda494705f0a9d026c69fe033d8c8
Это значение необходимо вставить в соответствующее поле в окне генерации лицензии в личном кабинете оператора, после чего скопировать получившийся ключ со всеми параметрами лицензии, которые необходимо прописать в файл конфигурации /etc/microimpuls/smarty-lite/smarty-lite.py
.
Генерация лицензии вызывается по кнопке «Сгенерировать новый лицензионный ключ» в соответствующем продукте в ЛК.
Копирование лицензии и всех параметров производится с помощью иконки «Скопировать» в строке с лицензионным ключом.
После добавления конфигурации лицензии необходимо проверить, что она валидна. Для этого перезапустим uwsgi и проверим логи на отсутствие ошибок лицензии и на остутствие Traceback логов из-за отсутствия дополнительных python библиотек.
/etc/init.d/uwsgi restart
Не забудьте убедиться, что старые процессы uwsgi убиты
Проверяем логи:
tail -n 1000 /var/log/uwsgi/app/*.log | grep "*** Starting" -A 100
Лог последнего запуска не должен содержать ошибок «Key Incorrect» и «Traceback»
Установка схемы БД
Выполним установку схемы базы данных Smarty Lite с помощью встроенного механизма миграций данных:
python /usr/share/microimpuls/smarty-lite/manage.py migrate --settings=settings.smarty-lite
Запуск сервисов
Перезапустим nginx и uwsgi с актуальными настройками:
/etc/init.d/nginx restart /etc/init.d/uwsgi restart
Не забудьте убедиться, что старые процессы uwsgi убиты
Установка системных настроек и примера конфигурации
Для быстрого старта использования Smarty Lite мы подготовили команду, которая установит системные настройки и создаст примеры данных — наборы телеканалов, EPG, тарифы, стриминг-сервисы и другие объекты, необходимые для работы сервиса IPTV & OTT. Для этого выполните:
python /usr/share/microimpuls/smarty-lite/manage.py setup_initial_data --settings=settings.smarty-lite
Затем вы сможете отредактировать их и добавить свои данные.
Настройка регулярных команд в crontab
Для корректной работы Smarty Lite и актуализации данных абонентов требуется настроить в crontab выполнение команд по расписанию, для этого в конце файла /etc/crontab
добавьте следующие строки:
*/1 * * * * root python /usr/share/microimpuls/smarty-lite/manage.py cache_channel_list --settings=settings.smarty-lite 0 5,9,13 * * * root python /usr/share/microimpuls/smarty-lite/manage.py epg_import --settings=settings.smarty-lite 0 3 * * * root python /usr/share/microimpuls/smarty-lite/manage.py clean_old_messages --days_count 3 --settings=settings.smarty-lite
Первая команда обновляет кеш телеканалов. Вторая команда импортирует EPG (телегид) каждые сутки 3 раза — в 5:00, 9:00 и 13:00 по времени сервера. Третья команда очищает старые недоставленные до абонентов текстовые сообщения и команды (с датой создания старше трех дней).
Создание пользователя и начало работы
Управление сервисом IPTV & OTT в Smarty Lite осуществляется через Web-панель управления.
Далее создадим пользователя с правами суперадминистратора для доступа в панель управления:
export ADMINPASSWORD=`pwgen -s 16 1` python /usr/share/microimpuls/smarty-lite/manage.py create_user --settings=settings.smarty-lite --reset_password=False --username=admin --password=`echo $ADMINPASSWORD` --is_admin=True --client_id=1 --is_superuser=True echo $ADMINPASSWORD
Последняя команда выведет сгенерированный пароль — сохраните его.
Для корректного отображения картинок/стилей в Django-админке необходимо поправить в каталоге
/etc/nginx/sites-enabled/smarty* путь к пакету django
для текущей версии python
Для этого необходимо обновить пути для следующих location
:
location ^~ /admin/media/css/ {
alias /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/css/;
}
location ^~ /admin/media/img/ {
alias /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/img/;
}
location ^~ /admin/media/js/ {
alias /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/js/;
}
location ^~ /media/static/admin/css/ {
alias /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/css/;
}
location ^~ /media/static/admin/img/ {
alias /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/img/;
}
location ^~ /media/static/admin/js/ {
alias /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/js/;
}
Для установленного python
версии 3.9.6 (проверить версию python
можно командой python --version
) в alias следует вместо 2.7 указать новую версию — 3.9.
Перезапускаем nginx для применения изменений:
systemctl restart nginx
Затем открываем в браузере панель управления Smarty Lite http://X.X.X.X:8180 и авторизуемся созданным пользователем (в нашем примере это admin и пароль, сгенерированный выше):
Далее необходимо установить и настроить абонентский портал, соединив его с API Smarty Lite. Через портал абонент получает доступ к сервисам IPTV & OTT.
После установки портала необходимо не забыть заменить в nginx конфигурации портала location srv1 на mw1 и после перезагрузить конфигурацию nginx:
/etc/init.d/nginx reload