Olá, Habr! Estou apresentando a tradução do artigo .
É difícil subestimar a utilidade dos pacotes de aplicativos de escritório online, como o Google Docs, e dos serviços de armazenamento em nuvem na vida de pessoas técnicas. As tecnologias se tornaram tão difundidas que até mesmo a Microsoft, que há muito domina o mercado de aplicativos de escritório, nos últimos tempos se concentrou no desenvolvimento da aplicação web Office 365 e na conversão de usuários para um modelo de assinatura para o uso de seus serviços. Aqueles que estão interessados no processo de instalação e configuração de seu próprio armazenamento são convidados a continuar lendo.
Há algum tempo, examinamos soluções para armazenamento em nuvem e pacotes de aplicativos de escritório de código aberto, que poderiam ser facilmente implementados para uso em microempresas. A principal motivação para armazenar toda a documentação online é reduzir ao mínimo o volume de papelada, além de implementar boas práticas de negócios, mesmo com um baixo volume de operações. O lado negativo é que alugar um servidor em nuvem para fornecer esse serviço é menos seguro do que armazenar diretamente nas instalações da empresa, pois você não tem meios de auditar o acesso físico ao seu servidor ou ao tráfego. Assim, também é necessário ter criptografia de ponta a ponta e software de código aberto.
Considerando todas as informações disponíveis sobre soluções de código aberto, encontramos dois projetos ativos (com commits em repositórios git nos últimos 12 meses) desenvolvidos para armazenamento em nuvem: NextCloud e OwnCloud, além do único pacote de aplicativos de escritório ativo, o ONLYOFFICE. Ambas as ferramentas de armazenamento em nuvem têm funcionalidades aproximadamente iguais, e a decisão de escolher o NextCloud foi baseada na existência de evidências de que ele pode ser integrado ao ONLYOFFICE para uma interação confortável do usuário com o software. No entanto, quando começamos a implementar os serviços, a falta de informações sobre a integração dos serviços mencionados tornou-se evidente. Encontramos 3 vídeos tutoriais sobre como realizar a integração:
Nenhum dos três vídeos respondeu à pergunta sobre a instalação do serviço de documentos ONLYOFFICE no mesmo servidor físico que o NextCloud com nginx compartilhado. Em vez disso, eles usaram tecnologias de separação, como o uso de portas distintas para o serviço de documentos API. Outra opção proposta foi implementar um servidor separado para o serviço de documentos com a configuração manual da instância nginx embutida no serviço de documentos para instalação da chave de acesso (a chave de acesso conhecida previamente que confirma o direito de acesso ao armazenamento em nuvem) e certificados TLS. As abordagens descritas foram consideradas inseguras e não suficientemente eficientes, por isso fizemos a integração do NextCloud, ONLYOFFICE e do nginx compartilhado, que separa as requisições por nomes de domínio, usando docker-compose. Aqui estão informações passo a passo sobre como fazer isso.
Passo 1: contêiner nginx
Esta é uma instalação muito simples, mas este passo requer o maior trabalho para configurar o servidor proxy reverso. Primeiro, criamos a configuração docker-compose para a imagem nginx:stable.
version: '2'
services:
nginx:
image : nginx:stable
restart: always
volumes:
- ./nginx/nginx-vhost.conf:/etc/nginx/conf.d/default.conf:ro
- ./nginx/certificates:/mycerts
ports:
- 443:443
- 80:80
Isso cria um contêiner com as portas 80 e 443 abertas para acesso público, mapeia a configuração para nginx/nginx-vhost.conf e define o armazenamento para os certificados gerados, seja como certificados autoassinados ou utilizando o Certbot da Let’s Encrypt em /nginx/certificates. Neste local devem estar as pastas para office.seudominio.com e cloud.seudominio.com com os arquivos fullchain1.pem e privkey1.pem em cada um para a cadeia de certificados e a chave privada do servidor, respectivamente. Você pode ler mais sobre como gerar um certificado autoassinado aqui. (renomear .key e .crt para .pem funciona sem conversão da estrutura de arquivos para nginx).
Depois disso, definimos o arquivo vhost. Primeiro, definimos o comportamento da porta 80 como um simples redirecionamento para https, pois não queremos permitir nenhum tráfego http.
server {
listen 80;
location / {
return 301
https://$host$request_uri;
}
}
Em seguida, criamos dois servidores virtuais na porta 443 para nossos serviços:
server {
listen 443 ssl;
server_name cloud.seudominio.com;
root /var/www/html;
ssl_certificate /meucertificados/cloud.seudominio.com/fullchain1.pem;
ssl_certificate_key /meucertificados/cloud.seudominio.com/privkey1.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app:80;
}
}
server {
listen 443 ssl;
server_name office.seudominio.com;
root /var/www/html;
ssl_certificate /meucertificados/office.seudominio.com/fullchain1.pem;
ssl_certificate_key /meucertificados/office.seudominio.com/privkey1.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://onlyoffice:80;
}
}
Passo 2: Serviço de Documentos
Agora precisamos adicionar o container do serviço de documentos no nosso docker-compose.yml. Não há muito a configurar aqui.
services:
...
onlyoffice:
image: onlyoffice/documentserver
restart: always
Mas não se esqueça de vincular o container nginx ao serviço de documentos:
services:
...
nginx:
...
depends_on:
- onlyoffice
Passo 3: NextCloud
Primeiro, adicionamos novos serviços:
services:
...
db:
image: mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- /data/nextcloud_db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=#coloque uma senha aqui
- MYSQL_PASSWORD=#coloque outra senha aqui
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
depends_on:
- db
- onlyoffice
restart: always
e adicionamos um link para o nginx:
services:
...
nginx:
...
depends_on:
- app
Agora é hora de carregar os containers.
docker-compose up -d
Após algum tempo, o nginx começará a redirecioná-lo para a interface externa do NextCloud, que por padrão é a página de configuração. Você precisará inserir o nome de usuário e a senha para o seu primeiro usuário administrador, além das credenciais do banco de dados que você especificou no docker-compose.yml. Após a configuração, você poderá fazer login. No nosso caso, a espera levou quase um minuto e requereu um refresh adicional na página de login antes que pudéssemos acessar o serviço em nuvem.
Janela de configurações do serviço NextCloud
Passo 4: Conexão entre NextCloud e ONLYOFFICE
Neste passo, você precisará instalar o aplicativo para NextCloud, que conecta a funcionalidade do ONLYOFFICE. Vamos começar pelo painel de controle de aplicativos no canto superior direito do menu. Encontre o aplicativo ONLYOFFICE (na seção “Office & text” ou usando a busca), instale e ative-o.
Depois disso, vá para Configurações através do menu no canto superior direito, e você deverá encontrar o item ONLYOFFICE no menu à esquerda. Acesse-o. Você precisará inserir os endereços, conforme indicado abaixo.
Configurações do aplicativo de integração
O primeiro endereço é usado para vincular alguns arquivos js e css diretamente do aplicativo executado no navegador (é para isso que precisamos abrir o acesso ao serviço ONLYOFFICE através do nginx). A chave secreta não é usada, pois confiamos mais na camada de isolamento do Docker do que em uma chave de autenticação permanente. O terceiro endereço é usado pelo contêiner NextCloud para se conectar diretamente à API do ONLYOFFICE, e ele utiliza o nome de host interno padrão do Docker. Por fim, o último campo é utilizado para que o ONLYOFFICE consiga fazer solicitações de volta à API do NextCloud, usando o endereço IP externo ou o endereço interno do Docker, caso você utilize redes Docker, mas no nosso caso isso não é utilizado. Certifique-se de que as configurações do seu firewall permitam esses tipos de interações.
Após salvar, o NextCloud testará a conexão e, se tudo estiver correto, mostrará as configurações relacionadas à integração — por exemplo, quais tipos de arquivos podem ser editados por meio dessa integração. Configure como achar necessário.
Passo final: onde encontrar o editor
Se você voltar para as pastas do seu armazenamento em nuvem e clicar em “+” para criar um novo arquivo, uma nova opção de criação de documento, planilha ou apresentação estará disponível. Com isso, você poderá criar e editar imediatamente esses tipos de arquivo, utilizando o ONLYOFFICE.
Menu de criação de arquivos
Complemento 1
O conteúdo completo de docker-compose.yml pode ser encontrado aqui:
Fonte: habr.com
