Mudanças entre as edições de "Implantação Teamwork e Hubot para SEDUC"

De MSTECH wiki
Ir para: navegação, pesquisa
 
(4 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 76: Linha 76:
 
== MongoDB ==
 
== MongoDB ==
 
É preciso instalar o '''mongodb''' no sistema seguinto as [https://docs.mongodb.com/manual/installation/ instruções para cada sistema].Se seguido corretamento link anterior, o mongo será configurado para iniciar sozinho.
 
É preciso instalar o '''mongodb''' no sistema seguinto as [https://docs.mongodb.com/manual/installation/ instruções para cada sistema].Se seguido corretamento link anterior, o mongo será configurado para iniciar sozinho.
 +
 +
=== Configuração de Daemon ===
 +
É preciso configurar o serviços para que aceite a configuração de '''replSet''' para [[permitir múltiplas instâncias do serviços]], com o proposito de log.
 +
 +
Assim é preciso adicionar no arquivo '''/etc/mongod.config''' as configurações abaixo:
 +
 +
Habilita replicas.
 +
replication:
 +
  replSetName: rs0
 +
  oplogSizeMB: 128
 +
 +
Habilita máximo de ram que o mongo pode usar para cache.
 +
storage:
 +
  wiredTiger:
 +
      engineConfig:
 +
        cacheSizeGB: 2
 +
 +
Após isso será é preciso executar o '''mongod'''.
 +
 +
Caso tenha sido executa com sucesso, é preciso habilitar internamente as opções de replica com os comandos:
 +
mongo rocketchat --eval "rs.initiate()"
 +
mongo rocketchat --eval "rs.add('localhost:27017')"
 +
 +
ou:
 +
mongo rocketchat --eval "rs.initiate({ _id: 'rs0', members: [ { _id: 0, host: 'localhost:27017' } ]})"
 +
 +
e habilitar modo slave
 +
mongo rocketchat --eval "rs.slaveOk()"
 +
 +
----
  
 
Agora vamos configurar o banco para gerar os indexes para agilizar a busca.
 
Agora vamos configurar o banco para gerar os indexes para agilizar a busca.
Linha 85: Linha 115:
 
* executar verificar se os scripts estão olhando para o banco nomeado '''rocketchat''':
 
* executar verificar se os scripts estão olhando para o banco nomeado '''rocketchat''':
 
  '''mongo localhost:27017/rocketchat mongo-custom-index.js'''
 
  '''mongo localhost:27017/rocketchat mongo-custom-index.js'''
 
  
 
== Teamwork ==
 
== Teamwork ==
Linha 117: Linha 146:
 
   {
 
   {
 
     "name": "teamwork",
 
     "name": "teamwork",
     "max_memory_restart": "8192M",
+
     "max_memory_restart": "8G",
 
     "log_date_format": "YYYY-MM-DD HH:mm:ss SSS",
 
     "log_date_format": "YYYY-MM-DD HH:mm:ss SSS",
 
     "script": "/opt/teamwork/main.js",
 
     "script": "/opt/teamwork/main.js",
Linha 132: Linha 161:
 
   ]
 
   ]
 
  }
 
  }
 +
 +
Como é preciso fazer uso de vários núcleos de processamento, e devido a natureza dos serviços em '''nodejs''' se single thread,
 +
 +
é preciso que seja feito um '''json''' contendo '''N-1''' instâncias do serviço, onde '''N''' é o número de cpu.
 +
 +
Segue o modelo:
 +
{
 +
  "apps":[
 +
  {
 +
    "name": "teamwork",
 +
    "max_memory_restart": "2G",
 +
    "log_date_format": "YYYY-MM-DD HH:mm:ss SSS",
 +
    "script": "/opt/teamwork/main.js",
 +
    "out_file": "/var/log/teamwork/app.log",
 +
    "error_file": "/var/log/teamwork/err.log",
 +
    "port": "3000",
 +
    "env": {
 +
    "MONGO_URL": "mongodb://localhost:27017/rocketchat",
 +
    "MONGO_OPLOG_URL": "mongodb://localhost:27017/local",
 +
    "ROOT_URL": "http://comunicador.seduc.rs.gov.br",
 +
    "PORT": "3000"
 +
    }
 +
  },
 +
  {
 +
    "name": "teamwork-'''N'''",
 +
    "max_memory_restart": "2G",
 +
    "log_date_format": "YYYY-MM-DD HH:mm:ss SSS",
 +
    "script": "/opt/teamwork/main.js",
 +
    "out_file": "/var/log/teamwork/app.log",
 +
    "error_file": "/var/log/teamwork/err.log",
 +
    "port": "300'''N'''",
 +
    "env": {
 +
    "MONGO_URL": "mongodb://localhost:27017/rocketchat",
 +
    "MONGO_OPLOG_URL": "mongodb://localhost:27017/local",
 +
    "ROOT_URL": "http://comunicador.seduc.rs.gov.br",
 +
    "PORT": "3000"
 +
    }
 +
  }
 +
  ]
 +
}
 +
 +
 +
'''Atenção aos itens [['name' e 'port']], que precisam ser[[ únicos ]]'''
  
  
Linha 183: Linha 255:
 
  '''pm2 m ou pm2 status'''
 
  '''pm2 m ou pm2 status'''
  
 +
----
 +
 +
Caso já exista algum conjunto de serviços configurados é preciso remover antes:
 +
'''pm2 unstartup'''
 +
E depois proceder com os processos anteriores.
  
 
= Configurações do sistema =
 
= Configurações do sistema =
Linha 188: Linha 265:
  
 
O item de '''Mescar usuários já existentes''' para permitir o uso de '''username e email''' para login.
 
O item de '''Mescar usuários já existentes''' para permitir o uso de '''username e email''' para login.
 +
 +
 +
= Múltiplas instâncias =
 +
 +
Após ter configurado como descrito acima ambo os serviços do '''mongodb e teamwork''', usando o '''pm2'''.
 +
 +
É sugerido o seguinte passos para aumentar as instâncias:
 +
 +
 +
* Não deve estar rodando o '''mongod'''.
 +
* pm2 kill, para matar tudo que está rodando.
 +
* pm2 start /opt/teamwork/<json>
 +
* service mongod start
 +
* service httpd restart
  
  
Linha 210: Linha 301:
 
* https://rocket.chat/docs/installation/minimum-requirements Minimum Requirements for Server Deployment]
 
* https://rocket.chat/docs/installation/minimum-requirements Minimum Requirements for Server Deployment]
 
* [https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#execute-a-javascript-file Executando script no mongodb]
 
* [https://docs.mongodb.com/manual/tutorial/write-scripts-for-the-mongo-shell/#execute-a-javascript-file Executando script no mongodb]
 +
* [https://rocket.chat/docs/installation/manual-installation/multiple-instances-to-improve-performance/ Rodando múltiplas instâncias do rocket.chat]
 +
* [https://docs.mongodb.com/manual/reference/configuration-options/ Configurando mongodb no linux]

Edição atual tal como às 12h22min de 21 de junho de 2017

Nessa página será explicado o processo de implantação do serviço de customização do teamwork e hubot para a SEDUC.

Nas referências estão todos os dados que serão explicados nessa tópico.


Servidor

Configuração de hardware e software para execução dos serviços.

Requisitos mínimos

Hardware

  • CPU 1.7 GHz, 6 core, 4GB Ram, 500GB HD
  • SO: Ubuntu 14.04 LTS ( CentOS 6.6+ )

Software

  • Node 4.7.3
  • MongoDB
  • pm2

Teamwork

Gerando pacote

 meteor build ./ --server-only
  • será gerado um pacote custom.tar.gz que será colocado no servidor.

Configurando layout

  • É preciso fazer manualmente a alterações em adminstrativo/layout

Segue o parametros e cores:

COLORS

   content Background color : #FFFFFF 
   Primary Background Color : #0F7043 
   Primary Font Color : #444444

   Primary Action Color : #2F9E68 
   Secondary Background Color : #F4F4F4 
   Secondary Font Color : #7F7F7F 
   Secondary Action Color : #FFFFFF 
   Component Color : #EAEAEA 
   Success Color : #35AC19 
   Pending Color : #FCB316 
   Error Color : #D30230 
   Selection Color : #FF0000 
   theme-color-attention-color : #9C27B0 
   Secondary Action Color : #FFFFFF 
   Secondary Action Color : #FFFFFF 

COLORS(MINOR)

   Custom Scrollbar Color : #@transparent-darker ou #7F7F7F


Hubot

Gerando pacote

Configuração do serviços

A configuração será feita através do pm2, serviço de monitoramento e gerenciamento de serviços e processos, além de configurar o auto-start dos serviços de forma automática.

Aqui é preciso que esteja instalado o seguinte itens:node, npm, mongodb, pm2.

É preciso que os passos sejam executado seguindo os tópicos seguintes.

É fortemente sugerido que os serviços e suas pastas sejam criados na pasta opt ( para evitar problemas com atualização de sistema ).


Os passos abaixo precisam ser executados como root!


MongoDB

É preciso instalar o mongodb no sistema seguinto as instruções para cada sistema.Se seguido corretamento link anterior, o mongo será configurado para iniciar sozinho.

Configuração de Daemon

É preciso configurar o serviços para que aceite a configuração de replSet para permitir múltiplas instâncias do serviços, com o proposito de log.

Assim é preciso adicionar no arquivo /etc/mongod.config as configurações abaixo:

Habilita replicas.

replication:
  replSetName: rs0
  oplogSizeMB: 128

Habilita máximo de ram que o mongo pode usar para cache.

storage:
  wiredTiger:
     engineConfig:
        cacheSizeGB: 2

Após isso será é preciso executar o mongod.

Caso tenha sido executa com sucesso, é preciso habilitar internamente as opções de replica com os comandos:

mongo rocketchat --eval "rs.initiate()"
mongo rocketchat --eval "rs.add('localhost:27017')"

ou:

mongo rocketchat --eval "rs.initiate({ _id: 'rs0', members: [ { _id: 0, host: 'localhost:27017' } ]})"

e habilitar modo slave

mongo rocketchat --eval "rs.slaveOk()"

Agora vamos configurar o banco para gerar os indexes para agilizar a busca.

É preciso pegar o script mongo-custom-index.js na pasta .scripts no repositório( pode estar oculta localmente ).

Para executar faça o seguinte:

  • ir na pasta com o script mongo-custom-index.js.
  • executar verificar se os scripts estão olhando para o banco nomeado rocketchat:
mongo localhost:27017/rocketchat mongo-custom-index.js

Teamwork

Extrair pacote

Extrair pacote custom.tar.gz dentro da pasta /opt

Instalar dependências

Vá para a pasta em que o serviço foi colocado, depois acesso a pasta programs/server/, é preciso fazer as instalação das dependências usando:

npm i

Validar pacote

Agora é preciso executar o serviço pm2 start main.js --name teamwork, para validar se o serviço esta rodando execute o comando:

pm2 m

Agora será possível ver os logs do serviço e se está executando corretamente.Após iniciar o serviço é preciso acessar e cadastra um admin.


O primeiro login do teamwork sempre será o admin, e daí em diante será possível fazer o resto das configurações.


Agora é preciso parar o serviço com :

pm2 stop teamwork

Configurar serviço automatico

vamos criar um arquivo teamwork.json na pasta do projeto para configurar o serviço e executa-lo no pm2.


Segue o modelo:

{
 "apps":[
  {
   "name": "teamwork",
   "max_memory_restart": "8G",
   "log_date_format": "YYYY-MM-DD HH:mm:ss SSS",
   "script": "/opt/teamwork/main.js",
   "out_file": "/var/log/teamwork/app.log",
   "error_file": "/var/log/teamwork/err.log",
   "port": "3000",
   "env": {
    "MONGO_URL": "mongodb://localhost:27017/rocketchat",
    "MONGO_OPLOG_URL": "mongodb://localhost:27017/local",
    "ROOT_URL": "http://comunicador.seduc.rs.gov.br", 
    "PORT": "3000"
   }
  }
 ]
}

Como é preciso fazer uso de vários núcleos de processamento, e devido a natureza dos serviços em nodejs se single thread,

é preciso que seja feito um json contendo N-1 instâncias do serviço, onde N é o número de cpu.

Segue o modelo:

{
 "apps":[
  {
   "name": "teamwork",
   "max_memory_restart": "2G",
   "log_date_format": "YYYY-MM-DD HH:mm:ss SSS",
   "script": "/opt/teamwork/main.js",
   "out_file": "/var/log/teamwork/app.log",
   "error_file": "/var/log/teamwork/err.log",
   "port": "3000",
   "env": {
    "MONGO_URL": "mongodb://localhost:27017/rocketchat",
    "MONGO_OPLOG_URL": "mongodb://localhost:27017/local",
    "ROOT_URL": "http://comunicador.seduc.rs.gov.br", 
    "PORT": "3000"
   }
  },
  {
   "name": "teamwork-N",
   "max_memory_restart": "2G",
   "log_date_format": "YYYY-MM-DD HH:mm:ss SSS",
   "script": "/opt/teamwork/main.js",
   "out_file": "/var/log/teamwork/app.log",
   "error_file": "/var/log/teamwork/err.log",
   "port": "300N",
   "env": {
    "MONGO_URL": "mongodb://localhost:27017/rocketchat",
    "MONGO_OPLOG_URL": "mongodb://localhost:27017/local",
    "ROOT_URL": "http://comunicador.seduc.rs.gov.br", 
    "PORT": "3000"
   }
  }
 ]
}


Atenção aos itens 'name' e 'port', que precisam ser únicos


Agora execute comando:

pm2 start teamwork.json --watch

Hubot

Vá para a pasta em que o serviço foi colocado.

É preciso instalar as dependências globais do hubot, com o seguinte comando:

npm i -g coffee-script


Será preciso adicionar o caminho correto dentro do arquivo bin/hubot na linha com exec node_modules/.. para exec /opt/<pasta>/node_modules/..

vamos criar um arquivo hubot.json na pasta do projeto para configurar o serviço e executa-lo no pm2.


Segue o modelo:

{
 "apps":[ 
  {
   "name": "bot",
   "max_memory_restart": "2048M",
   "log_date_format": "YYYY-MM-DD HH:mm:ss SSS",
   "script": "/opt/rockbot/bin/hubot",
   "out_file": "/var/log/bot/app.log",
   "error_file": "/var/log/bot/err.log",
   "port": "1337"
  }
 ]
}

Agora execute comando:

pm2 start hubot.json --watch


pm2

Essa parte deverá ser executada somente quando todos os serviços estiverem rodando corretamente e em paralelo !

Agora que os arquivos .json foram criados e executados podemos memorizar esses processos e suas ordem com o comando:

pm2 save


Isso irá salver a lista de processos, e agora vamos configurar o sistema para executar isso todas vez que a máquina for iniciada.

pm2 startup


Após isso reinicie a máquina e execute o comando abaixo para validar se os serviços estão rodando corretamente:

pm2 m ou pm2 status

Caso já exista algum conjunto de serviços configurados é preciso remover antes:

pm2 unstartup

E depois proceder com os processos anteriores.

Configurações do sistema

Caso haja algum problema em que o o primeiro login funciona e o restante não, será preciso habilitar na opções administrativas na parte do LDAP.

O item de Mescar usuários já existentes para permitir o uso de username e email para login.


Múltiplas instâncias

Após ter configurado como descrito acima ambo os serviços do mongodb e teamwork, usando o pm2.

É sugerido o seguinte passos para aumentar as instâncias:


  • Não deve estar rodando o mongod.
  • pm2 kill, para matar tudo que está rodando.
  • pm2 start /opt/teamwork/<json>
  • service mongod start
  • service httpd restart


Problemas possíveis

Serviços fora do ar

  • É possível que o servidor apache não tenha renovado os arquivos alterados.

Erro ao iniciar serviço

  • É possível que a rota das pastas estejam erradas.
  • É preciso executar o main.js, no pm2 ( atualmente é usando um arquivo de configuração pm2.json )
  • É possível que falte dependências do hubot .


Referências