Integração de suíte office a Nextcloud

Nextcloud tem um ecossistema com muitas possibilidades de aplicativos e funcionalidades adicionais que podem ser integradas. Uma das integrações mais comuns de serem feitas é com uma suíte office, permitindo edição e colaboração em documentos, planilhas e apresentações, como também é feito através do Google Workspace.

Essa integração é feita conectando o Nextcloud a uma plataforma de colaboração e edição de documentos acessível via web. Existem duas principais plataformas como opções: ONLYOFFICE Docs Community e Collabora Online Developer Edition (CODE).

Ambos têm uma UI familiar para usuários do Microsoft Office, ambos são compatíveis com o padrão Open Document Format (ODF), que engloba os formatos de arquivos .ods e .odt, e também com o Office Open XML (OOXML) da Microsoft, que engloba os formatos .xlsx e .docx.

Enquanto o ONLYOFFICE é um projeto independente, o Collabora é um projeto baseado no LibreOffice, mas construído com uma UI diferente. Ambos também são distribuídos em formato Docker, o que permite uma facilidade de instalação e instruções independem do sistema operacional anfitrião.

Eu já usei tanto o LibreOffice quanto o ONLYOFFICE Desktop Editors, versões offline das suítes e, enquanto um grande ponto forte do ONLYOFFICE é a compatibilidade com o padrão OOXML criado pela Microsoft, acabei aderindo ao LibreOffice por questão de desempenho.

Como já me deparei com pequenas inconsistências de formatação ao criar um documento em uma suíte e abrir em outra, seguir com o Collabora foi mais adequado para manter uma boa compatibilidade com meus documentos existentes.

A instalação foi feita com Docker através da minha instalação do Portainer. Ao criar um contêiner, defina o nome, a imagem a ser usada para a implantação e o mapeamento de portas.

Nas configurações avançadas, defina as variáveis de ambiente:

  • domain – endereço do Nextcloud que irá utilizar a plataforma CODE, expresso como regex.
  • server_name – nome do servidor que hospeda o CODE e a porta exposta. A porta pode ser diferente da 9980 mapeada pelo docker, dependendo da regra de encaminhamento de porta no firewall OU do proxy reverso utilizado.
  • username e password – usuário e senha para o painel de administrador.

Observações:

O servidor precisa ter o mesmo domínio que o Nextcloud – nesse caso exemplo.com, caso contrário o Collabora retorna erros 403.

Além disso, o Nextcloud precisa estar exposto na porta padrão HTTPS. Quando exposto em portas alternativas, essa porta é passada para o servidor CODE como parte da URL na requisição HTTP e o Collabora não identifica, recusando a conexão com código 403.

Defina a política de reinicialização.

E então, basta implantar o contêiner. Alternativamente, utilizando o Docker por linha de comando em vez do Portainer:

docker run -t -d \
  -p 9980:9980 \
  -e "domain=nextcloud\\.exemplo\\.com" \
  -e "server_name=code.exemplo.com:2345" \
  --restart on-failure \
  --name CODE \
  collabora/code:latest

A configuração do proxy reverso, além de necessária para minha infraestrutura, é recomendada e a configuração para o nginx é fornecida no próprio site do projeto. Adaptando para esse caso:

server {

  listen 2345 ssl;
  listen [::]:2345 ssl;
  ssl_certificate /etc/letsencrypt/live/code.exemplo.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/code.exemplo.com/privkey.pem;
  server_name code.exemplo.com;
  
  location ^~ /browser {
    proxy_pass https://10.8.0.6:9980;
    proxy_set_header Host $host;
  }
 
  location ^~ /hosting/discovery {
    proxy_pass https://10.8.0.6:9980;
    proxy_set_header Host $host;
  }
  
  location ^~ /hosting/capabilities {
    proxy_pass https://10.8.0.6:9980;
    proxy_set_header Host $host;
  }
  
  location ~ ^/cool/(.*)/ws$ {
    proxy_pass https://10.8.0.6:9980;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
    proxy_read_timeout 36000s;
  }
  
  location ~ ^/cool {
    proxy_pass https://10.8.0.6:9980;
    proxy_set_header Host $host;
  }
  
  location ^~ /cool/adminws {
    proxy_pass https://10.8.0.6:9980;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
    proxy_read_timeout 36000s;
  }
}

No Nextcloud, basta habilitar o aplicativo Nextcloud Office e, nas configurações de administrador, adicionar a URL e porta do servidor CODE.

Também é recomendado restringir a origem das requisições WOPI aceitas pelo Nextcloud ao IP do servidor CODE.

Finalmente, o Nextcloud já deve estar pronto para abrir e editar documentos via web utilizando o Collabora.

Você pode acompanhar informações de uso do servidor no painel de administrador com seu usuário e senha definidos anteriormente em:

https://code.exemplo.com:2345/browser/dist/admin/admin.html