Установка Freepbx на Centos 8

Сейчас практически вся современная телефонная связь в офисах сферы малого и среднего бизнеса осуществляется по протоколу ip. Установка asterisk и панели управления freepbx на сервер под управлением CentOS 8 тема моего очередного повествования. Мы последовательно выполним все шаги по конфигурированию и сборке исходных текстов устанавливаемых продуктов.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Цели статьи

  1. Кратко рассказать о том, что такое asterisk и freepbx.
  2. Собрать asterisk из исходников.
  3. Установить панель управления Freepbx.
  4. Проверить, что все работает.

Данная статья является частью единого цикла статьей про сервер Centos.

Введение

Asterisk — бесплатное решение для организации voip телефонии. Он обладает всеми возможностями обычных АТС, но предоставляет более богатый функционал по управлению звонками. За относительную простоту настройки, по сравнению с цифровыми АТС, бесплатность и широкие возможности он и снискал такую популярность.

Freepbx — бесплатный веб интерфейс для управления астериском. Он существенно упрощает работу с конфигурациями, позволяет выполнять некоторые функции людям, вообще далеким от астериска. Например, с его помощью практически любого можно научить управлять учетными записями пользователей.

Лично я больше люблю настраивать asterisk вручную, нежели с помощью готовой панели. Да, конфигов астериск очень много, они объемные, работать с ними не удобно. Тем не менее, чистый астериск предоставляет практически неограниченную возможность по конфигурированию. С готовой панелью вы будете ограничены ее возможностями. Но если они вас полностью удовлетворяют, то лучше использовать ее.

Дальнейшая установка FreePBX будет проходить по следующей схеме:

  1. Подготовка системы.
  2. Настройка Web сервера.
  3. Установка NodeJS.
  4. Сборка Asterisk из исходников.
  5. Установка Freepbx.

Сразу важное замечание. Официально Freepbx еще не поддерживает Centos 8. После установки панели, она будет показывать в статусе, что версию системы, на которую она установлена, не может определить. Учитывайте этот нюанс. С таким раскладом для прода она еще не готова. Но в целом, если поставить, попробовать и убедиться, что она работает, можно использовать. По сути, эта панель привязана не к системе, а к версиям софта (php, nodejs, asterisk).

Следующая проблема в том, что стабильной считается 14-я версия, но она работает нормально только на php 5.6, для которого уже кончилась поддержка и ставить ее как-то не с руки. Есть 15-я версия, которая нормально работает на php 7, но она все еще в статусе бета, хоть и работает достаточно стабильно. Что ставить себе, решайте сами. Если непременно нужна Centos 8, то в закрытый контур я бы поставил 14-ю версию на php 5.6. Если версия с доступом из инета, то я бы ставил 15-ю на php 7.

Таким образом, если вам нужна максимальная стабильность, то разумнее всего сейчас использовать Centos 7, php 5.6 и Freepbx 14 (моя статья по теме). Пример одного из многочисленных вопросов на официальном сайте по поводу php 7.

Я покажу 3 примера установки Freepbx:

  • 15-я версия на php 7.2
  • 14-я версия на php 7.2
  • 14-я версия на php 5.6

Переходите по меню сразу к нужному разделу.

Для отладки и тестирования работы voip я рекомендую сервис Zadarma. Плюс его в том, что после регистрации вы получите настройки пира для внутренней сети оператора. И внутри этой сети вы можете бесплатно звонить. Например, я одного пира регистрирую на sip клиенте смартфона и с него звоню на второй аккаунт, пир от которого настроен в астериске. Таким образом эмулирую внешний звонок. Удобно отлаживать различные конфигурации звонков, не требуя платного подключения.

Подготовка системы

Я рекомендую ознакомиться с моим материалом на тему установки и первоначальной настройки centos 8. Многие вопросы там рассмотрены подробнее, здесь же я не буду на них задерживаться, просто выполню необходимые команды.

Прежде чем мы начнем устанавливать asterisk, нам надо выполнить целый ряд подготовительных действий. Первым делом отключаем selinux. Для этого открываем файл:

# mcedit /etc/sysconfig/selinux

и устанавливаем значение SELINUX=disabled. После этого применяем настройку без перезагрузки сервера:

# setenforce 0

Рекомендация по отключению selinux дается в официальной инструкции по установке freepbx, так как это может привести к нарушению процесса инсталляции.

Дальше обновляем систему и ставим пакеты Development Tools:

# dnf update
# dnf groupinstall core base "Development Tools"

И еще некоторые зависимости, которые будут нужны.

# dnf install tftp-server ncurses-devel sendmail sendmail-cf newt-devel libxml2-devel libtiff-devel gtk2-devel subversion kernel-devel git crontabs cronie cronie-anacron wget sqlite-devel net-tools gnutls-devel unixODBC

В своей работе FreePBX использует базу данных Mysql. В качестве mysql сервера будем использовать mariadb. Для Freepbx версия не критична, так что будем ставить 10.3 из базового репозитория.

# dnf module install mariadb

Установка Mariadb на Centos 8

Запускаем mysql сервер.

# systemctl start mariadb
# systemctl enable mariadb

Теперь нам нужно установить asterisk. Я решил не добавлять информацию об этом в эту статью, так как она один в один дублирует содержание указанной. Пройдите по ссылке и установите asterisk. Начинать надо сразу с установки jansson и pjsip, так как подготовка сервера там такая же, и мы ее уже выполнили.

Настройка Web сервера

Для работы панели FreePBX нужен web сервер с php. Я буду использовать версию php 7.2 из базового рпозитория. Более подробно про настройку web срвера на Centos вы можете прочитать отдельно. Сейчас же коротко пройдем по шагам весь процесс.

Устанавливаем веб сервер apache:

# dnf install @httpd

Удаляем стартовую страницу.

# rm -f /var/www/html/index.html

Запускаем httpd и добавляем в автозагрузку.

# systemctl enable --now httpd

Открываем порты на firewalld, если вы ранее не настраивали iptables.

# firewall-cmd --add-service={http,https} --permanent
# firewall-cmd --reload

Если вы хотите использовать php 5.6, то сразу переходите в самый конец статьи, в соответствующий раздел. Ниже будем ставить дефолтную версию php 7.2 из базового репозитория Centos 8. Устанавливаем необходимые php расширения.

# dnf install wget @php php-pear php-cgi php-common php-curl php-mbstring php-gd php-mysqlnd php-gettext php-bcmath php-zip php-xml php-json php-process php-snmp

Изменяем максимально допустимый размер файла для загрузки и лимит по памяти для скриптов.

# sed -i 's/\(^upload_max_filesize = \).*/\100M/' /etc/php.ini
# sed -i 's/\(^memory_limit = \).*/\512M/' /etc/php.ini

Теперь нам нужно изменить некоторые параметры httpd — запустить его от пользователя asterisk и включить опцию AllowOverride. Это можно сделать руками в файле /etc/httpd/conf/httpd.conf, либо автоматически с помощью sed.

# sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf
# sed -i 's/AllowOverride None/AllowOverride All/' /etc/httpd/conf/httpd.conf

Мы просто выставили следующие параметры:

  • User asterisk
  • Group asterisk
  • AllowOverride All

И так же в php-fpm меняем пользователя на asterisk в конфигурации пула /etc/php-fpm.d/www.conf

# sed -i 's/^\(user\|group\).*/\1 = asterisk/' /etc/php-fpm.d/www.conf
# sed -i 's/^\(listen.acl_users\).*/\1 = asterisk/' /etc/php-fpm.d/www.conf

Запускаем httpd и php-fpm.

# systemctl enable --now php-fpm httpd
# systemctl restart php-fpm httpd

Поверяем статус запущенных служб.

