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 Última revisão Ambos lados da revisão seguinte | ||
instalacao_on_premise_flashman [14/08/2020 15:42] superuser |
instalacao_on_premise_flashman [19/12/2023 22:22] superuser [Sistemas operacionais testados] |
||
---|---|---|---|
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> | + | |
- | - **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: 4 núcleos de processamento. 8GB RAM. 50GB HDD livres |
- | location / { | + | Recomendado: |
- | proxy_redirect http:// https://; | + | Até um total de 12.000 CPES, 4 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.2: Para 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>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 | + | * Liberação de ICMP reply (ping) |
- | </code> | + | * Liberação da porta 9001 para o 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 o 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 o 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 e 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 MQTTS. A 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 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 ==== | + | ==== 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 |
- | O script de backup de dados do Flashman na nuvem da Anlix está localizado em: | + | * O 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. | ||