Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Ambos lados da revisão anterior Revisão anterior Próxima revisão | Revisão anterior Próxima revisão Ambos lados da revisão seguinte | ||
instalacao_on_premise_flashman [02/05/2019 21:15] superuser |
instalacao_on_premise_flashman [07/05/2020 05:44] superuser |
||
---|---|---|---|
Linha 3: | Linha 3: | ||
=== Sistemas operacionais testados: Ubuntu 16.04 e 18.04 === | === Sistemas operacionais testados: Ubuntu 16.04 e 18.04 === | ||
=== Requisitos de hardware: Processador quad core (i5 ou superior). 8GB RAM. 50GB HDD disponíveis. === | === Requisitos de hardware: Processador quad core (i5 ou superior). 8GB RAM. 50GB HDD disponíveis. === | ||
+ | === Requisito de rede: IP real público (Será necessário para os aplicativos FlashApp acessarem o roteador de qualquer rede) === | ||
+ | === Requisitos de Domínio: Criar um mapeamento de domínio para o IP escolhido. (Exemplo: flashman.provedor.com.br) === | ||
+ | |||
+ | ---- | ||
+ | |||
- Atualizar repositórios através do comando <code>sudo apt-get update</code> | - Atualizar repositórios através do comando <code>sudo apt-get update</code> | ||
- IMPORTANTE! Instalar e configurar o NTP | - IMPORTANTE! Instalar e configurar o NTP | ||
Linha 34: | Linha 39: | ||
- Para instalar em sistemas operacionais diferentes do Ubuntu, veja a documentação em https://docs.mongodb.com/manual/installation/ | - Para instalar em sistemas operacionais diferentes do Ubuntu, veja a documentação em https://docs.mongodb.com/manual/installation/ | ||
- Atenção! Não alterar a porta padrão 27017 | - Atenção! Não alterar a porta padrão 27017 | ||
- | - Instalar NodeJS (versão 6.4.0 ou superior) | + | - Instalar NodeJS (versão 8.17.0) |
- Para instalar utilizando o Ubuntu | - Para instalar utilizando o Ubuntu | ||
- Insira os seguintes comandos: <code> | - Insira os seguintes comandos: <code> | ||
- | curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - | + | curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - |
sudo apt-get install -y nodejs | sudo apt-get install -y nodejs | ||
</code> | </code> | ||
- Para instalar em sistemas operacionais diferentes do Ubuntu, veja a documentação em https://nodejs.org/en/download/package-manager/ | - Para instalar em sistemas operacionais diferentes do Ubuntu, veja a documentação em https://nodejs.org/en/download/package-manager/ | ||
- Instalar pacotes essenciais do Ubuntu: <code>sudo apt-get install build-essential</code> | - Instalar pacotes essenciais do Ubuntu: <code>sudo apt-get install build-essential</code> | ||
- | - Instalar o instalador de pacotes do NodeJS: <code>sudo apt-get install npm</code> | ||
- Instalar o PM2 através do comando: <code> | - Instalar o PM2 através do comando: <code> | ||
- | npm install pm2 -g | + | sudo npm install pm2 -g |
</code> | </code> | ||
- Instalar o extrator de .ZIP através do comando: <code>sudo apt-get install unzip</code> | - Instalar o extrator de .ZIP através do comando: <code>sudo apt-get install unzip</code> | ||
Linha 50: | Linha 54: | ||
mkdir ./flashman | mkdir ./flashman | ||
unzip flashman.zip -d ./flashman/</code> | unzip flashman.zip -d ./flashman/</code> | ||
+ | - **Atenção!** O arquivo .ZIP pode ser baixado através da conta da Anlix através da opção "Ferramentas" | ||
- No diretório extraído do Flashman, execute o seguinte comando: <code> | - No diretório extraído do Flashman, execute o seguinte comando: <code> | ||
npm install | npm install | ||
</code> | </code> | ||
- Configure o Nginx para receber e autorizar a comunicação HTTPS com o Flashman através do seguinte trecho de código de exemplo: <code> | - Configure o Nginx para receber e autorizar a comunicação HTTPS com o Flashman através do seguinte trecho de código de exemplo: <code> | ||
+ | server { | ||
+ | listen 80 default_server; | ||
+ | listen [::]:80 default_server; | ||
+ | server_name _; | ||
+ | return 301 https://$host$request_uri; | ||
+ | } | ||
server { | server { | ||
listen 443 ssl; | listen 443 ssl; | ||
Linha 149: | Linha 160: | ||
O script de recuperação de dados do Flashman na nuvem da Anlix está localizado em: | O script de recuperação de dados do Flashman na nuvem da Anlix está localizado em: | ||
<code><<caminho completo>>/flashman/scripts/restore-flashman-onpremise-db.sh</code> | <code><<caminho completo>>/flashman/scripts/restore-flashman-onpremise-db.sh</code> | ||
+ | |||
+ | ==== Opcional: Replicação de instâncias do Flashman para escalabilidade do serviço ==== | ||
+ | |||
+ | **Atenção! Essa configuração deve ser feita com o acompanhamento da equipe técnica da Anlix. Necessário apenas em casos de alta carga de rede** | ||
+ | |||
+ | - Instale o proxy HAProxy para balanceamento de requisições MQTTS | ||
+ | <code>sudo apt-get install haproxy</code> | ||
+ | - Instale o banco de dados em memória Redis | ||
+ | <code>sudo apt-get install redis-server</code> | ||
+ | - Habilite os serviços instalados | ||
+ | <code> | ||
+ | sudo systemctl enable haproxy | ||
+ | sudo systemctl enable redis-server | ||
+ | </code> | ||
+ | - Aplique as seguintes configurações em cada arquivo enviroment.config.json presente em cada diretório criado | ||
+ | |||
+ | **Atenção! Caso a chave não exista no arquivo, você poderá criá-la.** | ||
+ | <code> | ||
+ | "name": <<nome do diretorio>>, | ||
+ | "FLM_IMG_RELEASE_DIR": "<<caminho completo>>/flashman/public/firmwares/", | ||
+ | "FLM_CERT_MQTT_DIR": "<<caminho completo>>/flashman/certs", | ||
+ | "FLM_WEB_PORT": <<porta>>, | ||
+ | "FLM_SCHEDULER_ACTIVE": false, | ||
+ | "FLM_DISABLE_AUTO_UPDATE": "true", | ||
+ | "FLM_USE_MQTT_PERSISTENCE": true | ||
+ | </code> | ||
+ | - Substitua o <<nome do diretorio>> pelo nome do diretório criado. Exemplo: flashman-2 | ||
+ | |||
+ | - Substitua o <<caminho completo>> pelo caminho até o diretório raiz do Flashman. | ||
+ | |||
+ | - Substitua o <<porta>> pelo valor 8000 + número do diretório flashman. Exemplo: 8002 | ||
+ | |||
+ | - Edite os arquivos mqtts-port.json presentes em cada diretório flashman para um valor 10000 + número do diretório flashman | ||
+ | |||
+ | - Edite o arquivo de configuração do HAProxy para o seguinte formato. Lembre de alterar onde estiver marcado | ||
+ | <code> | ||
+ | global | ||
+ | nbproc 4 | ||
+ | cpu-map 1 0 | ||
+ | cpu-map 2 1 | ||
+ | #ADICIONE MAIS CPUS AQUI CASO SEJA POSSIVEL | ||
+ | #cpu-map 3 2 | ||
+ | #cpu-map 4 3 | ||
+ | # ulimit-n 500000 | ||
+ | maxconn 40000 | ||
+ | # maxpipes 40000 | ||
+ | # tune.maxaccept 8000 | ||
+ | tune.ssl.cachesize 1000000 | ||
+ | tune.ssl.default-dh-param 2048 | ||
+ | log /dev/log local0 info | ||
+ | chroot /var/lib/haproxy | ||
+ | stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners | ||
+ | user haproxy | ||
+ | group haproxy | ||
+ | daemon | ||
+ | |||
+ | defaults | ||
+ | log global | ||
+ | mode tcp | ||
+ | option dontlognull | ||
+ | option redispatch | ||
+ | maxconn 40000 | ||
+ | timeout connect 5000ms | ||
+ | timeout client 50000ms | ||
+ | timeout server 50000ms | ||
+ | |||
+ | listen mqtt | ||
+ | bind *:<**porta MQTTS designada para o provedor**> | ||
+ | mode tcp | ||
+ | # Use this to avoid the connection loss when client subscribed for a topic and its idle for sometime | ||
+ | option clitcpka # For TCP keep-alive | ||
+ | timeout client 3h # By default TCP keep-alive interval is 2hours in OS kernel, 'cat /proc/sys/net/ipv4/tcp_keepalive_time' | ||
+ | timeout server 3h # By default TCP keep-alive interval is 2hours in OS kernel | ||
+ | option tcplog | ||
+ | balance leastconn | ||
+ | server flashman-2 localhost:<**porta MQTTS designada para o provedor + 2**> check | ||
+ | server flashman-3 localhost:<**porta criada no passo anterior + 3**> check | ||
+ | </code> | ||
+ | |||
+ | - Edite o arquivo de configuração Nginx para balancear a carga HTTPS. Edite onde estiver marcado conforme abaixo. | ||
+ | <code> | ||
+ | upstream backend { | ||
+ | ip_hash; | ||
+ | server localhost:<** porta web configurada ao editar o arquivo enviroment.config.json **>; | ||
+ | server localhost:<** porta web configurada ao editar o arquivo enviroment.config.json **>; | ||
+ | } | ||
+ | |||
+ | # INSIRA O BLOCO ABAIXO DENTRO DA CHAVE SERVER | ||
+ | |||
+ | location ~* ^/deviceinfo/syn/ { | ||
+ | proxy_redirect http:// https://; | ||
+ | |||
+ | proxy_set_header X-Real-IP $remote_addr; | ||
+ | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
+ | proxy_set_header X-NginX-Proxy true; | ||
+ | proxy_set_header Upgrade $http_upgrade; | ||
+ | proxy_set_header Connection 'upgrade'; | ||
+ | proxy_set_header Host $host; | ||
+ | |||
+ | proxy_pass http://backend; | ||
+ | proxy_http_version 1.1; | ||
+ | |||
+ | proxy_cache_bypass $http_upgrade; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | - Edite o arquivo environment.config.json no diretório flashman principal, alterando as seguintes chaves: | ||
+ | <code> | ||
+ | "FLM_CERT_MQTT_DIR": "<<caminho completo>>/flashman/certs", | ||
+ | "FLM_SCHEDULER_ACTIVE": true, | ||
+ | "FLM_USE_MQTT_PERSISTENCE": true, | ||
+ | </code> | ||
+ | |||
+ | - Insira também quantas instâncias serão iniciadas no mesmo aquivo, após a chave "exec_mode": | ||
+ | <code> | ||
+ | "exec_mode": "cluster", | ||
+ | "instances" : "max" | ||
+ | </code> | ||
+ | |||
+ | - Edite o arquivo mqtts-port.json para um porta alta com numeração seguinte a porta MQTTS designada para o provedor | ||
+ | |||
+ | - Reinicie os serviços nginx e haproxy | ||
+ | |||
+ | ** Atenção! Instância principal deverá ser removida e recriada no pm2 ** | ||
+ | |||
+ | <code> | ||
+ | pm2 delete flashman | ||
+ | pm2 start environment.config.json | ||
+ | </code> | ||
+ | |||
+ | |||
+ |