Z-Push no Zimbra: o jeito mais fácil!

A implementação do protocolo Exchange/ActiveSync feito pelo pessoal do Zarafa é sensacional! o Z-Push é desenvolvido em php e funciona super bem mas integrar ele no Zimbra sempre foi trabalhoso, especialmente depois que eles não disponibilizaram mais o tgz e a instalação passou a ser feita via repositórios de forma obrigatória.

Se você dispuser de um segundo servidor então a instalação é simples, mas nem todos tem um segundo servidor disponível para isso, então resta integrar com o Zimbra no mesmo servidor e isso pode ser um desafio: adicionar repositórios, alterar configurações, instalar o php-fpm local e colocar tudo junto para rodar como usuário Zimbra.

Funciona bem, mas é um procedimento tão cheio de passos que eu nunca me animei para escrever um tutorial.

Felizmente, estes dias no nosso grupo Zimbrasil no Telegram alguém postou um link para um container do z-push em Docker. Isso facilita demais o procedimento todo e me animou a escrever este tutorial.

Considerações

a) Esse container Docker usa uma versão mais antiga do Z-Push;

b) Por ser um container, ela é monolítica, ou seja tem uma certa quantidade fixa de instâncias do Apache para aguentar as requisições. Pode ser que essa quantidade não seja suficiente para o seu cenário;

c) Pode ser que o Docker e o Z-Push no container consumam muitos dos recursos do seu servidor

Apesar dessas considerações, acho que vale a pena e deve atender a grande maioria dos casos.

Então vamos nessa!

Pré-requisito

O servidor TEM que aceitar instalar e rodar containers com Docker e talvez você esteja se perguntando se isso não é óbvio? Não é: muitos servidores Zimbra estão rodando em containers LXC, por exemplo. Rodar Docker dentro de LXC ou Openvz pode ser um desafio, então só prossiga depois de ter certeza de que o Docker roda.

Instalando o Docker

Para instalar o docker use o seu gerenciador de pacotes: apt ou yum

apt install docker.io

ou

yum install docker.io

Testando o Docker

docker run hello-world

Instalando o z-push em docker

Essa instalação exige a declaração de duas URL’s: a do Zimbra e a do Z-Push. Neste cenário será sempre a mesma URL que é nome principal do servidor.

docker run -d -p 9443:80 --restart=always -e ZIMBRA_URL=nome_do_servidor -e ZPUSH_URL=nome_do_servidor --name zpush darkjeff/zpush-zimbra

Alterando o Zimbra

O Z-Push vai rodar na porta 9443 e precisamos configurar o Zimbra para usar o z-push nessa porta. Isso é feito alterando o template do Nginx que o Zimbra usa como proxy.

É importante lembrar que essa alteração será sobrescrita na próxima atualização do Zimbra. Se esse for o caso, basta refazer os passos abaixo:

1 – Edite o template do Nginx do Zimbra

vim /opt/zimbra/conf/nginx/templates/nginx.conf.web.https.default.template

2 – Procure por “set $mailhostport” na seção do Microsoft-Server-ActiveSync, ao redor da linha 197 do arquivo e ajuste para ficar com a porta do z-push, assim:

set $mailhostport 9443;

3 – Localize, um pouco mais abaixo, por volta da linha 207 a opção “proxy_pass” e altere para ficar com o nome do seu servidor em http, assim:

proxy_pass          http://nome_do_servidor:9443;

4 – Finalmente reinicie o proxy

su - zimbra -c "zmproxyctl restart"

Testando a instalação

Acesse a URL do seu servidor com o path completo do protocolo, assim:

https://nome_do_servidor/Microsoft-Server-ActiveSync

E faça login com um usuário e senha válidos.

Saudações!