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 [19/07/2021 13:01] (atual)
superuser
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) ​===+
  
-----+Ubuntu 20.04 LTS e Debian 10.
  
-  - 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: 2 núcleos de processamento2GB RAM50GB HDD livres 
 +Recomendado:​ 4 núcleos de processamento. 8GB RAM. 50GB HDD livres
  
-    location / { +==== Requisito de rede ====
-        proxy_redirect http:// https://;+
  
-        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
  
-    }+==== Requisitos de firewall ====
  
-    client_max_body_size 32M; +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
-+
-</​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 +==== Notas importantes ​====
-</​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. +
-  - 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 ===+
- +
-**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>​+
  
 +Não recomendamos o uso de sistemas 32 bits em geral
  
 +==== 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.