terça-feira, 10 de dezembro de 2019

Instalando NextCloud com certificado digital e OnlyOffice.


- OnlyOffice (com Docker) 

- Certificado Digital Let's Encrypt


Sistema Operacional: Debian

Instalando dependências


apt-get install apache2 mariadb-server php7.3-xml php7.3 libapache2-mod-php7.3 php7.3-cgi php7.3-cli php7.3-gd php7.3-curl php7.3-apcu php7.3-zip php-ldap php7.3-mysql php-intl php7.3-intl php7.3-mbstring memcached wget unzip


Configurando BD (MariaDB)


A partir daí, você pode pressionar Y e então ENTER para aceitar as respostas padrão para todas as questões subsequentes. Isso irá remover alguns usuários anônimos e o banco de dados de teste, desativar login remoto para o root, e carregar todas essas novas regras para que o MySQL respeite imediatamente as alterações que você fez.

mysql_secure_installation


Estando o Mysql (MariaDB) instalado e configurado, agora vamos criar a base de dados e o usuário para acesso ao banco do NextCloud. Para isso seguir os comandos abaixo:

mysql -u root -p

CREATE DATABASE nextclouddb;
CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'senhasegura';
GRANT ALL PRIVILEGES ON nextclouddb.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
QUIT

Baixando NextCloud


wget https://download.nextcloud.com/server/releases/latest.zip

Extração e Ajustes de pastas


rm -rf /var/www/html/index.html
 unzip latest.zip
 mv nextcloud /var/www/html/
 chown -R www-data:www-data /var/www/html/nextcloud


Habilitar módulos no apache


Execute o comando abaixo para habilitar os modulos ssl e headers

a2enmod ssl && a2enmod headers

Subindo o Apache com SSL do Let's Encrypt



Agora vamos configurar o SSL e o Apache para acesso https do NextCloud. Para isso vamos criar o arquivo abaixo e configurar o documento conforme passos informados. Atenção em mudar "meudominio.com.br" para o seu endereço real que esta configurando.

vim /etc/apache2/sites-available/nextcloud-ssl.conf

#################################################################################

         
                  ServerAdmin suporte@meudominio.com
                  ServerName nextcloud.meudominio.com.br
                  DocumentRoot "/var/www/html/nextcloud"
                  Options MultiViews FollowSymlinks

                  SSLEngine on

                  # Para Utilizar o LetsEncrypt apenas alterar o caminho conforme exemplo:

                  SSLCertificateFile /etc/letsencrypt/live/nextcloud.meudominio.com.br/fullchain.pem
                  SSLCertificateKeyFile /etc/letsencrypt/live/nextcloud.meudominio.com.br/privkey.pem

                  #SSLCertificateFile      /etc/ssl/certs/nextcloudauto.crt
                  #SSLCertificateKeyFile /etc/ssl/private/nextcloudauto.key

                 
                                  SSLOptions +StdEnvVars
                 

                 
                                  SSLOptions +StdEnvVars
                   AllowOverride All
                   Order allow,deny
                   Allow from all
                  

   TransferLog /var/log/apache2/nextcloud_access.log
   ErrorLog /var/log/apache2/nextcloud_error.log
   Redirect 301 /.well-known/carddav https://nextcloud.meudominio.com.br/remote.php/dav
   Redirect 301 /.well-known/caldav  https://nextcloud.meudominio.com.br/remote.php/dav
   Redirect 301 /.well-known/webdav  https://nextcloud.meudominio.com.br/remote.php/dav


        Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
        Header Set X-Robots-Tag "none"
        Header Set X-Content-Type-Options nosniff
        Header Set X-Frame-Options "SAMEORIGIN"
        Header set X-XSS-Protection "1; mode=block"

     
          Header unset X-XSS-Protection
     



     


Options All -Indexes
         


#################################################################################

Em seguida vamos criar a configuração de redirect do http para https:



vim /etc/apache2/sites-available/nextcloud.conf

#################################################################################
 
 ServerAdmin suporte@meudominio.com
 ServerName nextcloud.meudominio.com.br
 DocumentRoot "/var/www/html/nextcloud"
 Redirect permanent / https://nextcloud.meudominio.com.br

 Options MultiViews FollowSymlinks

 AllowOverride All
 Order allow,deny
 Allow from all
 

 TransferLog /var/log/apache2/nextcloud_access.log
 ErrorLog /var/log/apache2/nextcloud_error.log


#################################################################################

Execute o comando abaixo para habilitar a nova conf


a2ensite nextcloud-ssl.conf
a2ensite nextcloud.conf
  

Obtendo Certificado SSL do Let's Encrypt


O primeiro passo é instalar o git. Faça com o comando abaixo:

apt-get install -y git

Próximo passo, vamos usar o Gid para instalar o Let’s Encrypt:


git -C /usr/src/ clone https://github.com/letsencrypt/letsencrypt
ln -s /usr/src/letsencrypt/letsencrypt-auto /usr/local/bin/letsencrypt


No segundo passo, iremos subir o módulo SSL


a2enmod ssl
a2enmod headers

Pare o Apache para instalar o certificado:


service apache2 stop

Finalmente criar o certificado:


letsencrypt certonly -d meudominio.com.br -d nextcloud.meudominio.com.br -w /var/www/html/nextcloud


Para criar o certificado, script lhe fará algumas perguntas:

Primeiro ele vai perguntar como você gostaria de se autenticar na certificadora. Então você deve selecionar a opção “2“, indicando para ele usar a raiz do site para trocar arquivos de autenticação.
Depois ele vai pedir um endereço de e-mail. (A ele será enviado os avisos de renovação e questões relacionadas a segurança)

Depois ele vai peguntar se você aceita os termos e condições de uso. Você deve fazê-lo digitando a “A” e pressionando enter.

Na ultima pergunta o script vai te perguntar se você gostaria de compartilhar seu endereço de e-mail com a Electronic Frontier Foundation, que são sócios fundadores da Let’s Encrypt, para que os mesmos possam lhe enviar informativos. Eu geralmente respondo que não, utilizando a opção “N“.

Após salvar e sair do arquivo, reinicie novamente o Apache:


service apache2 start

Depois colocar o comando de renovação no Crontab, pois a validade do certificado é de apenas 3 meses. Feito isso, ele sempre será renovado automaticamente, sem nenhuma intervenção.

Edite o arquivo “crontab -e” e insira a seguinte linha ao final do arquivo:

00 0 1 1,3,5,7,9,11 * root letsencrypt renew 2>&1 >> /var/log/renova.log 2>&1


Isso vai fazer com que o comando de renovação rode automaticamente no dia primeiro dos meses janeiro, março, maio, julho, setembro e novembro.


Crie um registro DNS apontando para o IP do seu servidor NextCloud e acesse o mesmo via browser conforme registro DNS criado https://nextcloud.meudominio.com.br e siga os passos para finalizar a configuração da aplicação via web.

Instalando e configurando o OnlyOffice.


Primeiro você deverá instalar a plataforma do Docker para subir o container do OnlyOffice. Para isso execute o comando abaixo:


apt-get install docker.io

Ative o Docker para subir na inicialização do Sistema Operacional.


systemctl enable docker

Subindo o Container


docker run -i -t -d -p 448:443 --restart always -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver


Ativando o Container


docker pull onlyoffice/documentserver


Subindo o certificado do NextCloud dentro do Docker no Container do OnlyOffice.


Agora precisamos colocar o mesmo certificado do NextCloud dentro do Only Office. Para isso execute o comando abaixo para pegar o ID do container para acessa-lo:


docker ps

Pegue o ID do container que ira aparecer na primeira coluna. (Exemplo: b67d97b50639)

Acessando o Container


docker exec -it "id_do_container" /bin/bash

Ativando SSL no OnlyOffice

Acesse a pasta /etc/letsencrypt/live/nextcloud.meudominio.com.br/ no servidor fora do docker e copie o conteúdo das seguintes chaves para dentro do container no caminho abaixo como destino dentro do container:


Origem: /etc/letsencrypt/live/nextcloud.meudominio.com.br/fullchain.pem (No server)
Destino: /var/www/onlyoffice/Data/certs/onlyoffice.crt (No container)


Origem: /etc/letsencrypt/live/nextcloud.meudominio.com.br/privkey.pem (No server)
Destino: /var/www/onlyoffice/Data/certs/onlyoffice.key  (No container)


Logo após edite o arquivo "vim /etc/onlyoffice/documentserver/nginx/ds.conf" e cole o conteúdo abaixo:










#################################################################

include /etc/nginx/includes/http-common.conf;

## Normal HTTP host
server {
  listen 0.0.0.0:80;
  listen [::]:80 default_server;
  server_name _;
  server_tokens off;

  ## Redirects all traffic to the HTTPS host
  root /nowhere; ## root doesn't have to be a valid path since we are redirecting
  rewrite ^ https://$host$request_uri? permanent;
}

#HTTP host for internal services
server {
  listen 127.0.0.1:80;
  listen [::1]:80;
  server_name localhost;
  server_tokens off;

  include /etc/nginx/includes/ds-common.conf;
  include /etc/nginx/includes/ds-docservice.conf;
}

## HTTPS host
server {
  listen 0.0.0.0:443 ssl http2;
  listen [::]:443 ssl http2 default_server;
  server_tokens off;
  root /usr/share/nginx/html;

  ## Strong SSL Security
  ## https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html
  ssl on;
  ssl_certificate /var/www/onlyoffice/Data/certs/onlyoffice.crt;
  ssl_certificate_key /var/www/onlyoffice/Data/certs/onlyoffice.key;
  ssl_verify_client off;

  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

  ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
  ssl_session_cache  builtin:1000  shared:SSL:10m;

  ssl_prefer_server_ciphers   on;

  add_header Strict-Transport-Security max-age=31536000;
  # add_header X-Frame-Options SAMEORIGIN;
  add_header X-Content-Type-Options nosniff;

  ## [Optional] If your certficate has OCSP, enable OCSP stapling to reduce the overhead and latency of running SSL.
  ## Replace with your ssl_trusted_certificate. For more info see:
  ## - https://medium.com/devops-programming/4445f4862461
  ## - https://www.ruby-forum.com/topic/4419319
  ## - https://www.digitalocean.com/community/tutorials/how-to-configure-ocsp-stapling-on-apache-and-nginx
  # ssl_stapling on;
  # ssl_stapling_verify on;
  # ssl_trusted_certificate /etc/nginx/ssl/stapling.trusted.crt;
  # resolver 208.67.222.222 208.67.222.220 valid=300s; # Can change to your DNS resolver if desired
  # resolver_timeout 10s;

  ## [Optional] Generate a stronger DHE parameter:
  ##   cd /etc/ssl/certs
  ##   sudo openssl dhparam -out dhparam.pem 4096
  ##
##  ssl_dhparam /var/www/onlyoffice/Data/certs/dhparam.pem;

  include /etc/nginx/includes/ds-*.conf;

}


#################################################################

Logo após reiniciei o Nginx do container:

/etc/init.d/nginx restart



Para testar abra a URL: https://nextcloud.meudominio.com.br:448/ e dereverá carregar uma pagina conforme abaixo:



Configurando o OnlyOffice dentro do Nextcloud


Para configurar o OnlyOffice dentro do Nextcloud acesse o Menu de Aplicativos e procure por OnlyOffice e clique em instalar/ativar.
Depois vá em configurações e procure pelo App OnlyOffice. E no campo "Endereço de serviço de documentos, insira a URL do OnlyOffice: https://nextcloud.meudominio.com.br:448/ e clique em salvar. Após gravar abaixo vai carregar as configurações do OnlyOffice para você selecionar quais documentos deverão abrir com o OnlyOffice.

Fontes:
https://helpcenter.onlyoffice.com/server/docker/document/docker-installation.aspx
https://blog.remontti.com.br/1557
https://api.onlyoffice.com/editors/nextcloud
https://github.com/ONLYOFFICE/Docker-DocumentServer/blob/master/README.md
https://github.com/ONLYOFFICE/CommunityServer/blob/master/build/install/deb/Files/tools/letsencrypt.sh
https://help.nextcloud.com/t/onlyoffice-integration-https-certificate-failed/35160


Nenhum comentário: