Implantação Teamwork e Hubot para SEDUC

De MSTECH wiki
Ir para: navegação, pesquisa

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