Sistemas operacionais testados: Ubuntu 16.04 e 18.04

Requisitos de hardware: Processador quad core (i5 ou superior). 8GB RAM. 50GB HDD disponíveis.

  1. Atualizar repositórios através do comando
    sudo apt-get update
  2. IMPORTANTE! Instalar e configurar o NTP
    1. Exemplo para Ubuntu 16.04:
      sudo timedatectl set-timezone America/Sao_Paulo
      sudo timedatectl set-ntp on
    2. Aguardar um minuto e verificar status de sincronização através do comando
      timedatectl
  3. Instalar o Nginx (versão 1.10.3 ou superior)
    1. Insira o seguinte comando:
      sudo apt-get install nginx
  4. Instalar o MongoDB (versão 3.2 ou superior)
    1. Para instalar utilizando o Ubuntu
      1. Insira os seguintes comandos para Ubuntu 18.04:
        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
      2. Insira os seguintes comandos para Ubuntu 16.04:
        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
    2. Inicie o serviço do MongoDB através dos comandos:
      sudo systemctl enable mongod
      sudo systemctl start mongod
    3. Para instalar em sistemas operacionais diferentes do Ubuntu, veja a documentação em https://docs.mongodb.com/manual/installation/
    4. Atenção! Não alterar a porta padrão 27017
  5. Instalar NodeJS (versão 6.4.0 ou superior)
    1. Para instalar utilizando o Ubuntu
      1. Insira os seguintes comandos:
        curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
        sudo apt-get install -y nodejs
      2. Para instalar em sistemas operacionais diferentes do Ubuntu, veja a documentação em https://nodejs.org/en/download/package-manager/
  6. Instalar pacotes essenciais do Ubuntu:
    sudo apt-get install build-essential
  7. Instalar o instalador de pacotes do NodeJS:
    sudo apt-get install npm
  8. Instalar o PM2 através do comando:
    npm install pm2 -g
  9. Instalar o extrator de .ZIP através do comando:
    sudo apt-get install unzip
  10. Extraia o arquivo .ZIP do pacote contendo o Flashman no diretório de sua preferência. Como exemplo eis o comando:
    mkdir ./flashman
    unzip flashman.zip -d ./flashman/
  11. No diretório extraído do Flashman, execute o seguinte comando:
    npm install
  12. Configure o Nginx para receber e autorizar a comunicação HTTPS com o Flashman através do seguinte trecho de código de exemplo:
    server {
        listen 443 ssl;
    
        server_name meuflashmandeexemplo.dominio.com;
    
        location / {
            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://localhost:8000;
            proxy_http_version 1.1;
    
            proxy_cache_bypass $http_upgrade;
    
        }
    
        client_max_body_size 32M;
    }
    1. O trecho de código acima pode ser configurado a partir do comando
      nano /etc/nginx/sites-available/default
    2. Substitua a variável “server_name” pelo domínio completo de seu servidor
    3. Recarregue o serviço Nginx através do comando:
      sudo systemctl reload nginx
  13. Use o gerador de certificados gratuitos Certbot para gerar o certificado HTTPS para o Flashman. Siga os passos:
    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
    1. Siga os passos informados pelo comando certbot –nginx
    2. Mais informações sobre o certbot em: https://certbot.eff.org/
  14. Após gerar o certificado no passo anterior, insira uma cópia diretamente no diretório raiz do Flashman através dos comandos:
    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
    1. Substitua o valor «meuflashmandeexemplo.dominio.com» pelo domínio completo de seu servidor cujo o certificado foi gerado
    2. Substitua o «caminho completo» pelo caminho até o diretório raiz do Flashman.
    3. Substitua o «usuário» pelo usuário do sistema que irá executar o servidor do Flashman (exemplo: localuser)
  15. Insira a seguinte entrada no crontab do usuário root:
    0 0 01 * * certbot renew --nginx --cert-name meuflashmandeexemplo.dominio.com --deploy-hook "<<caminho completo>>/flashman/scripts/cert-deploy-hook.sh <<caminho completo>>/flashman/certs meuflashmandeexemplo.dominio.com <<usuário>>"
    1. A edição do crontab pode ser feita através do comando:
      sudo crontab -e
    2. Substitua o valor “meuflashmandeexemplo.dominio.com” pelo domínio completo de seu servidor cujo o certificado foi gerado
    3. Substitua o «caminho completo» pelo caminho até o diretório raiz do Flashman.
    4. Substitua o «usuário» pelo usuário do sistema que irá executar o servidor do Flashman (exemplo: localuser)
  16. 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:
    {
      "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"
        }]
    }
    1. Substitua o «caminho completo» pelo caminho até o diretório raiz do Flashman.
  17. No diretório principal do Flashman, inicie o serviço através do comando
    pm2 start environment.config.json
  18. Verifique se o serviço está em execução através do comando:
    pm2 status
  19. Deixe o serviço do Flashman auto renicializável através dos comandos executados no diretório principal do Flashman:
    pm2 startup
    pm2 save