# systemctl status php-fpm httpd

Запуск php-fpm и httpd

Все в порядке, движемся дальше.

Установка NodeJS

Для работы Freepbx требуется сервер NodeJS. Установим его на Centos 8. Нам нужна будет 10-я версия, и она есть в базовом репозитории. Так что ставится все очень просто.

# dnf module install nodejs:10

Установка NodeJS на Centos 8

После завершения установки проверяем версию.

# node --version
v10.16.3

Установка Freepbx 15 на Centos 8

Начнем с самого простого 15-я версия на php 7. Качаем архив с официального сайта.

# cd ~
# wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-15.0-latest.tgz

Распаковываем архив.

# tar xfz freepbx-15.0-latest.tgz

Устанавливаем Freepbx 15 на Centos 8.

# cd freepbx
# ./start_asterisk start
# ./install -n

Если на mysql установили пароль root, то запускать установку следует с указанием пароля.

# ./install -n --dbuser root --dbpass password

Установка Freepbx на Centos 8

Перезапустите httpd.

# systemctl restart httpd

На этом установка freepbx закончена. Можно идти в веб интерфейс и проверять. Сначала создадите учетную запись администратора freepbx, потом зайдете под ней в панель управления asterisk. Рекомендую выбрать английский язык. Перевод на русский так себе, с ним иногда бывает сложно понять суть настроек.

Я заметил небольшую проблему. Во время входа панель обращается к какому-то внешнему ресурсу, который с моего сервера плохо доступен. Из-за этого очень долго выполняется вход, потом вылетает ошибка бэкенда и загружается dashboard. В логах apache при этом была ошибка:

[proxy_fcgi:error] [pid 12015:tid 140317076465408] (70007)The timeout specified has expired: [client 10.20.1.1:51742] AH01075: Error dispatching request to : (polling), referer: http://10.20.1.23/admin/config.php

Не хватает дефолтного времени в параметре RequestReadTimeout. Ошибка пропала и вход стал выполняться нормально после того, как я увеличил таймауты, добавив в /etc/httpd/conf/httpd.conf.

RequestReadTimeout header=20-600,MinRate=500 body=20,MinRate=500

Не забудьте после этого перезапустить httpd.

Так же у меня была ошибка с отображением системной информации в виджете System Overview. Вместо полезной информации там была ошибка:

There was an error asking for Overview. Check the error logs for more information.

Как ее исправить, я так и не разобрался.

Установка Freepbx 14 на Centos 8

Теперь покажу, как установить Freepbx 14 на php 7.2, которая в базовом репозитории Centos 8. Делаем все то же самое, что и выше, только для 14-й версии.

Качаем архив с официального сайта.

# cd ~
# wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-14.0-latest.tgz

Распаковываем архив.

# tar xfz freepbx-14.0-latest.tgz

Устанавливаем Freepbx 14 на Centos 8.

# cd freepbx
# ./start_asterisk start
# ./install -n

Если на mysql установили пароль root, то запускать установку следует с указанием пароля.

# ./install -n --dbuser root --dbpass password

Перезапустите httpd.

# systemctl restart httpd

На этом установка freepbx 14 закончена. Можно идти в веб интерфейс и проверять.

Доступ в web интерфейс Freepbx

Переходим в браузере по ip адресу или доменному имени сервера и создаем учетную запись администратора Freepbx. При первом заходе в 14-ю версию я увидел ошибку.

Ошибка в Freepbx 14

Текст ошибки.

Whoops \ Exception \ ErrorException (E_DEPRECATED)
Methods with the same name as their class will not be constructors in a future version of PHP; gui_hidden has a deprecated constructor in /var/www/html/admin/libraries/components.class.php on line 571

Насколько я понял, это сообщение о том, что используется какая-то конструкция, которая объявлена Deprecated и скоро не будет работать. Что с этим делать сейчас, я не понял. Нашел баг репорт с этой ошибкой - https://issues.freepbx.org/browse/FREEPBX-19941 Он почему-то отклонен, помещен как дублирующий, но найти эту же ошибку в трекере я не смог.

Если взять версию php 5.6, то там этой ошибки не будет. Freepbx 14 официально поддерживает только 5.6, но откатываться на нее совсем не хочется.

Я решил просто отключить обработчик ошибок bootstrap. Для этого открываем конфиг freepbx и добавляем туда новое значение.

# mcedit /etc/freepbx.conf
$bootstrap_settings['freepbx_error_handler'] = false;

Заходим в web интерфейс freepbx еще раз и создаем администратора.

Учетная запись администратора Freepbx

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

Выбор языка web интерфейса

После этого оказываетесь в веб панели Freepbx. Нажмите сверху на Dashboard и увидите сводную информацию по системе. Теперь можно начинать ее настройку, но это тема отдельной статьи. Возможно, до нее у меня когда-нибудь дойдут руки.

Установка Freepbx 14 с php 5.6 на Centos 8

В целом, Freepbx 14 на php 7 работает. Я читал в буржунете, что вроде как работает нормально и особых проблем быть не должно. Но сразу предупреждаю, что сам я не проверял. Самый надежный вариант, как я написал выше, будет установить 14-ю версию на php 5.6. Давайте сделаем и это.

Для этого подключаем репозиторий remi и epel.

# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Устанавливаем php 5.6

# dnf install php56 php56-php-fpm php56-php-pear php56-php-cgi php56-php-common php56-php-curl php56-php-mbstring php56-php-gd php56-php-mysqlnd php56-php-gettext php56-php-bcmath php56-php-zip php56-php-xml php56-php-json php56-php-process php56-php-snmp --skip-broken

Php 5.6 в Centos 8 устанавливается в /opt. Конфиг php.ini лежит по адресу /etc/opt/remi/php56/php.ini, конфиг пула /etc/opt/remi/php56/php-fpm.d/www.conf. Их нам надо так же отредактировать, как и для 7-й версии. Увеличить лимиты и заменить пользователя на asterisk. Читайте об этом в разделе про настройку web сервера.

Запускается php 5.6 командой:

# systemctl enable --now php56-php-fpm

Добавьте path с php5.6 в окружение.

# source /opt/remi/php56/enable

Чтобы после перезагрузки они снова применились, добавьте их в профиль.

# cat /opt/remi/php56/enable >> ~/.bash_profile

Установите права на директорию с сессиями php для пользователя asterisk.

# chown -R asterisk. /var/opt/remi/php56/lib/php/session

Дальше устанавливается точно так же Freepbx 14 и настраивается.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Долго я возился с этой статьей. В итоге перепробовал кучу всяких вариантов и настроек, но у меня так и не получилось добиться того, чтобы Freepbx без ошибок работала на Centos 8. Я для себя сделал вывод, что панель просто не готова к работе на этой системе. Статью я решил все же оформить и опубликовать, потому что было жаль потраченного времени, плюс может это будет кому-то полезно, если необходимо настраивать только на Centos 8.

При настройке и отладке различных версий, рекомендую использовать виртуальную машину и снепшоты. Я сначала настроил систему, сделал снепшот, потом собрал астериск, сделал еще снепшот, а потом уже пробовал различные версии панели. Это позволило оперативно проверить много вариантов настроек и версий php. Загружался из снепшотов раз 20.

Все статьи в буржунете, что видел, поверхностны и рассказывают обычную установку на дефолтную систему с php 7.2 из базовых реп. Как это потом работает, никто не проверяет. Реально полезной и законченной информации по Centos 8 b Freepbx я не нашел.

Если у кого-то есть информация, как все это корректно настроить и использовать, буду рад подробностям в комментариях.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Помогла статья? Подписывайся на telegram канал автора

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

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

