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

De MSTECH wiki
Ir para: navegação, pesquisa
(Criou página com '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 ex...')
 
 
(21 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 4: Linha 4:
  
  
== Requisitos ==
+
= Servidor =  
 +
Configuração de hardware e software para execução dos serviços.
  
Ao implantar o Teamwork é preciso seguir os passos:
+
== Requisitos mínimos ==
 +
=== Hardware ===
 +
* CPU 1.7 GHz, 6 core, 4GB Ram, 500GB HD
 +
* SO: Ubuntu 14.04 LTS ( CentOS 6.6+ )
  
* é preciso instalar o ''meteor na máquina do desenvolvedor''', [https://git-scm.com/downloads Git - downloads].
+
=== Software ===
 +
* Node 4.7.3
 +
* MongoDB
 +
* pm2
 +
 
 +
= Teamwork =
 +
== Gerando pacote ==
 +
* é preciso instalar o '''git na máquina do desenvolvedor''', [https://git-scm.com/downloads Git - downloads].
 
* é preciso instalar o '''meteor na máquina do desenvolvedor''', para que possamos fazer o build do projeto ( [https://gitlab.mstech.com.br/teamwork/custom/tree/develop Repośitório Teamwork]).
 
* é preciso instalar o '''meteor na máquina do desenvolvedor''', para que possamos fazer o build do projeto ( [https://gitlab.mstech.com.br/teamwork/custom/tree/develop Repośitório Teamwork]).
 
* Pegar o arquivos do repositório: [https://gitlab.mstech.com.br/teamwork/custom/tree/develop git@gitlab.mstech.com.br:teamwork/custom.git]
 
* Pegar o arquivos do repositório: [https://gitlab.mstech.com.br/teamwork/custom/tree/develop git@gitlab.mstech.com.br:teamwork/custom.git]
 
* executa em um cli( terminal ), '''na raiz do projeto''', o comando de build de pacote:
 
* executa em um cli( terminal ), '''na raiz do projeto''', o comando de build de pacote:
 
   '''''meteor build ./ --server-only'''''
 
   '''''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 ==
 +
* é preciso instalar o node e npm na máquina do desenvolvedor, [https://nodejs.org/en/download/releases/ NodeJS Download previous releases].
 +
* Pegar o arquivos do repositório: [https://gitlab.mstech.com.br/teamwork/hubot/tree/develop git@gitlab.mstech.com.br:teamwork/custom.git].
 +
* executar: '''npm i'''
 +
* gerar um zip '''com toda a pasta raiz''' e colocar no servidor.
 +
 +
= 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 [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.
 +
 +
É preciso pegar o script '''[https://gitlab.mstech.com.br/teamwork/custom/blob/develop/.scripts/mongo-custom-index.js mongo-custom-index.js]''' na pasta  [https://gitlab.mstech.com.br/teamwork/custom/tree/develop/.scripts '''.scripts''' no repositório]( pode estar oculta localmente ).
 +
 +
Para executar faça o seguinte:
 +
* ir na pasta com o script [https://gitlab.mstech.com.br/teamwork/custom/blob/develop/.scripts/mongo-custom-index.js 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": "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 ]]'''
 +
 +
 +
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 ==
+
= Referências =
  
 +
* [https://nodejs.org/en/download/releases/ NodeJS Download previous releases]
 
* [https://gitlab.mstech.com.br/teamwork/hubot/tree/develop Repositório Hubot]
 
* [https://gitlab.mstech.com.br/teamwork/hubot/tree/develop Repositório Hubot]
 
* [https://gitlab.mstech.com.br/teamwork/custom/tree/develop Repośitório Teamwork]
 
* [https://gitlab.mstech.com.br/teamwork/custom/tree/develop Repośitório Teamwork]
 
* [https://gitlab.mstech.com.br/teamwork/custom/blob/develop/MSTECH.md Documentação de instalação, configuração, pré-requisitos, build e deploy do Teamwork]
 
* [https://gitlab.mstech.com.br/teamwork/custom/blob/develop/MSTECH.md Documentação de instalação, configuração, pré-requisitos, build e deploy do Teamwork]
 +
* [https://rocket.chat/docs/ Rocket.Chat Docs]
 +
* 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://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