Mudanças entre as edições de "PJI011104 - Projeto Integrador IV - 2022-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 268: Linha 268:
  
 
{{collapse top|Passo 5: Pré-configuração do Asterisk}}
 
{{collapse top|Passo 5: Pré-configuração do Asterisk}}
 
{{collapse bottom}}
 
  
 
1) Edite o arquivo asterisk.conf:
 
1) Edite o arquivo asterisk.conf:
Linha 299: Linha 297:
  
 
Deve ser exibido que Logging está habilitado e o mysql está listado no backend.
 
Deve ser exibido que Logging está habilitado e o mysql está listado no backend.
 +
 +
{{collapse bottom}}
  
 
{{collapse top|Descrição da tabela cdr_table}}
 
{{collapse top|Descrição da tabela cdr_table}}

Edição das 19h14min de 5 de julho de 2022

Dados importantes

Professor

Turma virtual

  • Acesse o sigaa bucando a disciplina PJI011104 - PROJETO INTEGRADOR IV (2021.2 - T01)

Aulas síncronas não presenciais

  • Horários
    • segundas e terças-feiras das 19:00 às 22:00
    • sábados letivos serão com atividades assíncronas.
    • Mais informações ver SIGAA

Aulas presenciais

  • Horários
  • Em condições de aulas presenciais: Sala 05, Laboratório Interativo e Meios de transmissão

Organização curricular

Roteiro de instalação do Asterisk

Passo 0: Requisitos para instalação do Asterisk
  1. Virtualbox ou VMware Workstation (ou outro programa de virtualização)
  2. Sistema operacional Linux (testado com Ubuntu Mate 16.04 LTS e 22.04 LTS, este roteiro pode não funcionar para outras distribuições e versões).
    1. Programa PBX Asterisk (testado com asterisk-13.38.3, esse roteiro pode não funcionar para outras versões).
    2. Programa para discagem Zoiper 5 (testado com Zoiper5_5.5.8_x86_64).
    3. Aplicativo de áudio em português (disponibilizado para download).
      • Para evitar confusão, a máquina física que está hospedando a máquina virtual será chamada de hospedeira e a máquina virtual será chamada de máquina virtual. A máquina hospedeira pode ter qualquer sistema operacional.
      • Para facilitar a interação entra a hospedeira e virtual, é importante que a máquina hospedeira tenha os pacotes de integração. No caso da hospedeira ser Debian/Ubuntu certifique-se de ter os pacotes build-essential, module-assistant e dkms (sudo apt update && sudo apt install build-essential module-assistant dkms && sudo m-a prepare e da máquina virtual utilize a opção de instalação dos pacotes extras no menu Devices > Insert Guest Additions CD Image... e depois /media/seu_usuario/VBox_GAs_versao$ sudo ./VBoxLinuxAdditions.run).
      • Link para baixar softwares e demais arquivos necessários: pasta com arquivos
Passo 1: Preparando a máquina virtual que será o servidor Asterisk

Considerando a instalação do Asterisk em uma máquina virtual Ubuntu, as informações a seguir se referem ao que deve ser feito dentro da máquina virtual.

1) Certifique-se de ter uma máquina virtual linux para instalar o Asterisk (recomendável que tenha ao menos 20GB de espaço em disco - você pode criar uma máquina virtual vazia, baixar uma das versões testadas do linux no formato ISO e utilizar esse arquivo como um CDROM para fazer a instalação)

2) Como serão feitos vários comandos que requerem privilégio de administrador, realize o seguinte comando para chavear o terminal para o modo de administração (root):

$ sudo su

Obs.1: Digite a senha de seu usuário (que necessariamente precisa ser um usuário que tenha privilégio de se tornar super usuário - pertencente ao grupo sudoers).

Obs.2: No comando acima foi utilizando o símbolo $ que representava que o terminal estava no modo de usuário comum, após o chaveamento para o modo de administração será utilizado o símbolo #.

Obs.3: Como regra de ouro, procure sempre estar atento as mensagens impressas no terminal. Diversos problemas podem ocorrer e muitas vezes estes são fáceis de resolver apenas seguindo as orientações impressas em casos de falhas. Caso não consiga resolver o problemas pelas próprias informações dadas, copie o erro dado e cole no google para verificar se outros usuários já experimentaram este problema e se há orientações de como resolvê-lo.

3) Certifique-se de que o sistema operacional da máquina virtual esteja atualizado:

# apt update && apt upgrade

4) Instalando as bibliotecas requeridas pelo Asterisk:

# apt install make wget libssl-dev ncurses-dev libnewt-dev libxml2-dev linux-headers-generic g++ libsqlite3-dev uuid-dev libjansson-dev

5) Instalando o gerenciador de banco de dados MySQL:

# apt install mysql-server libmysqld-dev

Obs.: Será utilizada a senha 1234 no mysql.

Passo 2: Intalando o Asterisk e realizando a configuração inicial do Asterisk

1) Baixe o arquivo tar.gz do Asterisk disponibilizado (versão 13.38.3) e mova para a pasta /usr/src.

2) Certifique-se de estar na pasta /usr/src:

# cd /usr/src

3) Descompacte o arquivo tar.gz com o comando:

# tar -zxvf asterisk-13.38.3.tar.gz

4) Entre na pasta descompactada digitando:

# cd asterisk-13.38.3

5) Realize a compilação do Asterisk

# ./configure --libdir=/usr/lib64

6) Realize a configuração da instalação

# make menuselect

Na tela de configuração marque a opção cdr_mysql do menu Add-ons (See README-addons.txt) e depois pessione Save & Exit

7) Realize a instalação

# make

# make install

# make samples

# make config


8) Teste se o asterisk está funcionando # service asterisk start

# rasterisk

Se o serviço subiu e o rasterisk rodou bem, deu tudo certo, você pode sair da interface cliente.

CLI> quit

Passo 3: Configurando o banco de dados MySQL para o Asterisk

1) Inicializando o serviço MySQL

# service mysql start

Após a execução é possível verificar se o serviço está rodando com o comando # service mysql status

2) Entrar no cliente MySQL:

# mysql -u root -p

Digite a senha 1234

3) Verifique as bases de dados existentes com o comando:

mysql> SHOW databases;

Deve aparecer uma listagem contento as bases information_shema, mysql, performance_schema e sys.

4) Crie a base para armazenamento de gravações do Asterisk (cdr):

mysql> CREATE DATABASE cdr;

Executando novamente mysql> SHOW databases; deve exibir esta nova base entre as bases existentes.

5) Crie um usuário para o Asterisk:

mysql> CREATE USER "cdr_user"@"localhost" IDENTIFIED BY "1234"; mysql> GRANT ALL PRIVILEGES ON cdr.* to "cdr_user"@"localhost"; mysql> FLUSH PRIVILEGES;

6) Entre na base de dados cdr:

mysql> use cdr;

No momento a base de dados está vazia (pode-se verificar isso com o comando mysql>show tables;

7) Crie a tabela cdr_table

CREATE TABLE cdr_table (
calldate datetime NOT NULL default CURRENT_TIMESTAMP,
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 "",
peeraccount varchar(20) NOT NULL default "",
linkedid varchar(32) NOT NULL default "",
sequence int(11) NOT NULL default "0",
userfield varchar(255) NOT NULL default "",
monitor varchar(255) NOT NULL default ""
);

O comando mysql>show tables; deve mostrar que há uma tabela, mais detalhes podem ser visualizados com o comando SHOW columns FROM cdr_table;.

8) Para sair do cliente MySQL digite:

mysql> exit;

Passo 4: Pré-configuração do gravador de chamadas do Asterisk

Está sendo utilizado o editor de textos vim que pode ser obtido com o comando # apt-get install vim, mas outro editor de texto qualquer pode ser utilizado.

1) Abra o arquivo cdr.conf para edição:

# vim /etc/asterisk/cdr.conf

2) Configure a forma de gravação de dados de chamadas:

No vim para entrar em modo de edição, digite i.

[mysql]
usegmtime=yes
loguniqueid=yes
loguserfield=yes
accountlogs=yes

Feche e salve o arquivo clicando emn ESC, depois digite :wq e tecle ENTER.

3) Abra o arquivo cdr_mysql.conf para edição

# vim /etc/asterisk/cdr_mysql.conf

4) Adicione a configuração para uso do banco MySQL para gravação de dados:

[global]
hostname=127.0.0.1
dbname=cdr
table=cdr_table
password=1234
user=cdr_user
port=3306
sock=/var/run/mysqld/mysqld.sock
timezone=UTC

Passo 5: Pré-configuração do Asterisk

1) Edite o arquivo asterisk.conf:

# vim /etc/asterisk/asterisk.conf

2) Ative o modo verboso do Asterisk para que ele exiba mensagens detalhadas em tela.

  • Procure a linha onde está escrito verbose = 3 e descomente esta linha apagando o caracter ; do início da linha.

3) Reinicie o serviço Asterisk

# service asterisk restart

4) Entre no console do Asterisk

# rasterisk

5) Verifique se o cdr está configurado

CLI> cdr show status

Deve ser exibido que Logging está habilitado e o mysql está listado no backend.

Descrição da tabela cdr_table

Alguns dos campos da tabela cdr_table são:

  • calldate: data e hora da chamada
  • clid: identificador único da chamada
  • src (source): quem fez a chamada (de onde originou a chamada)
  • dst (destino): destino da chamada
  • monitor: nome do arquivo de áudio que contém a gravação da chamada
Pastas do asterisk
  • /usr/src: Pasta utilizada neste tutorial para armazenar o asterisk-13.38.3.zip e os arquivos descompactados.
  • /var/lib/asterisk: Para com binários, incluindo arquivos de áudio
  • /etc/asterisk: Para com arquivos de configuração
Entendendo os parâmetros de configuração do Asterisk

Tipos SIP:

  • peer: Entidade SIP a qual o Asterisk envia chamadas (exemplo: um telefone ou central que que só recebe chamadas).
  • user: Entidade SIP a qual executa chamadas através do Asterisk (exemplo: um telefone que só faz chamadas).
  • friend: Entidade SIP que pode fazer e receber chamadas.

Qualify:

  • yes: O Asterisk testa de tempos em tempos se o dispositivo (terminal) está acessível (por padrão a cada 2 segundos)
Comandos rasterisk

Mostra lista de comandos:

CLI> help , ou executando: $ asterisk -r -x "help"

Sair da interface cliente:

CLI> quit

Recarrega configurações SIP:

CLI> sip reload

Recarrega todas as configurações:

CLI> reload

Mostra status dos terminais cadastrados:

CLI> sip show peers

Resolução de problemas

PROBLEMA: Não está sendo possível acessar o servidor Asterisk de uma outra máquina. Solução: Liberação de portas do firewall para funcionamento do Asterisk:

# iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT

# iptables -A INPUT -p udp -m udp --dport 5060 -j ACCEPT

PROBLEMA: Asterisk não está mais subindo depois que a máquina foi reiniciada. Solução: reinstalar o Asterisk (sem modificar os arquivos de configuração que já tenham sido editados)

Tente subir o serviço manualmente

$ sudo su

# service asterisk start

# service asterisk status

Se pelo comando status o serviço não subiu, tente reinstalar o Asterisk:

$ sudo su

# cd /usr/src/asterisk-13.38.3/

# make install

# service asterisk start

Roteiro de instalação do Asterisk com freepbx utilizando docker

Pré-requisitos

Ter o Docker instalado na máquina hospedeira

Instalação básica do Asterisk com freepbx para testes

Instalação básica via docker com banco de dados MySQL embutido.

Obs.: Há diferentes imagens docker que trazem o Asterisk já previamente configurado, neste tutorial utilizaremos a imagem disponibilizada em [1].

1) Baixando a imagem docker tiredofit/freepbx:

$ docker pull tiredofit/freepbx:latest

Obs.: No lugar de latest, pode-se utilizar outra tag. Este tutorial foi realizado com a versão 15, portanto, para baixar a exata imagem que foi utilizada neste tutorial utilize o comando $ docker pull tiredofit/freepbx:15

Aguarde a realização do download completo.

Verifique se a imagem baixada está aparecendo na lista de imagens disponíveis no docker local.

$ docker image ls

2) Subindo um contêiner baseado na imagem tiredofit/freepbx:

Antes de subir o contêiner, podemos verificar se já há algum contêiner rodando. Espera-se que neste momento ainda não haja nenhum contêiner baseado na imagem tiredofit/freepbx, já que o comando para subir o contêiner ainda não foi executado:

$ docker ps

Para subir o contêiner, rode (esse contêiner está sendo apelidado de test-freepbx):

$ docker run --name test-freepbx tiredofit/freepbx

Este comando pode demorar alguns minutos (até 30). O terminal deve apresentar uma série de procedimentos de inicialização que são executados dentro do contêiner que incluem s6-init, fix-attrs, cont-init e a criação dos arquivos padrão para freepbx, utilização de "embedded db" no CDR, além da inicialização do WebServer para a interface freepbx. O último comando deve ser a inicialização do zabbix e do cron.

3) Acessando a interface Web do freepbx.

Para acessar a interface, é necessário saber o endereço IP do sistema que roda dentro do contêiner, para isso:

3.1) Abra um outro terminal

3.2) Verifique se o contêiner está rodando com o comando 'docker ps' (a seguir um exemplo de resposta):

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

bca6826ffaea tiredofit/freepbx "/init" 53 minutes ago Up 53 minutes 80/tcp, 443/tcp, 4445/tcp, 4569/tcp, 5060/udp, 5061/tcp, 5161/tcp, 8001/tcp, 8003/tcp, 8008-8009/tcp, 8025/tcp, 5160/udp, 10050/tcp, 18000-20000/udp test-freepbx

3.3) Conecte este novo terminal ao contêiner que foi apelidado de test-freepbx:

$ docker exec -it test-freepbx bash

3.4) Obtenha o endereço IP do contêiner com o comando ip -4 a (a seguir um exemplo de resposta):

# ip -4 a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever

Portanto, neste exemplo, o IP do contêiner é 172.17.0.2.

3.5) Para acessar a interface Web do freepbx, abra o browser e digite http://<IP do contêiner>/admin. Neste exemplo ficou http://172.17.0.2/admin

Obs.: Para desconectar o terminal do contêiner, digite exit.

4) Daqui em diante as configurações devem seguir a interface do freepbx que permite inclusive adicionar idiomas e arquivos de áudio.

Obs.: Os arquivos de configuração do Asterisk podem ser consultados em /etc/asterisk e os arquivos binários incluindo arquivos de sons ficam em /var/lib/asterisk, porém, não é recomendável modificar os arquivos manualmente. Para realizar configurações, deve-se utilizar a interface gráfica do freepbx.

5) Para encerrar o contêiner, pressional Ctrl+C no terminal que subiu o contêiner

6) Para reiniciar o contêiner que foi criado anteriormente

$ docker start -ai test

ATENÇÃO: Após derrubar o contêiner, se for dado novo comando $ docker run ... será criado um contêiner completamente novo.

Para aplicações finais (em ambiente de produção), a utilização do banco de dados embutido no contêiner docker do Asterisk não é recomendada pois no caso de perda deste contêiner, as informações do bando de dados também serão perdidas. Para evitar isso, utiliza-se um arquivo de banco de dados externo ao contêiner, além de que uma instalação profissional também deve estar associada a configurações extra de segurança tanto de acesso ao sistema quanto de backup de dados.

Instalação de um abiente de produção do Asterisk com freepbx

A instalação via docker apresentada para testes utiliza banco de dados embutido no container, o que é ruim pois a perda do container acarreta em perda dos dados do banco e também não trata de backup dos dados do banco. Nesta instalação para ambiente de produção, estes problemas são solucionados. Para isso está sendo utilizada a ferramente docker-compose, um orquestrador de contêineres, que concorre, em termos de funcionalidades, com a conhecida ferramenta kubernetes.

No docker-compose um arquivo no formato yml descreve os contêineres que deve ser carregados, suas configurações entre outros parâmetros como a configuração de rede a qual os contêineres estão conectados.

Para este tutorial será utilizado o exemplo dado por [2] na pasta example onde um arquivo docker-compose.yml é disponibilizado. No exemplo dado, três contêineres são criados:

  • freepbs-app: que sobe o serviço Asterisk e a interface Web freepbx. Este contêiner mapeia 4 volumes que são acessíveis da máquina hospedeira (./certs, ./data, ./log e ./data/www).
  • freepbx-db: sobe o serviço mariadb e mapeia a pasta ./db
  • freepbx-db-backup: realiza backup do banco de dados, mapeando a pasta ./dbbackup.

Todos os contêineres estão sob o "guarda-chuva" de um proxy reverso provido por uma rede chamada nginx-proxy. Na prática, o proxy reverso é um "guarda-chuva" do lado servidor. O nginx é um servidor web, que neste caso está sendo utilizado como "porta de entrada" para serviços providos por este conjunto de contêineres.

Procedimento:

1) Para subir esse conjunto de contêineres exemplo, é necessário baixar o arquivo docker-compose.yml em uma pasta qualquer.

2) Crie a rede nginx-proxy:

$ docker network create nginx-proxy

3) Para carregar o conjunto de contêineres, estando na pasta onde está o arquivo docker-compose.yml basta digitar:

$ docker-compose up

Ao subir os multiplos contêineres, deve ser possível observar as mensagens de carregamento de serviços nestes diferentes contêineres (freepbx-db, freepbx-db-backup e free-pbx-app)

4) Para verificar se os contêineres estão rodando, em um outro terminal digite:

$ docker ps

Deve ser possível ver três contêineres ativos.

4) Para conectar o terminal a um contêiner, por exemplo o freepbx-app, digite:

$ docker exec -it freepbx-app bash

Obtenha o IP da máquina da aplicação freepbx utilizando a mesma lógica apresentada no ambiente de testes.

Para desconectar, digite $ exit


Roteiro de instalação do Asterisk (apenas) utilizando docker

Pré-requisitos

Ter o Docker instalado na máquina hospedeira

Instalação do Asterisk de demonstração

1) Clonando o repositório https://github.com/mlan/docker-asterisk:

$ git clone https://github.com/mlan/docker-asterisk.git

Aguarde a realização do download completo.

2) Entre na pasta demo do repositório baixado

$ cd docker-asterisk/demo

3) De dentro da pasta demo, para subir o contêiner de teste digite:

$ docker-compose up -d

4) De dentro da pasta demo, para conectar com o console do Asterisk que está dentro do contêiner de teste digite:

$ docker-compose exec tele asterisk -rvvvddd

5) Do console do Asterisk pode-se executar diversos comandos, por exemplo, para listar os endpoints configurados, digite (observe que esse contêiner utiliza a bibioteca pjsip):

> pjsip show endpoints

Obs.: Para sair do console digite exit

6) Para conectar o terminal com o contêiner, de dentro da pasta demo, digite:

$ docker-compose exec tele bash

6.1) Para entrar no console do Asterisk digite:

# rasterisk