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
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