Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
instalacao_on_premise_flashman [19/06/2020 19:37]
superuser
instalacao_on_premise_flashman [15/02/2024 19:43] (atual)
superuser [Requisitos de hardware]
Linha 1: Linha 1:
-===== Instalação ​diretamente no servidor =====+===== Requisitos de hardware e software para a Instalação ​do servidor ​Flashman Local =====
  
-=== 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) ​===+
  
-----+Ubuntu 20.04 22.04 LTS versão SERVER, Debian 10 e 11 LTS versão SERVER.
  
-  - Atualizar repositórios através do comando <​code>​sudo apt-get update</​code>​ +==== Requisitos ​de hardware ====
-  - 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>​ +
-  - 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"​ +
-  - 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;+Mínimo: 4 núcleos de processamento8GB RAM50GB HDD livres
  
-    location / { +Recomendado: ​ 
-        ​proxy_redirect http:// https://;+            Até um total de 12.000 CPES, 8 núcleos de processamento 8GB RAM 50GB HDD livres ​       
 +            Até um total de 24.000 CPES, 8 núcleos de processamento 16GB RAM 50GB HDD livres 
 +            Até um total de 48.000 CPES, 12 núcleos de processamento 32GB RAM 50GB HDD livres 
 +              
 +             Obs.Após 48k CPEs é necessário a utilização de outra máquina ou VM  
 +             Obs.2Para modelos híbridos, é necessário uma verificação com nosso time de engenharia para uma melhor composição da(s) máquina(s)  
 +==== Requisito de rede ====
  
-        proxy_set_header X-Real-IP $remote_addr;​ +IP real público. Será necessário para os aplicativos FlashApp acessarem o roteador de qualquer rede
-        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 Domínio ====
-        proxy_http_version 1.1;+
  
-        proxy_cache_bypass $http_upgrade;​+Criar um mapeamento de domínio para o IP escolhido. Exemplo: flashman.provedor.com.br
  
-    }+         ​ATENÇÂO:​  
 +         Caso o provedor deseje criar um  domínio com autorização da Autoridade de Certificação (CAA- Certificate Authority Authorization),​ será necessário autorizar a geração de certificado para a "​LET'​s ENCRYPT",​ 
 +         já que servidores FLashman utilizam certificados emitidos através da "​LET'​s ENCRYPT"​.  
 +         
  
-    client_max_body_size 32M; +==== Requisitos ​de firewall ====
-+
-</​code>​ +
-    - O trecho ​de código acima pode ser configurado a partir do comando <​code>​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 +  * Liberação de ICMP reply (ping) 
-</​code>​ +  ​* Liberação da porta 9001 para ip 45.77.115.7 (TCP) : Utilizada ​pelo processo ​de migração 
-    - Siga os passos informados pelo comando certbot --nginx +  * Liberação da porta ssh para ip 177.38.99.106 
-    - Mais informações sobre o certbot em: https://​certbot.eff.org/​ +  * Liberação da porta 80 (TCP) Para validação de certificados SSL via LetsEncrypt 
-  ​- Após gerar certificado no passo anterior, insira uma cópia diretamente no diretório raiz do Flashman através dos comandos: <​code>​ +  ​* Liberação da porta 443 (TCP) Para navegação da interface web e comunicação de gerência ​com os CPEs 
-cp /​etc/​letsencrypt/​live/<<​meuflashmandeexemplo.dominio.com>>/​fullchain.pem <<​caminho completo>>/​flashman/​certs/​cert.pem +  * Liberação da porta 3478 (TCP) : Para uso de mecanismo ​de "furo" de NAT via servidor ​STUN 
-cp /​etc/​letsencrypt/​live/<<​meuflashmandeexemplo.dominio.com>>/​privkey.pem <<​caminho completo>>/​flashman/​certs/​key.pem +  * Liberação das portas 7547, 57547 (TCP) Para uso do protocolo TR-069 no envio recepção de comandos ​para as CPEs 
-chown <<​usuário>>​ <<​caminho completo>>/​flashman/​certs/​cert.pem <<​caminho completo>>/​flashman/​certs/​key.pem +  ​* Liberação da porta 7567 (TCP) Para download de firmwares ​no procedimento de atualização remota via TR-069 
-chmod 400 <<​caminho completo>>/​flashman/​certs/​cert.pem <<​caminho completo>>/​flashman/​certs/​key.pem +  ​* Liberação da porta para comunicação MQTTSA porta para MQTTS estará especificada ​no usuário de sua conta da Anlix
-</​code>​ +
-    - Substitua o valor <<​meuflashmandeexemplo.dominio.com>> ​pelo domínio completo ​de seu servidor cujo o certificado foi gerado +
-    - Substitua ​<<​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 ​(exemplolocaluser) +
-  ​- 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 ​(exemplolocaluser) +
-  ​Abra o arquivo environment.config.json ​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. +
-  ​- No diretório principal do Flashman, inicie o serviço através do comando <​code>​pm2 start environment.config.json</​code>​ +
-  - Verifique se o serviço está em execução através do comando: <​code>​pm2 status</​code>​ +
-  - 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 ====+==== Notas importantes ​====
  
-**Atenção! Entre em contato com a Anlix para obter os tokens de backup de dados na nuvem**+Não recomendamos o uso de sistemas 32 bits em geralserá possi
  
-script de backup de dados do Flashman na nuvem da Anlix está localizado em: +setup da máquina não pode ser um container, será necessário uma VM comum 
-<​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: +==== Procedimento ​de instalação ====
-<​code><<​caminho completo>>/​flashman/​scripts/​restore-flashman-onpremise-db.sh</​code>​+
  
-==== Opcional: Replicação ​de instâncias do Flashman ​para escalabilidade ​do serviço ====+Preencher o formulário (https://​documentacao.anlix.io/​doku.php?​id=instalacao_on_premise_flashman) com as informações ​de acesso e ao servidor, em seguida abrir um ticket de atendimento ((21) 99835-2603) junto a equipe de suporte Anlix. 
 +A equipe de suporte Anlix realizará toda a instalação e migração de dados que for necessária.  
 +Informação dos IPs **" 54.232.148.43 e 177.38.99.106"​** das máquinas de onde serão realizados os acessos ao servidor disponibilizado, ​para a liberação ​do provedor no seu controle de acesso.
  
-**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>​ 
  
 +Atenção: O usuário disponibilizado para a configuração dos serviços da Anlix precisa ter permissão de root.