Instalando o Rocketchat em Debian 9 com Dokcer

Instalando o Rocketchat em Debian 9 com Dokcer

image

Rocket.Chat

A Rocket.Chat é uma plataforma para comunicação colaborativa no ambiente de trabalho, possui cliente para desktops e smartphones (Android, iOS). Mesmo fundada em Porto Alegre o seu maior mercado são os EUA e Alemanha, isso não ocorreu por acaso, e sim fruto de uma estratégia adotada por seus fundadores, no Brasil muitas empresas já aderiram a ela como Caixa e BNDES, suas funcionalidades o torna um concorrente de peso frente ao Slack. Nesse laboratório faremos sua instalação no Debian 9 com Docker, como a proposta de contêineres é ser portável será possível replicar todo esse trabalho em outras distribuições como Centos, RancherOS, Ubuntu e qualquer outra distribuição que execute o docker.

Instalando o docker

Como bem sabem o Debian não adiciona o usuário criado durante sua instalação no sudoers, portanto faremos todo o processo de instalação com o usuário root.

Logando como root

su

Atualizando o sistema

apt-get update

Instalando wget e o repostório do docker

apt-get install -y apt-transport-https ca-certificates wget software-properties-common

Baixando e adicionando a chave pública do docker

wget https://download.docker.com/linux/debian/gpg 
apt-key add gpg

Inserido o repositório do docker no source list

echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee -a /etc/apt/sources.list.d/docker.list

Atualizando o sistema

 apt-get update

Instalando o docker

Vamo instalar a versão comunitária do docker e o docker-compose.

apt-get -y install docker-ce docker-compose

Iniciando o docker

systemctl start docker

Verificando o status do docker

systemctl status docker

Habilitando a inicialização do docker junto ao sistema operacional

systemctl enable docker

Criando um grupo docker

groupadd docker

Adicionando seu usuário do grupo docker

Use essa opção se desejar conceder permissões administrativas ao seu usuário no docker.

usermod -aG docker marcos

Baixando o docker-compose.yml

wget https://raw.githubusercontent.com/ferreirarocha/rocketchat/master/docker-compose.yml

Você encontra o arquivo original no repositório oficial do rocket chat nesse link

Modifique esse arquivo o quanto achar necessário, porém para este laboratório será preciso alterar apenas o seu FQDN, na linha 12 onde encontra-se chat.alfabech.eti.br.

O Rockerchat opera por padrão na porta 3000, no entanto você pode definir outra caso necessário, nesse momento optamos pela porta 80, devido as facilidades que ela oferece, caso queira alterar basta modificar as portas presentes na linha 12 e 21.

Texto extraído do arquivo do docker-compose.yml

version: '2'

services:
rocketchat:
image: rocketchat/rocket.chat:latest
restart: unless-stopped
container_name: rocketchat
volumes:
- uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=http://chat.alfabech.info:80
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- MAIL_URL=smtp://smtp.email
# - HTTP_PROXY=http://proxy.domain.com
# - HTTPS_PROXY=http://proxy.domain.com
depends_on:
- mongo
ports:
- 80:3000
labels:

Costumo utilizar o editor nano para essas tarefas, sua opção -l exibe a numeração de linhas do arquivo.

nano -l docker-compose.yml

Iniciando os containers

Siga essa ordem para inicializar os containers, em vários testes a não execução do container mongo-init-replica, causa uma instabilidade no container rocketchat.

docker-compose  up -d mongo 
docker-compose  up -d mongo-init-replica
docker-compose  up -d rocketchat

Recriando containers

Caso tenha necessidade de recriar os containers, fique atendo ao fato de que o rocketchat tem como depedência o container do mongo, sendo assim ao executar o mongo aguarde uns 15 segundos e execute o mongo-init-replica , feito isso já podemos executar o container do rocketchat.

Removendo containers e volumes

docker stop $(docker ps -af name=rocketchat)
docker rm   $(docker ps -af name=rocketchat)

Removendo volumes

docker volume   rm $(docker volume ls -qf name=rocketchat)

Recriando os containers

Como mencionado anteriormente, aguarde enquanto o mongo fique disponível, inserimos uma pausa de 15 segundos entre as aplicações para suprir esta necessidade.

docker-compose  up -d mongo ; sleep 15 ;\
docker-compose up -d mongo-init-replica ; sleep 15 ;\
docker-compose up -d rocketchat

Script para recriar os containers ( Opcional)

Fizemos um script para facilitar o processo

Baixando o script

wget https://raw.githubusercontent.com/ferreirarocha/rocketchat/master/rebuild_rocketchat.sh

Executando o script

bash  rebuild_rocketchat.sh 

Filtros

Adicionamos o parâmetro containers_name para identificar o conjunto de contêineres relacionados ao rocketchat, dessa forma ao realizar um filtro sobre eles elementos, basta executar a seguinte consulta abaixo, o mesmo procedimento é válido para a consulta de volumes.

Listando os containers

docker ps -a --filter "name=rocketchat"

Listando os volumes dos containers

docker volume  list --filter name=rocketchat

Esse docker compose já vem configurado para definir a inicialização dos containers após o boot do sistema, podemos verificar essa informação nas linhas 6 e 28 onde é definido o parâmetro restart: unless-stopped.
A persintência do banco de dados, uploads e o próprio rocketchat , são realizado nos volumes uploads e banco.

Configurando o Rocket Chat

Nesse momento é prováve que os containers já estejam em execução e as portas disponíveis, poderemos então acessar a interface administrativa via navegador, faça isso atraves do endereço do sistema operacional, ou via DNS caso tenha criado em seu ambiente.

Exemplo

chat.alfabech.eti.br

Note que não necessitamos inserir a porta 3000, pois fizemos o redirecionamento no arquivos docker-compose.yml

A etapa de configuração do rocket chat é super intuitiva, motivo pelo qual não o abordaremos nesse tutorial.

Dicas importantes.

Em algum momento você pode sentir a necessidade de parar, lista ou remover containers e volumes, sendo assim disponibilizamos algumas desses comandos abaixo.

Parando os containers relacionados ao rocketchat

docker stop $(docker ps -a --filter "name=rocketchat")

Parando todos os containers

docker stop $(docker ps -a -q)

Removendo todos os containers

docker rm $(docker ps -a -q)

Listando volume

docker volume  list --filter name=rocketchat

Removendo volume

docker  volume rm nome-volume

Clique aqui para baixar o PDF desse post.

Fico por aqui e até a próxima 😃

Fontes

https://blog.ssdnodes.com/blog/tutorial-installing-slack-alternative-rocket-chat-with-docker/

https://docs.docker.com/engine/reference/commandline/ps/

https://docs.docker.com/engine/reference/commandline/container_kill/#description