PJI011104 - Projeto Integrador IV - 2022-1

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

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) Descompacte o arquivo tar.gz com o comando:

# tar -zxvf asterisk-13.38.3.tar.gz

3) Entre na pasta descompactada digitando:

# cd asterisk-13.38.3

4) Realize a compilação do Asterisk

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

5) 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

6) Realize a instalação

# make

# make install

# make samples

# make config


7) 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

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 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'):

$ docker run --name test 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

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

$ docker exec -it test 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

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

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