Configuração do NextCloud + ONLYOFFICE em um servidor usando Docker

Olá, Habr! Estou apresentando a tradução do artigo «Configurando NextCloud e ONLYOFFICE em um único servidor com Docker».

É 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. www.akadia.com/services/ssh_test_certificate.html (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 NextCloudConfiguração do NextCloud + ONLYOFFICE em um servidor usando Docker

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çãoConfiguração do NextCloud + ONLYOFFICE em um servidor usando Docker

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 arquivosConfiguração do NextCloud + ONLYOFFICE em um servidor usando Docker

Complemento 1

O conteúdo completo de docker-compose.yml pode ser encontrado aqui: https://pastebin.com/z1Ti1fTZ

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster