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 [14/10/2020 12:59] superuser |
instalacao_on_premise_flashman [16/12/2021 19:09] superuser [Procedimento de instalação] |
||
---|---|---|---|
Linha 1: | Linha 1: | ||
===== Instalação diretamente no servidor ===== | ===== Instalação diretamente no servidor ===== | ||
- | === Sistemas operacionais testados: Ubuntu 16.04 e 18.04 === | + | ==== Sistemas operacionais testados ==== |
- | === 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) === | + | |
- | === Requisitos de firewall: Liberação de ICMP reply (ping), porta 80, 443 TCP e porta para comunicação MQTTS (ver nas configurações de usuário de sua conta da Anlix) === | + | |
- | ---- | + | Ubuntu 20.04 LTS- versão SERVER e Debian 10 - versão SERVER. |
- | ** Atenção! ** Caso você esteja realizando uma migração da nuvem para um servidor local, requisite o suporte da Anlix para migração de chaves de autenticação importantes para o correto funcionamento do App do Técnico! | + | ==== Requisitos de hardware ==== |
- | ---- | + | Mínimo: 2 núcleos de processamento. 2GB RAM. 50GB HDD livres |
+ | Recomendado: 4 núcleos de processamento. 8GB RAM. 50GB HDD livres | ||
- | - Atualizar repositórios através do comando <code>sudo apt-get update</code> | + | ==== Requisito de rede ==== |
- | - IMPORTANTE! Instalar e configurar o NTP | + | |
- | - Exemplo para Ubuntu 16.04: <code> | + | |
- | sudo timedatectl set-timezone America/Sao_Paulo | + | |
- | sudo timedatectl set-ntp on | + | |
- | </code> | + | |
- | - Aguardar um minuto e verificar status de sincronização através do comando <code>timedatectl</code> | + | |
- | - Instalar o Git | + | |
- | - Insira o seguinte comando: <code> | + | |
- | sudo apt-get install git | + | |
- | </code> | + | |
- | - Instalar o Nginx (versão 1.10.3 ou superior) | + | |
- | - Insira o seguinte comando: <code> | + | |
- | sudo apt-get install nginx | + | |
- | </code> | + | |
- | - Instalar o MongoDB (versão 3.2 ou superior) | + | |
- | - Para instalar utilizando o Ubuntu | + | |
- | - Insira os seguintes comandos para Ubuntu 18.04: <code> | + | |
- | sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 | + | |
- | echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list | + | |
- | sudo apt-get update | + | |
- | sudo apt-get install -y mongodb-org | + | |
- | </code> | + | |
- | - Insira os seguintes comandos para Ubuntu 16.04: <code> | + | |
- | sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 | + | |
- | echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list | + | |
- | sudo apt-get update | + | |
- | sudo apt-get install -y mongodb-org | + | |
- | </code> | + | |
- | - Inicie o serviço do MongoDB através dos comandos: <code> | + | |
- | sudo systemctl enable mongod | + | |
- | sudo systemctl start mongod | + | |
- | </code> | + | |
- | - 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 | + | |
- | - Instalar NodeJS (versão 8.17.0) | + | |
- | - Para instalar utilizando o Ubuntu | + | |
- | - Insira os seguintes comandos: <code> | + | |
- | curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - | + | |
- | sudo apt-get install -y nodejs | + | |
- | </code> | + | |
- | - 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 o PM2 através do comando: <code> | + | |
- | sudo npm install pm2 -g | + | |
- | </code> | + | |
- | - Instalar o extrator de .ZIP através do comando: <code>sudo apt-get install unzip</code> | + | |
- | - **ATENÇÃO!** Não faça o comando a seguir como usuário root caso exista outro usuário na máquina | + | |
- | - Extraia o arquivo .ZIP do pacote contendo o Flashman no diretório de sua preferência. Como exemplo eis o comando: <code> | + | |
- | mkdir ./flashman | + | |
- | 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" | + | |
- | - **ATENÇÃO!** Não faça o comando a seguir como usuário root caso exista outro usuário na máquina | + | |
- | - No diretório extraído do Flashman, execute o seguinte comando: <code> | + | |
- | npm install --production | + | |
- | </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 { | + | |
- | listen 443 ssl; | + | |
- | server_name meuflashmandeexemplo.dominio.com; | + | IP real público. Será necessário para os aplicativos FlashApp acessarem o roteador de qualquer rede |
- | location / { | + | ==== Requisitos de Domínio ==== |
- | proxy_redirect http:// https://; | + | |
- | proxy_set_header X-Real-IP $remote_addr; | + | Criar um mapeamento de domínio para o IP escolhido. Exemplo: flashman.provedor.com.br |
- | 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://localhost:8000; | + | ==== Requisitos de firewall ==== |
- | proxy_http_version 1.1; | + | |
- | proxy_cache_bypass $http_upgrade; | + | Liberação de ICMP reply (ping), porta 80, 443 TCP e porta para comunicação MQTTS. A porta para MQTTS estará especificado no usuário de sua conta da Anlix |
- | } | + | ==== Notas importantes ==== |
- | client_max_body_size 32M; | + | Não recomendamos o uso de sistemas 32 bits em geral |
- | } | + | |
- | </code> | + | |
- | - O trecho de código acima pode ser configurado a partir do comando <code>sudo nano /etc/nginx/sites-available/default</code> | + | |
- | - Substitua a variável "server_name" pelo domínio completo de seu servidor | + | |
- | - Recarregue o serviço Nginx através do comando: <code>sudo systemctl reload nginx</code> | + | |
- | - Use o gerador de certificados gratuitos Certbot para gerar o certificado HTTPS para o Flashman. Siga os passos: <code> | + | |
- | sudo apt-get update | + | |
- | sudo apt-get install software-properties-common | + | |
- | sudo add-apt-repository ppa:certbot/certbot | + | |
- | sudo apt-get update | + | |
- | sudo apt-get install python-certbot-nginx | + | |
- | + | ||
- | sudo certbot --nginx | + | |
- | </code> | + | |
- | - Siga os passos informados pelo comando certbot --nginx | + | |
- | - Mais informações sobre o certbot em: https://certbot.eff.org/ | + | |
- | - Após gerar o certificado no passo anterior, insira uma cópia diretamente no diretório raiz do Flashman através dos comandos: <code> | + | |
- | cp /etc/letsencrypt/live/<<meuflashmandeexemplo.dominio.com>>/fullchain.pem <<caminho completo>>/flashman/certs/cert.pem | + | |
- | cp /etc/letsencrypt/live/<<meuflashmandeexemplo.dominio.com>>/privkey.pem <<caminho completo>>/flashman/certs/key.pem | + | |
- | chown <<usuário>> <<caminho completo>>/flashman/certs/cert.pem <<caminho completo>>/flashman/certs/key.pem | + | |
- | chmod 400 <<caminho completo>>/flashman/certs/cert.pem <<caminho completo>>/flashman/certs/key.pem | + | |
- | </code> | + | |
- | - Substitua o valor <<meuflashmandeexemplo.dominio.com>> pelo domínio completo de seu servidor cujo o certificado foi gerado | + | |
- | - Substitua o <<caminho completo>> pelo caminho até o diretório raiz do Flashman. | + | |
- | - Substitua o <<usuário>> pelo usuário do sistema que irá executar o servidor do Flashman (exemplo: localuser) | + | |
- | - Insira a seguinte linha no final do arquivo /etc/letsencrypt/renewal/meuflashmandeexemplo.dominio.com.conf : <code> | + | |
- | renew_hook = <<caminho completo>>/flashman/scripts/cert-deploy-hook.sh <<caminho completo>>/flashman/certs meuflashmandeexemplo.dominio.com <<usuário>> | + | |
- | </code> | + | |
- | - Verifique se o arquivo <<caminho completo>>/flashman/scripts/cert-deploy-hook.sh possui permissões de execução | + | |
- | - Substitua o valor "meuflashmandeexemplo.dominio.com" pelo domínio completo de seu servidor cujo o certificado foi gerado | + | |
- | - Substitua o <<caminho completo>> pelo caminho até o diretório raiz do Flashman. | + | |
- | - Substitua o <<usuário>> pelo usuário do sistema que irá executar o servidor do Flashman (exemplo: localuser) | + | |
- | - Abra o arquivo environment.config.json e adicione a variável FLM_CERT_MQTT_DIR com o caminho para o certificado certbot recém gerado. Exemplo: <code> | + | |
- | { | + | |
- | "apps": [{ | + | |
- | "name": "flashman", | + | |
- | "script": "bin/www", | + | |
- | "log_date_format": "YYYY-MM-DD HH:mm Z", | + | |
- | "autorestart": true, | + | |
- | "env": { | + | |
- | "production": true, | + | |
- | "TZ": "America/Sao_Paulo", | + | |
- | "FLM_IMG_RELEASE_DIR": "./public/firmwares/", | + | |
- | "FLM_ALLOW_DEV_UPDATE_REST_DATA": false, | + | |
- | "FLM_MONGODB_HOST": "localhost", | + | |
- | "FLM_ADM_USER": "admin", | + | |
- | "FLM_ADM_PASS": "flashman", | + | |
- | "FLM_CERT_MQTT_DIR": "<<caminho completo>>/flashman/certs" | + | |
- | }, | + | |
- | "error_file": "/dev/stderr", | + | |
- | "out_file": "/dev/stdout", | + | |
- | "exec_mode": "cluster" | + | |
- | }] | + | |
- | } | + | |
- | </code> | + | |
- | - Substitua o <<caminho completo>> pelo caminho até o diretório raiz do Flashman. | + | |
- | - **ATENÇÃO!** Não faça o comando a seguir como usuário root caso exista outro usuário na máquina | + | |
- | - No diretório principal do Flashman, inicie o serviço através do comando <code>pm2 start environment.config.json</code> | + | |
- | - **ATENÇÃO!** Não faça o comando a seguir como usuário root caso exista outro usuário na máquina | + | |
- | - Verifique se o serviço está em execução através do comando: <code>pm2 status</code> | + | |
- | - **ATENÇÃO!** Não faça o comando a seguir como usuário root caso exista outro usuário na máquina | + | |
- | - Deixe o serviço do Flashman auto renicializável através dos comandos executados no diretório principal do Flashman: <code> | + | |
- | pm2 startup | + | |
- | pm2 save | + | |
- | </code> | + | |
- | + | ||
- | ==== Opcional: Backup dos dados na nuvem da Anlix ==== | + | |
- | + | ||
- | **Atenção! Entre em contato com a Anlix para obter os tokens de backup de dados na nuvem** | + | |
- | + | ||
- | O script de backup de dados do Flashman na nuvem da Anlix está localizado em: | + | |
- | <code><<caminho completo>>/flashman/scripts/backup-flashman-onpremise-db.sh</code> | + | |
- | + | ||
- | 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> | + | |
- | + | ||
- | ==== 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> | + | |
- | + | ||
- | - Edite o arquivo mqtts-port.json presente no diretório flashman para o valor existente no arquive acrescido de uma unidade | + | |
- | + | ||
- | - 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 8001 ou porta web configurada + 1 **>; | + | |
- | server localhost:<** porta web 8002 ou porta web configurada + 1 **>; | + | |
- | } | + | |
- | + | ||
- | # 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> | + | |
+ | ==== Procedimento de instalação ==== | ||
+ | Entre em contato com a equipe de suporte da Anlix para agendamento de horário para a instalação. A equipe fará toda a instalação e migração de dados que for necessária. | ||
+ | Contato suporte por WhatsApp: (21) 99835-2603 ou através do link https://api.whatsapp.com/send/?phone=5521998352603 |