2. Установка и настройка сервера Smarty

2.1. Где скачать установочные пакеты

Инсталляционные пакеты ПО распространяются через FTP, доступ к которому предоставляется на время действия договора.

2.2. Установка на ОС Linux Debian

Все модули Smarty поставляются в виде установочных deb-пакетов и устанавливаются утилитой dpkg. Обязательным модулем является smarty-base.

Для работы необходим web-сервер nginx, uwsgi и python 2.7, а также несколько других пакетов.

2.2.1. Установка зависимостей

Установка через apt-get:

sudo apt-get install nginx git python-dev python2.7 libmysqlclient-dev libtiff5-dev libjpeg62-turbo-dev zlib1g-dev
libfreetype6-dev liblcms2-dev libwebp-dev tcl8.5-dev tk8.5-dev python-tk uwsgi uwsgi-plugin-python redis-server

Установка утилиты pip:

wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py && rm get-pip.py

2.2.2. Установка Smarty и модулей

Установка через dpkg:

dpkg -i smarty*.deb
dpkg -i python2.7-jsonrpctcp*.deb

После установки пакетов Smarty необходимо установить python-библиотеки через pip:

sudo pip install -r /usr/share/nginx/html/microimpuls/smarty/requirements.txt

После установки пакета smarty-base создается конфигурационный файл для nginx в /etc/nginx/sites-available/smarty. По умолчанию настроен на домен smarty.example.com и слушает порт 80 и 8180. Необходимо перенастроить данный домен на необходимый.

Файлы Smarty размещаются в /usr/share/nginx/html/microimpuls/smarty.

2.2.3. Установка схемы базы данных

Первичная установка схемы базы данных осуществляется командой:

smarty_manage migrate --settings=settings.<settings filename>

2.2.4. Создание пользователя администратора

Создание пользователя с правами служебного администратора осуществляется командой:

smarty_manage createsuperuser --settings=settings.<settings filename>

2.2.5. Создание системных объектов в базе данных и примера настроек оператора

Для создания системных объектов Smarty в базе данных, а также примера настроек выполните команду:

smarty_manage setup_initial_data --settings=settings.<settings filename>

Примечание

Можно пропустить создание образца настроек оператора, добавив флаг --no-sample-data

2.2.6. Клонирование Client со всеми настройками оператора

В случае необходимости создания нового объекта Client и копирования всех данных можно использовать команду клонирования:

smarty_manage clone_client --src_client_id=<source client id> --settings=settings.<settings filename>
  • <source client id> - ID объекта Client, который нужно склонировать в новый Client.
  • <settings filename> - имя файла настроек Smarty, в котором должны быть установлены параметры подключения к БД (см. Описание основных параметров).

Примечание

Можно перенести также все телеканалы, фильмы, радиостанции, камеры и сервисы, используя соответствующие опции --clone-channels --clone-video --clone-radio --clone-cameras --clone-apps

2.2.7. Создание пользователя или восстановление пароля

В Smarty возможно создание или восстановление пользователя через команду create_user:

smarty_manage create_user --settings=settings.<settings filename> --username=new_user --password=new_password --is_admin=True --client_id=1 --is_superuser=True

Параметры:

  • –username - имя пользователя, обязательный.
  • –password - пароль, обязательный.
  • –is_admin - True или False, если True, то создаваемому пользователю будет доступна служебная часть сайта, по умолчанию False.
  • –client_id - ID клиента, к которому будет привязан создаваемы пользователь.
  • –is_superuser - True или False, если True, то будет создаен суперпользователь, по умолчанию False.
  • –monitoring_user - True или False, если True, то пользователь будет являться оператором мониторинга устройств, по умолчанию False.
  • –reset_password - если True, то в случае, если указанный username уже используется, то вместо создания нового будет изменён пароль у старого пользователя; по умолчанию False.

2.2.8. Создание Client

В Smarty возможно создание оператора (Client) через команду create_client:

smarty_manage create_client --settings=settings.<settings filename> --name=Client_name --api_key=api_key --domain_prefix=domain_prefix --email=email@example.com

Параметры:

  • –name - название оператора, обязательный.
  • –api_key - TVMW API Key, обязательный.
  • –domain_prefix - префикс домена оператора, обязательный.
  • –email - email оператора, обязательный.

2.3. Установка на ОС Linux CentOS

Поддержка CentOS является экспериментальной - корректная работа всех функций Smarty не гарантируется. Скрипт установки для fabric и примеры конфигурации на CentOS можно найти здесь: https://github.com/microimpuls/smarty-centos

2.4. Конфигурация Smarty

2.4.1. Файл настроек Smarty

После первичной установки базовый файл конфигурации Smarty находится по адресу /etc/microimpuls/smarty/base.py (симлинк на /usr/share/nginx/html/microimpuls/smarty/settings/base.py).

Основной файл конфигурации, используемый для production-режима работы - /etc/microimpuls/smarty/prod.py. На этот файл (или на другой используемый конфиг) должен указывать симлинк в /usr/share/nginx/html/microimpuls/smarty/settings/<setings name>.py. Именно в нем следует производить настройку Smarty, т.к. базовый файл конфигурации может быть перезаписан после установки обновлений.

Конфигурация производится путем присваивания значений переменным на Python.

2.4.1.1. Обслуживание нескольких инстансов Smarty на одном сервере

Для удобства конфигурации и размещения на одном сервере нескольких инстансов Smarty рекомендуется вместо использования файла настроек prod.py создать собственный файл с кратким символическим именем, совпадающим с названием сервиса, например myiptv.py.

Данное имя затем также рекомендуется использование как суффикс или префикс в именах файлов конфигурации nginx, uwsgi, именах папок для логов, pid-файлов и др.

2.4.2. Описание параметров конфигурации Smarty

Актуальная документация: https://microimpuls.com/docs/smarty/configuring-and-management/smarty-config https://microimpuls.com/docs/smarty/configuring-and-management/logging

2.4.3. Добавление лицензионного ключа сервера Smarty

Каждый инстанс Smarty привязывается к аппаратной и программной конфигурации сервера лицензионным ключом, который может быть ограничен по времени действия и максимальному числу настроенных Client ID (см. Мультипровайдер).

Лицензионный ключ настраивается в файле конфигурации в следующих переменных:

SMARTY_KEY = 'XXXXXXX-XXXXXXX-XXXXXXX-XXXXXXX'
SMARTY_MAX_CLIENTS = 2
SMARTY_AVAILABLE_UNTIL = 'dd.mm.yyyy'

Для получения ключа необходимо обратиться к своему менеджеру по договору.

2.4.4. Настройка кеширования

Для кеширования используется сервер Redis - является обязательным компонентом системы. Требуется версия Redis >= 2.6.

По умолчанию конфигурация подразумевает локальную установку сервера Redis на тот же сервер Smarty, однако при необходимости их можно разделить. Для изменения параметров подключения к Redis необходимо в конфигурации Smarty прописать массив CACHES следующим образом:

CACHES = {
    "default": {
        "BACKEND": "core.cache.backends.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
        }
    }
}

В файле конфигурации Redis /etc/redis/redis.conf необходимо прописать:

stop-writes-on-bgsave-error no

Для вступления изменений в силу требуется перезагрузить Redis и uwsgi.

Также поддерживается работа в кластерном режиме с группой серверов Redis, пример настройки:

CACHES = {
    "default": {
        "BACKEND": "core.cache.backends.RedisCache",
        "LOCATION": "redis://192.168.33.11:7000/0", # не используется, но необходимо
        "OPTIONS": {
            "REDIS_CLIENT_CLASS": "rediscluster.client.StrictRedisCluster",
            "CONNECTION_POOL_CLASS": "core.cache.cluster_connection.ClusterConnectionPool",
            "CONNECTION_POOL_KWARGS": {
                "startup_nodes": [
                    # masters
                    {"host": "192.168.33.11", "port": "7000"},
                    {"host": "192.168.33.12", "port": "7000"},
                    {"host": "192.168.33.13", "port": "7000"},
                ]
            }
        }
    }
}

2.4.5. Настройка модуля геолокации

Поддерживается несколько локаторов на основе IP-адреса абонента, работающие с разными источниками гео-данных. В служебной панели администрирования для настраиваемого Client ID необходимо установить используемый локатор, наиболее подходящий для оператора и его региона оказания услуг.

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

Все локаторы требуют создания/обновления своей базы данных. База данных может быть в виде SQL-таблиц или бинарных данных (либо и то, и то).

2.4.5.1. Локатор django-geoip (ipgeobase)

Представляет собой обёртку над https://django-geoip.readthedocs.org/en/latest/

Команда для обновления базы:

$ smarty_manage geoip_update --settings=settings.<settings name>

Создание стран и городов на основе данных django-geoip (работает только если в системе нет ни одной страны и города):

$ smarty_manage sync_geo_geoip --settings=settings.<settings name>

2.4.5.2. Локатор ip2location

Обновление базы:

$ smarty_manage update_ip2location --settings=settings.<settings name>

Эта команда скачивает бинарную базу данных для определения местоположения и CSV-базу для создания справочника городов и стран.

Создание стран и городов на основе данных ip2location (работает только если в системе нет ни одной страны и города):

$ smarty_manage sync_geo_ip2location --settings=settings.<settings name>

После выбора локатора и синхронизации данных механизм геолокации готов к использованию. Доступность тех или иных сервисов Middleware (телеканалы, фильмы, стриминг-сервисы, опции и т.д.) определяется тарифными пакетами (см. Возможности тарификации), в настройках которых можно указать те страны и города, в которых они действуют.

2.4.6. Настройка модуля мониторинга видеопотоков

Актуальная документация: https://microimpuls.com/docs/smarty/configuring-and-management/monitoring-and-alarming

2.4.7. Настройка модуля статистики и отчетов

Для сохранения данных телесмотрения абонентов используется сервер MongoDB.

Примечание

Минимальная версия MongoDB необходимая для работы - 3.4

Настройки задаются переменными в файле конфигурации Smarty.

MONGODB_HOST str
Адрес сервера MongoDB.
MONGODB_PORT int
Порт сервера MongoDB.
MONGODB_NAME str
Название базы данных.
MONGODB_USERNAME str
Имя пользователя для авторизации.
MONGODB_PASSWORD str
Пароль для авторизации.
MONGODB_AUTH_METHOD str
Метод авторизации. Метод авторизации зависит от версии MongoDB.

В секции INSTALLED_APPS в файле конфигурации Smarty необходимо добавить модуль viewstats.

2.4.8. Настройка модуля сбора статистики по абонентам

Для отображения информации внутри вкладки «Динамика абонентов» в секции INSTALLED_APPS в файле конфигурации Smarty необходимо добавить модуль smartystats и viewstats.

Примечание

После добавления модулей необходимо установить все недостающие миграции.

Помимо этого необходимо настроить корректную работу management-команд cache_max_online и save_stats.

2.4.9. Настройка модуля мониторинга устройств

Актуальная документация: https://microimpuls.com/docs/smarty/configuring-and-management/monitoring-and-alarming

2.4.10. Настройка модуля отправки SMS

SMS отправляются системой при использовании виджетов, интегрированных с сайтом, например, во время регистрации абонента. Настройки задаются переменными в файле конфигурации Smarty.

SMS_BACKED str
Используемый СМС-шлюз для отправки сообщений. Модуль, реализующий взаимодействие со шлюзом, должен располагаться в директории Smarty в папке sms/backends/.
SMS_ATTEMPTS int
Количество максимальных попыток отправки сообщения, после которого оно считается отправленным неуспешно.

2.4.10.1. Шлюз smsc.ru

Значение для SMS_BACKEND = 'sms.backends.smscru.SMSCBackend'

SMSC_LOGIN str
Имя пользователя в сервисе smsc.ru
SMSC_PASSWORD str
Пароль в сервисе smsc.ru
SMSC_SENDER str
Имя отправителя, которое будет отображаться в SMS, отправленных через сервис smsc.ru

2.4.10.2. Шлюз mobipace.com

Значение для SMS_BACKEND = 'sms.backends.mobipace.MobipaceBackend'

MOBIPACE_LOGIN str
Имя пользователя в сервисе mobipace.
MOBIPACE_PASSWORD str
Пароль в сервисе mobipace.
MOBIPACE_SENDER str
Имя отправителя для СМС-сообщений.

2.4.11. Подключение системы мониторинга ошибок Sentry

Для подключения Sentry необходимо в файле конфигурации Smarty добавить в INSTALLED_APPS модуль raven.contrib.django.raven_compat и прописать параметры подключения:

RAVEN_CONFIG = {
    'dsn': 'http://<LOGIN>:<PASS>@<SENTRY HOST>/<PROJECT>',
}

Строку подключения можно получить из настроек проекта в Sentry.

2.4.12. Настройка nginx и uwsgi

Образец файла конфигурации для nginx находится в файле /etc/nginx/sites-available/smarty.

Конфигурация для uwsgi находится в файлах /etc/uwsgi/apps-available/smarty и /etc/microimpuls/smarty/uwsgi/smarty.uwsgi, на него (или на другой используемый конфиг) должен указывать симлинк в /usr/share/nginx/html/microimpuls/smarty/<uwsgi settings name>.uwsgi.

2.4.13. Настройка мультиязычности контента в Smarty

Smarty позволяет сохранять в базе данных контент с названиями локализуемых полей на разных языках - например, названия телеканалов, фильмов, категорий, жанров, EPG и др. Чтобы активировать этот механизм, необходимо добавить в файл конфигурации параметр SMARTY_ADDITIONAL_LANGUAGES с перечнем необходимых языков (не более 5 дополнительных к основному языков), а также указать основной язык. Названия языков должны совпадать с названием локализации в абонентском приложении, по умолчанию используются двухбуквенные названия.

SMARTY_DEFAULT_LANGUAGE str
Название основного языка. По умолчанию ru.
SMARTY_ADDITIONAL_LANGUAGES list
Список дополнительных языков, задается в квадратных скобках с указанием значений через запятую, например: [ 'en', 'fr', 'de', 'es', 'pt' ] По умолчанию пустой.

После настройки параметров мультиязычности и перезагрузки uwsgi в панели администратора Smarty в полях формы локализуемых полей появится возможность указать название на дополнительных языках.

Для того, чтобы сервер Smarty в ответе на запрос API вернул значение на нужном языке, необходимо дополнительно передавать параметр lang. Подробнее в документации TVMiddleware API.

2.5. Системные команды Smarty и настройка crontab

Примечание

Внимание! Некоторые команды планировщика являются обязательными для функционирования сервиса.

2.5.1. Кеширование списка телеканалов для абонентских устройств

Команда:

smarty_manage cache_channel_list --settings=settings.<settings name>

Рекомендуется запускать эту команду каждую минуту. При пустом кеше списка телеканалов абоненту будет выдаваться сообщение, что список телеканалов пуст.

2.5.2. Импорт EpgChannel

Команда:

smarty_manage epg_channel_import --settings=settings.<settings name>

Данная команда поможет загрузить все каналы или обновить иконки из определенного источника. Для запуска обязательно необходимо указать epg_source_id или --epg_source_name.

Если команда вызывается для загрузки иконок или загрузки всех каналов из EpgChannelSource, то к загруженным иконкам по возможности будут созданы более маленькие копии следующих размеров: 500x500, 120x91 и 40x40.

Для источника обязательно должен существовать EpgChannelSource с указанием маски URL источника каналов. Для источников, у которых нет общего списка необходимо указывать epg_channel_id или channel_id.

Аргументы для запуска:

--epg_source_id
 Идентификатор EpgSource, для которого необходимо произвести импортирование каналов.
--epg_source_name
 Имя EpgSource, для которого необходимо произвести импортирование каналов.
--epg_channel_id
 Идентификатор EpgChannel, для которого необходимо произвести импортирование.
--channel_id Идентификатор Channel, для которого необходимо произвести импортирование.
--reimport_icons
 Если указан этот аргумент, то для всех импортированных каналов будет произведено обновление иконок.
--force_import Загрузка всех каналов из источника. Если указан данный аргумент то все аргументы кроме epg_source_id и epg_source_name будут проигнорированы.
--force_parser_handling
 Принудительно разрешает использовать передачу управления парсеру (равносильно TVMW_EPG_IMPORT_ALLOW_PARSER_HANDLING=True)
--force_disable_parser_handling
 Принудительно запрещает использовать передачу управления парсеру (равносильно TVMW_EPG_IMPORT_ALLOW_PARSER_HANDLING=False)

Использование опций –force_parser_handling и –force_disable_parser_handling приоритетнее параметра TVMW_EPG_IMPORT_ALLOW_PARSER_HANDLING.

Пример команды для повторного импортирования иконок для одного канала:

smarty_manage epg_channel_import –epg_source_id=1 –epg_channel_id=100 –reimport_icons –settings=settings.<settings name>

2.5.3. Импорт EPG

Команда:

smarty_manage epg_import --settings=settings.<settings name>

Рекомендуется запускать импорт несколько раз в день для поддержания актуальности телепрограммы (см. Настройка EPG и телеканалов). Если не произвести импорт EPG, то программа телепередач на устройстве абонента будет пустой.

Для того чтобы произвести импорт EPG для одного определенного источника необходимо передать параметр --epg_source_id или --epg_source_name.

В данную команду можно также передать параметр --epg_channel_id для импорта EPG только для определенного EpgChannel.

Также с помощью параметра --actual_days можно указать количество дней, когда загруженные EPG считаются актуальными, то есть все EPG, старше чем указанное количество дней, будут удалены.

Также эта команда позволяет генерировать на основе загруженного EPG контент и подборки, для этого необходимо передать параметр --create_content. Если необходимо только сгенерировать контент и подборки, то помимо предыдущего параметра нужно передать параметр --ignore_epg_import. Для данной опции работает фильтрация по EpgChannel и по источнику, однако генерироваться контент будет __для всех встречаемых EPG__, а не только загруженных.

2.5.4. Импорт EPG-премьер

Команда:

smarty_manage epg_premiere_import --settings=settings.<settings name>

Рекомендуется запускать 1-2 раза в день для поддержки актуальности списка премьер (см. Настройка EPG и телеканалов). Если не произвести импорт, то список премьер на устройстве абонента будет пустой.

В данную команду можно также передать параметр --epg_channel_id для импорта премьер только для определенного EpgChannel.

2.5.5. Команда списания/продления аккаунтов с помощью встроенного биллинга согласно рассчетным периодам

Команда:

smarty_manage check_accounts --settings=settings.<settings name>

Команда осуществляет деактивацию аккаунтов, для которых подошел к концу расчетный период, а также производит списание средств и продление действующих аккаунтов. Рекомендуется запускать каждую ночь (см. Описание встроенного биллинга).

2.5.6. Опрос анализаторов TS-потоков MicroTS (модуль мониторинга видеопотоков)

Актуальная документация: https://microimpuls.com/docs/smarty/configuring-and-management/management-commands#check_streams

2.5.7. Рассылка информационных сообщений на экраны устройств и email о приближении срока деактивации/необходимости оплаты

Команда:

smarty_manage send_activation_expires_messages --days_count <количество оставшихся дней> --settings=settings.<settings name>

Рекомендуется запускать каждый вечер.

2.5.8. Очистка старых недоставленных информационных сообщений

Команда:

smarty_manage clean_old_messages --days_count 3 --settings=settings.<settings name>

2.5.9. Повторная отправка SMS-сообщений, недоставленных с первого раза

Команда:

smarty_manage resend_sms --settings=settings.<settings name>

Рекомендуется запускать каждые 1-3 минуты.

2.5.10. Команда удаления всех сессий авторизации всех аккаунтов для заданного Client ID

Команда:

smarty_manage delete_authkeys --client_id=<client_id> --settings=settings.<settings name>

Внимание, выполнение команды приведет к логауту всех устройств.

2.5.11. Команда проверки доступности стриминг-сервисов для механизма отказоустойчивости

Команда:

python manage.py check_stream_services --settings=settings.<settings name>

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

Команда проверяет сервисы по тем методам проверки, которые настроены в свойствах стриминг-сервиса. .. _make_autopayments:

2.5.12. Команда совершения автоплатежей

Команда:

smarty_manage make_autopayments --settings=settings.<settings name>

Производит оплату для тех клиентов, у которых активен автоплатёж, будет списание средств при проверке аккаунтов сегодня и количество средств недостаточно для проделения всех аккаунтов клиента. Рекомендуется выполнять непосредственно перед вызовом check_accounts.

При указании параметра --use_pool обработка клиентов будет производиться в многопоточном режиме.

2.5.13. Команда миграции клиента на подписочную модель

Команда:

smarty_manage migrate_to_nb --client_id=<client_id> --settings=settings.<settings name>

Мигрирует клиента на подписочную модель тарифов. Создаёт для каждого пользователя и аккаунта подписки на каждый подключенный тариф.

Изменения, сделанные данной командой являются необратимыми, рекомендуется сделать резервную копию БД перед применением. Ни в коем случае не использовать без необхомости.

2.5.14. Команда кэширования существующих иконок

Команда:

smarty_manage recache_icons --settings=settings.<settings name>

Вызывается в случае отсутствия информации о существующих иконках.

Команда проверяет и сохраняет в кэше существование иконок для всех EpgChannel по размерам, указанным в SMARTY_DEFAULT_ICON_SIZE и SMARTY_DEFAULT_ICON_SIZES.

2.5.15. Очистка старых отчетов

Команда:

python /usr/share/nginx/html/microimpuls/smarty/manage.py delete_old_reports --save-days=30 --settings=settings.<settings name>

В данную команду необходимо передать параметр --save-days для указания количества дней, за которое отчеты нужно сохранить.

2.5.16. Очистка лога действий абонента

Команда:

python /usr/share/nginx/html/microimpuls/smarty/manage.py clear_customer_log --days=60 --settings=settings.<settings name>

Параметр --days обязателен и определяет, что при вызове команды будут удалены записи старше days дней.

2.5.17. Сохранение максимального числа абонентов онлайн для статистики

Команда:

smarty_manage cache_max_online --settings=settings.<settings name>

Можно запускать с любой регулярностью, но не реже раз в сутки.

2.5.18. Сбор и хранение статистики по каждому клиенту

Команда:

   smarty_manage save_stats --settings=settings.<settings name>

Необходимо запускать раз в сутки.

2.5.19. Пример настройки crontab

Пример:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
*/1 * * * *         python /usr/share/nginx/html/microimpuls/smarty/manage.py cache_channel_list --settings=settings.prod
0 5,9,13 * * *      python /usr/share/nginx/html/microimpuls/smarty/manage.py epg_import --settings=settings.prod
0 3 * * *           python /usr/share/nginx/html/microimpuls/smarty/manage.py clean_old_messages --days_count 3 --settings=settings.prod

2.5.20. Команда генерации видео для архивных записей

Команда:

smarty_manage make_vodpvr --client_id=<client_id> --settings=settings.<settings name>

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

2.5.21. Команда сбора дополнительной статистики для отчета по количеству пользователей

Команда:

smarty_manage collect_daily_stats --settings=settings.<settings name>

Необходимо выполнять каждый день в начале дня (время записи сохраняется в UTC+0).

2.5.22. Команда валидации платежей

Команда:

smarty_manage check_payment_status --settings=settings.<settings name>

Параметры:

--timeout_minutes – количество минут по прошествии которых платёж считается «устаревшим» и более не проверяется.

Необходимо для платёжных систем, у которых отсутствует автоматическая нотификация. На данный момент поддерживаются: Fortebank и Payture.

2.5.23. Команда кеширования данных для графиков «Динамики абонентов»

Команда:

smarty_manage cache_customers_dynamic --settings=settings.<settings name>

Параметры:

--client_id – список идентификаторов клиентов, через запятую, для которых нужно провести кеширование. Если в аргумент ничего не передано, то кешируются данные для всех клиентов.

  • Команду рекомендуется запускать раз в час.
  • Для небольших баз графики будут работать быстро и корректно и без данной команды.
  • При первом запуске команда может выполняться долго (зависит от количества аккаунтов, транзакций и тарифов) из-за того, что будут рассчитываться данные за весь прошлый месяц. При повторном запуске будут рассчитываться данные только за последний день или час (уже кешированные данные повторно не кешируются).
  • Поскольку команда может выполняться долго рекомендуется сначала попробовать для одного клиента (аргумент –client_id).

2.6. Запуск, перезапуск и остановка Smarty

Для управления процессами сервера приложений uwsgi используется init-скрипт /etc/init.d/uwsgi:

$ /etc/init.d/uwsgi
Usage: /etc/init.d/uwsgi {start|stop|status|restart|reload|force-reload}

Все команды действуют на все запущенные инстансы uwsgi.

Логи по умолчанию сохраняются в /var/log/uwsgi/, /var/log/nginx/ и /var/log/microimpuls/.

2.7. Установка обновлений Smarty

Примечание

Перед установкой пакетов обновления, пожалуйста, сделайте резервную копию конфигурации, файлов Smarty, а также дамп базы данных.

Обновления устанавливаются командой dpkg:

dpkg -i smarty*.deb

После установки обновления необходимо установить новые требуемые python-библиотеки через pip:

sudo pip install -r /usr/share/nginx/html/microimpuls/smarty/requirements.txt --ignore-installed

Миграция схемы БД осуществляется командой:

python /usr/share/nginx/html/microimpuls/smarty/manage.py migrate --settings=settings.<settings filename>

После установки всех обновлений и миграции схем БД необходимо перезапустить сервер приложений uwsgi, завершить все команды epg_import и cache_channel_list (через вызов kill), а затем выполнить команду обновления кеша:

python /usr/share/nginx/html/microimpuls/smarty/manage.py flushall --settings=settings.<settings filename>

Примечание

Если не выполнить команду обновления кеша flushall, то в кеше могут оказаться данные со старой структурой, что может привести к непредсказуемым ошибкам в работе приложений.

2.7.1. Устранение ошибки конфликта миграций

В процессе миграции схемы БД может возникнуть ошибка конфликта миграций: To fix them run 'python manage.py makemigrations --merge'. Не нужно делать команду makemigrations. Ошибка может возникнуть в случае нарушения правильного порядка действий при установке или обновлении системы. Чтобы устранить эту ошибку, необходимо выполнить следующие действия:

  • Удалить содержимое папки /tvmiddleware/migrations

  • Переустановить пакет обновления smarty, который был установлен в тот момент, когда возникла данная ошибка. Временно удалить из папки /tvmiddleware/migrations все новые миграции (дата создания у которых новее чем дата последнего успешного обновления smarty).

  • Очистить таблицу django_migrations в базе данных smarty.

  • Выполнить команду:

    $ python manage.py migrate --fake --settings=settings.<settings filename>
    
  • Скопировать обратно миграции, временно удаленные на шаге 2. Повторно выполнить команду миграции:

    $ python manage.py migrate --settings=settings.<settings filename>
    

2.8. Масштабирование и отказоустойчивость

2.8.1. Доступные средства масштабирования и отказоустойчивости

Подробная информация о кластерных конфигурациях Smarty в новой базе знаний по продукту на сайте https://microimpuls.com/docs/smarty/scaling-and-redundancy.

2.8.2. Настройка подключения к СУБД с использованием репликации

Актуальная документация по настройке подключения к SQL-кластеру: https://microimpuls.com/docs/smarty/scaling-and-redundancy/smarty-sql-cluster-connection

2.8.3. Настройка логирования статистики запросов в statsd

statsd - сервер аггрегации статистических данных: https://github.com/etsy/statsd.

Smarty позволяет выгружать в statsd статистику по запросам к API (количество запросов, время ответа, количество выполненных SQL-запросов, время ответа СУБД). Для этого необходимо добавить в файл конфигурации Smarty параметры, указанные ниже:

MIDDLEWARE_CLASSES += (
    'core.middleware.StatsMiddleware',
)

STATSD_HOST = 'X.X.X.X'
STATSD_PORT = '8125'

Где:

STATSD_HOST str
IP-адрес сервера statsd для выгрузки данных статистики и мониторинга работы сервера Smarty.
STATSD_PORT int
Порт сервера statsd для выгрузки данных статистики и мониторинга работы сервера Smarty.
STATSD_PREFIX str
Префикс, который будет добавляться (если задан) к ключам параметров, передаваемых в statsd.

Примечание

Внимание! Необходимо обеспечить доступность сервера statsd и правильность настроек подключения, в противном случае подключенная `core.middleware.StatsMiddleware` и отсутствие соединения со statsd может приводить к чрезмерному потреблению оперативной памяти.