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
Última revisão Ambos lados da revisão seguinte
instalacao_on_premise_flashman [14/08/2020 15:42]
superuser
instalacao_on_premise_flashman [19/07/2021 13:01]
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>​ +
-  - **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;+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>​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 +==== 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.