32 комментария

  1. Константин

    Здравствуйте Владимир.
    Спасибо за статью, но хорошо бы дополнить ее следующим - связкой MariaDB и Asterisk 15+FreePBX через ODBC-connector.

  2. Добрый вечер! На моменте запуска httpd и php-fpm столкнулся с такой проблемой: https://prnt.sc/13g12nr . С чем это связано и как исправить?

  3. "There was an error asking for Overview. Check the error logs for more information.
    Как ее исправить, я так и не разобрался."

    путем изысканий было выяснено следующее: ошибка эта возникает, когда модуль System Overview пытается получить информацию о количестве сообщений в очереди - mailq. Если, например sendmail криво настроен, и не может распознать имя хоста ("My unqualified host name (foo.bar) unknown; sleeping for retry"), будет возникать эта ошибка. Проверить просто - если из консоли команда mailq выполняется без задержек - ошибки этой быть не должно. А вот если долго (около минуты) - тогда и эта ошибка будет.
    Обходное решение - в коде модуля закомментировать функцию проверки очереди сообщений.
    Решение взято отсюда - https://community.freepbx.org/t/error-in-loading-freepbx-dashboard/67165/2
    После грамотной настройки sendmail все заработало.

  4. Рустам

    Добрый день, все установил - работает. Создаю 2 номера 500 = pjsip, 501 = sip, 500 регистрируется в MicroSIP, а 501 говорит не правильный пароль. В какую сторону копать?

    • Аноним

      В настройках аккаунта MicroSIP укажите ip адрес сервера и порт через двоеточие.

  5. Сергей

    Всем привет!
    Никто не сталкивался с проблемой web gui после yum update?
    После авторизации при попытке перейти в любой раздел снова авторизация. Кэш и режим инкогнито не помогает.
    Спасибо!

    • Аноним

      совсем никто?)

      • Мне кажется, для freepbx проще их готовый дистр взять, чем пытаться это вкрячить на какую-то другую систему. Просто лишняя трата времени на установку.

  6. Аноним

    Привет! Решил кто-нибудь проблему с "There was an error asking for Overview. Check the error logs for more information" на странице с дашбордом?

  7. Владимир

    PBX Version:15.0.16.72
    Asterisk 16.12.0

    1. При переключении на любой язык, ничего не происходит, остаётся английский.
    2. При нажатии Apply Config, выдаёт ошибку "There was an error during reload: Unknown Error. Please Run: fwconsole reload --verbose

  8. Сергей

    Добрый день! Большое спасибо за отличную статью и огромный труд. Подскажите пожалуйста, установил на CentOS 8 15 FreePBX на 16 Asterisk-е и все хорошо, но не выходит с ODBC на MariaDB, что только не перепробовал, нет коннекта, хотя установку под DB root паролем запускал.

    • А что именно не выходит? Вы что пытаетесь настроить? Freepbx и так работает с базой. Он без коннекта к ней вообще не заведется.

      • Сергей

        Насколько я понял для CDR создается отдельная база: asteriskcdrdb к которой, по идее через ODBC коннектор должен цепляться под freepbxuser-ом именно CDR log модуль, но в консоли aster-а при попытке вывести статус соединений с базой я вижу:

        ODBC DSN Settings
        -----------------

        Name: asteriskcdrdb
        DSN: MySQL-asteriskcdrdb
        Last fail connection attempt: 2020-05-21 18:55:43
        Number of active connections: 0 (out of 5)
        Logging: Disabled

        Ну и симптому начальные: нет записей как через web, так и через select в базе. Что-то подсказывает что дело тут в модуле cdr_mysql.so который в консоли руками можно запустить, но есть ошибки:
        module show like cdr_mysql.so
        Module Description Use Count Status Support Level
        0 modules loaded

        • cdr_mysql.so устаревший, им не надо пользоваться. Он для прямых подключений к базе был, без odbc. У Freepbx своя реализация записи разговоров. Я никогда ее не настраивал, так что не могу помочь. Так то в астере достаточно просто odbc настраивается.

          • Сергей

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

  9. Доброго времени суток!
    Владимир, подскажите, пожалуйста, есть ли возможность в графичеcком меню FreePBX отменить сделанные изменения?!
    То есть, случайным образом были произведены какие-то настройки другим через графическое меню и я о них ничего не знаю - да и сам человек ничего не может внятного сказать. А теперь в правом верхнем углу светиться кнопка "Aplly config" - как ее можно убрать (отменить сделанные изменения)?!
    Сразу скажу, что даже полная перезагрузка сервера не убрала эту кнопку.

    • Я не знаю, сам не использую freepbx. По аналогии с другими устройствами, где есть подобная возможность принятия конфига, могу предположить, что где-то на сервере лежит новый конфиг с изменениями с другим именем, например, с разрешением .now, который примется после нажатия кнопки Apply. Можно поискать что-то подобное через консоль в директории с конфигами и удалить.

  10. Сергей

    Спасибо, все сделал по вашей статье, заработало. Осталось подключиться к провайдеру и проверить работу.
    Вопрос у меня, какой все же дистрибутив Linux более стабильно работает в связке asterisk + freePBX по вашему опыту?

    • По дистрибутиву это вообще не принципиально. Везде работает одинаково. Выбирайте то, что больше нравится.

      На какой связки версий php и freepbx остановились?

  11. PHP-шная ошибка она вроде про то, что раньше в PHP-шных классах конструкторы назывались по имени класса. То есть например:

    <?php
    class Person {
    function Person() {
    echo "I am a constructor\n";
    }
    }

    Потом, естественно, перешли на более распространённый синтаксис:

    <?php
    class Person {
    public function __construct() {
    echo "I am a constructor\n";
    }
    }

    Но это кофуз, потому как в одном и том же классе может быть и __construct() метод, и Person() метод (по имени класса). Поэтому было принято решение, что нелзя будет заводить методы с таким же именем, как класс. До PHP 5.6 это всё ещё работало, но с предупреждениями, которые можно выбурить. В PHP 7 это вроде как работать перестало совсем. То есть, чтобы код запустился надо везде поправить и переименовать методы по имени класса в __construct().

    Вроде так.

  12. Спасибо Очень дельное !!! Я то думал что с этой ошибкой делать

  13. Добрый.
    Спасибо за статью.

    Дальнейшая настройка wiki.pro-voip.ru/category/freepbx

    • Посмотрел там статью про установку freepbx на centos 8 - полный порожняк. Я даже знаю, с какой англоязычной статьи это перевели. Поставили 14-ю версию на дефолтный php 7.2, где она без напильника работать не будет. А в комментариях сказали, что надо проверить пользователя, от которого работает apache.

      • Добрый.
        Там не про установку. Там про дальнейшую настройку. У вас этого нет. Будьте внимательны.

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

  14. А кроме академических целей в чем смысл использовать именно такую связку?
    Ведь есть готовый freepbx правда на 7 центосе. Скоро думаю и на 8 будет.
    А в целом как эксперимент выглядит неплохо.

    • Смысла нет. Меня просто много раз просили написать такую статью, вот я и сделал это. Да и самому было интересно проверить. Сейчас если делать новые установки, хочется уже на Centos 8 сразу, вот и проверяю работу различных сервисов на этой системе.

  15. Алексей

    а я вот на днях столкнулся с тем, что нет monit-а в 8-м

    [root@centos-8 etc]# dnf repository-packages epel list | grep -i monit
    gnome-shell-extension-system-monitor-applet.noarch 1:38-4.20191019gitf00e248.el8 epel
    ipmctl-monitor.x86_64 01.00.00.3469-1.el8 epel
    monitorix.noarch 3.11.0-1.el8 epel
    nordugrid-arc-monitor.noarch 6.3.0-1.el8 epel
    perl-Monitoring-Plugin.noarch

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar