Инструменты пользователя

Инструменты сайта


install_local_version

Различия

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

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
install_local_version [2019/04/02 19:45]
Евгений Романенко
install_local_version [2022/08/27 08:13] (текущий)
Евгений Романенко
Строка 1: Строка 1:
 **Системные требования.** **Системные требования.**
  
-  * На сервере (здесь и далее примем,​ что “сервером” может быть как отдельный компьютер,​ \\ так и виртуальная машина,​ VPS/VDS и т .д. \\ Также отметим:​ docker-контейнер с локальной версией системы статистики может быть запущен как на том же сервере,​ что и АТС Asterisk, так и на отдельном сервере) должна быть установлена операционная система Linux семейства Debian не ниже ​7.0 (Ubuntu ​14.04  и выше), CentOS не ниже ​6.5 или другие дистрибутивы с актуальной базой репозиториев.+  * На сервере (здесь и далее примем,​ что “сервером” может быть как отдельный компьютер,​ \\ так и виртуальная машина,​ VPS/VDS и т .д. \\ Также отметим:​ docker-контейнер с локальной версией системы статистики может быть запущен как на том же сервере,​ что и АТС Asterisk, так и на отдельном сервере) должна быть установлена операционная система Linux семейства Debian не ниже ​10.0 (Ubuntu ​18.04  и выше), CentOS не ниже ​или другие дистрибутивы с актуальной базой репозиториев.
  
   * IP АТС Asterisk должна быть версии не ниже 1.8. \\ На Asterisk должна быть настроена запись информации о разговорах в таблицы cel, cdr и queue_log, подробную информацию о необходимых настройках Asterisk вы найдете ниже в разделе "​Настройки Asterisk"​.   * IP АТС Asterisk должна быть версии не ниже 1.8. \\ На Asterisk должна быть настроена запись информации о разговорах в таблицы cel, cdr и queue_log, подробную информацию о необходимых настройках Asterisk вы найдете ниже в разделе "​Настройки Asterisk"​.
Строка 7: Строка 7:
   * Сервер БД MySQL не ниже версии 5.5.   * Сервер БД MySQL не ниже версии 5.5.
  
-  * Docker версии 1.7.1 и выше (версии ниже нужно проверять дополнительно). \\ Установка docker в различных ОС подробно расписана в официальной документации:​ \\ [[https://store.docker.com/​editions/community/docker-ce-server-debian?​tab=description|Debian]], [[https://store.docker.com/​editions/community/docker-ce-server-ubuntu?​tab=description|Ubuntu]], [[https://store.docker.com/​editions/community/docker-ce-server-centos?​tab=description|CentOS]]. \\ Для установки в FreePBX 13 можете воспользоваться [[https://​wiki.vistep.ru/​doku.php?​id=установка_docker_на_freepbx_13_centos_6.6|нашей инструкцией]]+  * Docker версии 1.7.1 и выше (версии ниже нужно проверять дополнительно). \\ Установка docker в различных ОС подробно расписана в официальной документации:​ \\ [[https://docs.docker.com/​engine/install/debian/|Debian]], [[https://docs.docker.com/​engine/install/ubuntu/|Ubuntu]], [[https://docs.docker.com/​engine/install/centos/|CentOS]]. \\ Для установки в FreePBX 13 можете воспользоваться [[https://​wiki.vistep.ru/​doku.php?​id=установка_docker_на_freepbx_13_centos_6.6|нашей инструкцией]]
  
-**Настройки ​Asterisk.**+==== Настройка ==== 
 +Часть шагов по конфигурированию вам поможет сделать установщик,​ ссылку для скачивания которого пришлют наши инженеры после оплаты\\ 
 +Скачайте,​ запустите и следуйте его инструкциям.\\ 
 +В данном [[https://​youtu.be/​eYNTPAa06U4|видео]] представлен пример работы установщика на АТС FreePBX \\ 
 +По завершению его работы вам будет предоставлена ссылка для входа в web-интерфейс,​ но настройка не завершена - нужно выполнить еще несколько манипуляций:​\\
   - Инсталлируем необходимые пакеты (для примера в Debian/​Ubuntu) <code bash>​aptitude install unixodbc-dev libmyodbc</​code>​   - Инсталлируем необходимые пакеты (для примера в Debian/​Ubuntu) <code bash>​aptitude install unixodbc-dev libmyodbc</​code>​
   - Asterisk должен быть собран со следующими опциями {{::​9d37fd2a5c08439f8a69fe81a398891c.png?​400|}}{{::​34d0b50241d3443d827afa222aede0f4.png?​400|}}   - Asterisk должен быть собран со следующими опциями {{::​9d37fd2a5c08439f8a69fe81a398891c.png?​400|}}{{::​34d0b50241d3443d827afa222aede0f4.png?​400|}}
Строка 20: Строка 24:
 table=cdr table=cdr
 alias start => calldate alias start => calldate
-alias realdst => dst</​code>​ **/​etc/​odbc.ini** <code bash>​[MySQL-asterisk]+</​code>​ **/​etc/​odbc.ini** <code bash>​[MySQL-asterisk]
 Description = MySQL Asterisk database Description = MySQL Asterisk database
 ;Trace = Off ;Trace = Off
Строка 37: Строка 41:
 CPTimeout = CPTimeout =
 CPReuse =</​code>​ в конец **/​etc/​asterisk/​cdr_mysql.conf** добавить <code bash>​alias filename => filename</​code>​ CPReuse =</​code>​ в конец **/​etc/​asterisk/​cdr_mysql.conf** добавить <code bash>​alias filename => filename</​code>​
-  ​- Создадим БД и таблицу cdr в MySQL <code sql>​mysql>​ create database asterisk; +  - Внесем в **/​etc/​asterisk/​extconfig.conf** <code bash>​queue_log => odbc,​asterisk</​code>​
-mysql> use asterisk; +
-mysql> CREATE TABLE `cdr` ( `id` int(9) unsigned NOT NULL AUTO_INCREMENT,​ +
-                    `calldate` datetime NOT NULL DEFAULT '​0000-00-00 00:​00:​00',​ +
-                    `clid` varchar(80) NOT NULL DEFAULT '',​ +
-                    `src` varchar(80) NOT NULL DEFAULT '',​ +
-                    `dst` varchar(80) NOT NULL DEFAULT '',​ +
-                    `dcontext` varchar(80) NOT NULL DEFAULT '',​ +
-                    `channel` varchar(80) NOT NULL DEFAULT '',​ +
-                    `dstchannel` varchar(80) NOT NULL DEFAULT '',​ +
-                    `lastapp` varchar(80) NOT NULL DEFAULT '',​ +
-                    `lastdata` varchar(80) NOT NULL DEFAULT '',​ +
-                    `duration` int(11) NOT NULL DEFAULT '​0',​ +
-                    `billsec` int(11) NOT NULL DEFAULT '​0',​ +
-                    `disposition` varchar(45) NOT NULL DEFAULT '',​ +
-                    `amaflags` int(11) NOT NULL DEFAULT '​0',​ +
-                    `accountcode` varchar(20) NOT NULL DEFAULT '',​ +
-                    `uniqueid` varchar(32) NOT NULL DEFAULT '',​ +
-                    `userfield` varchar(255) NOT NULL DEFAULT '',​ +
-                    `filename` varchar(255) NOT NULL DEFAULT '',​ +
-                    PRIMARY KEY (`id`), +
-                    KEY `calldate` (`calldate`),​ +
-                    KEY `accountcode` (`accountcode`),​ +
-                    KEY `uniqueid` (`uniqueid`),​ +
-                    KEY `dst` (`dst`), +
-                    KEY `src` (`src`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;​ +
-mysql> grant all on asterisk.* to '​asterisk_user'​@'​localhost'​ identified by '​232d2edxse3e';</​code>​ +
-  - Таблицу cel <code sql>​mysql>​CREATE TABLE `cel` ( +
-  `id` int(11) NOT NULL AUTO_INCREMENT,​ +
-  `eventtype` varchar(30) NOT NULL, +
-  `eventtime` datetime NOT NULL, +
-  `cid_name` varchar(80) NOT NULL, +
-  `cid_num` varchar(80) NOT NULL, +
-  `cid_ani` varchar(80) NOT NULL, +
-  `cid_rdnis` varchar(80) NOT NULL, +
-  `cid_dnid` varchar(80) NOT NULL, +
-  `exten` varchar(80) NOT NULL, +
-  `context` varchar(80) NOT NULL, +
-  `channame` varchar(80) NOT NULL, +
-  `src` varchar(80) DEFAULT NULL, +
-  `dst` varchar(80) DEFAULT NULL, +
-  `channel` varchar(80) DEFAULT NULL, +
-  `dstchannel` varchar(80) DEFAULT NULL, +
-  `appname` varchar(80) NOT NULL, +
-  `appdata` varchar(80) NOT NULL, +
-  `amaflags` int(11) NOT NULL, +
-  `accountcode` varchar(20) NOT NULL, +
-  `uniqueid` varchar(32) NOT NULL, +
-  `linkedid` varchar(32) NOT NULL, +
-  `peer` varchar(80) NOT NULL, +
-  `userdeftype` varchar(255) NOT NULL, +
-  `eventextra` varchar(255) DEFAULT NULL, +
-  `userfield` varchar(255) DEFAULT NULL, +
-  PRIMARY KEY (`id`), +
-  KEY `uniqueid_index` (`uniqueid`),​ +
-  KEY `linkedid_index` (`linkedid`),​ +
-  KEY `eventtime` (`eventtime`),​ +
-  KEY `exten` (`exten`),​ +
-  KEY `eventtype` (`eventtype`) +
-) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;</​code>​ +
-  - Таблицу queue_log <code sql>​mysql>​ CREATE TABLE IF NOT EXISTS `queue_log` ( +
-id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,​ +
-`time` timestamp NULL DEFAULT '​0000-00-00 00:​00:​00',​ +
-callid varchar(32) NOT NULL default '',​ +
-queuename varchar(32) NOT NULL default '',​ +
-agent varchar(32) NOT NULL default '',​ +
-event varchar(32) NOT NULL default '',​ +
-data1 varchar(100) NOT NULL default '',​ +
-data2 varchar(100) NOT NULL default '',​ +
-data3 varchar(100) NOT NULL default '',​ +
-data4 varchar(100) NOT NULL default '',​ +
-data5 varchar(100) NOT NULL default '',​ +
-PRIMARY KEY (`id`) +
-) ENGINE=InnoDB DEFAULT CHARSET=utf8;​ +
-mysql> \q</​code>​ +
-  ​- Внесем в **/​etc/​asterisk/​extconfig.conf** ​внесем ​<code bash>​queue_log => odbc,​asterisk</​code>​+
   - **cel.conf** выглядит так <code bash>​[general]   - **cel.conf** выглядит так <code bash>​[general]
 enable=yes enable=yes
Строка 141: Строка 70:
 macro recording (calling,​called) { macro recording (calling,​called) {
         if ("​${RECORDING}"​ = "​1"​){         if ("​${RECORDING}"​ = "​1"​){
 +              Set(CUTTEDCHANNEL=${CUT(CHANNEL,,​1)});​
 +              Set(CUTTEDCHANNEL=${CUT(CUTTEDCHANNEL,/,​2)});​
               Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,​%Y-%m-%d-%H_%M)}-${calling}-${called});​               Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,​%Y-%m-%d-%H_%M)}-${calling}-${called});​
        Set(datedir=${STRFTIME(${EPOCH},,​%Y/​%m/​%d)});​        Set(datedir=${STRFTIME(${EPOCH},,​%Y/​%m/​%d)});​
Строка 149: Строка 80:
        Set(CDR(recordingfile)=${fname}.wav);​        Set(CDR(recordingfile)=${fname}.wav);​
               Set(CDR(realdst)=${called});​               Set(CDR(realdst)=${called});​
 +              Set(CDR(realsrc)=${calling});​
 +              ExecIf($["​${calling:​-10:​10}"​ = "​${called:​-10:​10}"​]?​Set(CDR(realsrc)=${CUTTEDCHANNEL}));​
               MixMonitor(${WAV}/​${datedir}/​${fname}.wav,​b,​${monopt});​               MixMonitor(${WAV}/​${datedir}/​${fname}.wav,​b,​${monopt});​
  
Строка 174: Строка 107:
 [macro-vistep.ru-record] [macro-vistep.ru-record]
 exten => s,1,NoOp(== START macro-vistep.ru-record ==) exten => s,1,NoOp(== START macro-vistep.ru-record ==)
-same => n,​Set(CallerID=${ARG1}) + same => n,​Set(CallerID=${ARG1}) 
-same => n,​Set(CalleeID=${ARG2}) + same => n,​Set(CalleeID=${ARG2}) 
-same => n,​NoOp(CalleeID=${CalleeID},​ CallerID=${CallerID}) + same => n,​Set(CUTTEDCHANNEL=${CUT(CHANNEL,,​1)}) 
-same => n,​NoOp(VISTEPRURECORDING = ${VISTEPRURECORDING}) + same => n,​Set(CUTTEDCHANNEL=${CUT(CUTTEDCHANNEL,/,​2)}) 
-same => n,​GotoIf($["​${VISTEPRURECORDING}"​ = "​0"​]?​end) + same => n,​NoOp(CalleeID=${CalleeID},​ CallerID=${CallerID}) 
-same => n,​Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,​%Y-%m-%d-%H_%M)}-${CallerID}-${CalleeID}) + same => n,​NoOp(VISTEPRURECORDING = ${VISTEPRURECORDING}) 
-same => n,​Set(datedir=${STRFTIME(${EPOCH},,​%Y/​%m/​%d)}) + same => n,​GotoIf($["​${VISTEPRURECORDING}"​ = "​0"​]?​end) 
-same => n,​System(mkdir -p ${MP3}/​${datedir}) + same => n,​Set(fname=${UNIQUEID}-${STRFTIME(${EPOCH},,​%Y-%m-%d-%H_%M)}-${CallerID}-${CalleeID}) 
-same => n,​Set(monopt=nice -n 19 /​usr/​bin/​lame -b 32 --silent "​${WAV}/​${fname}.wav" ​ "​${MP3}/​${datedir}/​${fname}.mp3"​ && rm -f "​${WAV}/​${fname}.wav"​ && chmod o+r "​${MP3}/​${datedir}/​${fname}.mp3"​) + same => n,​Set(datedir=${STRFTIME(${EPOCH},,​%Y/​%m/​%d)}) 
-same => n,​Set(CDR(filename)=${fname}.mp3) + same => n,​System(mkdir -p ${MP3}/​${datedir}) 
-same => n,​Set(CDR(realdst)=${CalleeID}) + same => n,​Set(monopt=nice -n 19 /​usr/​bin/​lame -b 32 --silent "​${WAV}/​${fname}.wav" ​ "​${MP3}/​${datedir}/​${fname}.mp3"​ && rm -f "​${WAV}/​${fname}.wav"​ && chmod o+r "​${MP3}/​${datedir}/​${fname}.mp3"​) 
-same => n,​MixMonitor(${WAV}/​${fname}.wav,​b,​${monopt}) + same => n,​Set(CDR(filename)=${fname}.mp3) 
-same => n(end),​MacroExit()+ same => n,​Set(CDR(realdst)=${CalleeID}
 + same => n,​Set(CDR(realsrc)=${CallerID}) 
 + same => n,​ExecIf($["​${CallerID:​-10:​10}"​ = "​${CalleeID:​-10:​10}"​]?​Set(CDR(realsrc)=${CUTTEDCHANNEL})
 + same => n,​MixMonitor(${WAV}/​${fname}.wav,​b,​${monopt}) 
 + same => n(end),​MacroExit()
  
 ;​пример использования ;​пример использования
Строка 195: Строка 132:
 [from-pstn-custom] [from-pstn-custom]
 exten => _XX.,1, Macro(vistep.ru-record,​${CALLERID(number)},​${EXTEN})</​code>​ exten => _XX.,1, Macro(vistep.ru-record,​${CALLERID(number)},​${EXTEN})</​code>​
 +  - Или у вас внезапно lua <code lua>
 +WAV = "/​opt/​records/​wav"​ -- Временный каталог с WAV
 +MP3="/​opt/​records/​mp3"​ --Куда выгружать mp3 файлы
 +RECORDING=1 -- 1 - запись включена.
  
 +function recording(calling,​called)
 +  if RECORDING == 1 then
 +    fname = channel.UNIQUEID:​get() .. "​-"​ .. channel.STRFTIME("​${EPOCH},,​%Y-%m-%d-%H_%M"​.."​-"​..calling.."​-"​..called):​get()
 +    datedir = channel.STRFTIME("​${EPOCH},,​%Y/​%m/​%d"​):​get().."/"​
 +    os.execute("​mkdir -p " .. WAV.."/"​..datedir)
 +    os.execute("​mkdir -p " .. MP3.."/"​..datedir)
 +    WAVfname = WAV..datedir..fname.."​.wav"​
 +    MP3fname = MP3..datedir..fname.."​.mp3"​
 +    channel.CDR("​filename"​):​set(MP3fname)
 +    channel.CDR("​realdst"​):​set(called)
 +    channel.CDR("​realsrc"​):​set(calling)
 +    monopt = string.format("​nice -n 19 /​usr/​bin/​lame -b 32  --silent %s %s && rm -f %s && chown o+r %s",​WAVfname,​MP3fname,​WAVfname,​MP3fname)
 +    app.mixmonitor(WAVfname,​b,​monopt)
 +    return
 +  end;
 +end;
  
-**Установка,​ настройка и запуск.** +extensions = { 
-  - Для начала нужно провести первичную подготовку MySQL-базы данных Asterisk. \\ Зайдите на сервер MySQL и создайте нового пользователя с полными правами,​ например вот так: \\ <code sql>​GRANT ALL PRIVILEGES ON *.* TO '​vistepru'​@'​%'​ \ +  ​["​local"​] = { 
-IDENTIFIED BY '​MySuperPassword111'​ WITH GRANT OPTION; +    --локальные вызовы на номера ​XXX 
-flush privileges;​ +    ["​_XXX"​] = function(context,extension) 
-quit</​code>​Этот шаг необходим для работы мастера настройки БД, речь о котором пойдет несколько позже. \\ Также проверьте, что MySQL слушает ​не только 127.0.0.1, но и IP-адрес, по которому к нему будет ​обращаться система статистики. \\ За это в настройках MySQL отвечает параметр **bind-address**проще всего закомментировать эту строку в my.cnf, тогда mysql-сервер будет слушать на всех IP-адресах сервера+                 app.answer() 
-  - Теперь зайдите на сервер,​ где предполагаете запускать docker-контейнер,​ по sshСкачайте архив контейнера по предоставленной ссылке,​ например ​(это пример,​ корректная ссылка высылается на почту после оплаты): <code bash>​wget https://​vistep.ru/​stat.vistep.ru_local_1.0.3.tgz</​code>​ Если в вашей системе нет wget, то воспользуйтесь вот этой командой:​ <code bash>​curl -o stat.vistep.ru_local_1.0.3.tgz https://​vistep.ru/​stat.vistep.ru_local_1.0.3.tgz</​code>​ +                 recording(channel.CALLERID("​num"​):get(),extension) 
-  -  Далее перейдите в папку с архивом контейнера  ​(здесь и далее это /root/и загрузите его в docker <code bash>​docker load -i stat.vistep.ru_local_1.0.3.tgz</​code>​ Проверьте все ли в порядкекоманда <code bash>​docker images</​code>​ должна вернуть нечто подобное \\ {{:​screen_shot_2017-04-21_at_12.58.01.png|}} +                 app.dial("​SIP/"..extension,300,"​t"​) 
-  - Следующим пунктом будет настройка возможности прослушивать и скачивать файлы разговоров в интерфейсе статистикиКак и было описано ранее, вы можете запустить docker-контейнер с ПО как на сервере с АТС, так и на отдельном сервере. Для запуска docker там же, где и Asterisk, вам нужно выполнить такую команду:<​code bash>​docker run --name=stat.vistep.ru_local_1.0.3 -p 80:80  -v /ВАШ/​ПУТЬ/​К/​ФАЙЛАМ:/​var/​www/​html/​public/​user/​УНИКАЛЬНЫЙ_КАТАЛОГ_ПОЛЬЗОВАТЕЛЯ/​some/​path/​to/​files/​ --restart=always -d stat.vistep.ru_local_1.0.3 </​code>​ В консоле должно отобразиться подобное:​{{:​screen_shot_2017-04-21_at_13.42.44.png|}} \\ где /​ВАШ/​ПУТЬ/​К/​ФАЙЛАМ - это путь к файлам записей разговоров на вашей АТС \\ Если же запуск осуществляется на отдельном серверето сначала ​ примонтируйте папку с файлами с сервера АТС на сервер с docker по NFS. Вот пример такой конфигурации:​ файл **/​etc/​exports** на сервере с Asterisk:<​code bash>/​records/​mp3/​ 192.168.0.0/​255.255.255.0(rw,insecure,​nohide,​all_squash,​anonuid=1001,​anongid=1001,​no_subtree_check)</​code>​а на сервере с docker, в **/​etc/​fstab** <code bas>​ASTERISK_IP_ADDRESS:/​records/​mp3 /​root/​records nfs rsize=8192,​wsize=8192 0 0</​code>​ *здесь /​records/​mp3 - это путь к файлам записей на АТС \\ Затем выполните запуск уже знакомой командой <code bash>​docker run --name=stat.vistep.ru_local_1.0.3 -p 80:80 -v /​root/​config.php:/​var/​www/​html/​app/config.php -v /​root/​records:/​var/​www/​html/​public/​user/​УНИКАЛЬНЫЙ_КАТАЛОГ_ПОЛЬЗОВАТЕЛЯ/​some/​path/​to/​files/​ -d stat.vistep.ru_local_1.0.3</​code>​ +                 app.hangup() 
-  - Далее откройте web-браузер и перейдите по ссылке <​code>​http://​DOCKER_DAEMON_IP_ADRESS/​install.html</​code>​ Вас встретит мастер настройки {{:​screen_shot_2017-04-21_at_13.54.58.png|}} +               end; 
-  - Заполните все поля ​(на шаге номер 1 мы создали нужного пользователяи нажмите кнопку Тест {{:​screen_shot_2017-04-21_at_13.57.29.png|}} +  };
-  - При успешном прохождении теста на подключение к БД вы увидите {{::​screen_shot_2017-04-21_at_14.00.33.png|}} \\ Если все так, жмите Настроить БД +
-  ​- Здесь мастер сообщит,​ что все прошло успешно и вы можете перейти по ссылке <​code>​http://​DOCKER_DAEMON_IP_ADRESS</​code>​ т.е. к авторизации в системе {{:​screen_shot_2017-04-21_at_14.11.13.png|}+
-  - Для входа в систему статистики используйте данные авторизации (Email-адрес/​Пароль для авторизации) из регистрационного письма.+
  
 +}
 +
 +</​code>​
 +  - Для входа в систему статистики используйте email/​пароль,​ которые сообщат вам инженеры технической поддержки.
 +\\
 На этом настройка завершена,​ приятного пользования! \\ По любым вопросам/​неполадкам/​пр. пишите нам на <​support@vistep.ru>​ или прямо из интерфейса,​ в меню Help Desk. На этом настройка завершена,​ приятного пользования! \\ По любым вопросам/​неполадкам/​пр. пишите нам на <​support@vistep.ru>​ или прямо из интерфейса,​ в меню Help Desk.
 +
 +**Некоторые замечания по части MySQL.**
 +  - В ходе своей работы установщик подключается к БД Asterisk, для чего ему необходимы имя пользователя и пароль. Создать их можно, например,​ вот так: <code sql>
 +mysql -uroot -p
 +Enter password: ​
 +Welcome to the MariaDB monitor. ​ Commands end with ; or \g.
 +Your MariaDB connection id is 3359
 +Server version: 5.5.60-MariaDB MariaDB Server
 +
 +Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 +
 +Type '​help;'​ or '​\h'​ for help. Type '​\c'​ to clear the current input statement.
 +
 +MariaDB [(none)]>​ GRANT ALL PRIVILEGES ON *.* TO '​vistepru'​@'​%'​ \
 +IDENTIFIED BY '​MySuperPassword111'​ WITH GRANT OPTION;
 +flush privileges;
 +quit</​code>​\\  ​
 +  - Также проверьте,​ что MySQL слушает не только 127.0.0.1, но и IP-адрес,​ по которому к нему будет обращаться система статистики. \\ За это в настройках MySQL отвечает параметр **bind-address**,​ проще всего закомментировать эту строку в my.cnf и перезагрузить демон MySQL, тогда сервис будет слушать все IP-адреса сервера.
install_local_version.1554209118.txt.gz · Последние изменения: 2019/04/02 19:45 — Евгений Романенко