O Nextcloud é software open source que permite hospedar e compartilhar arquivos de forma segura e privativa, sendo semelhante ao conhecido Dropbox. A diferença com o Nextcloud é que todos os seus recursos são em código aberto. Além disso, ele restitui a você o controle e a segurança de seus dados confidenciais, eliminando assim o uso de serviço de hospedagem em nuvem de terceiros.
Se você busca uma solução de armazenamento de arquivos onde você possa ter total controle sobre o servidor e a plataforma, ou seja, ter sua Nuvem Privada, o Nextcloud é a solução.
Este artigo irá guiá-lo como instalar o Nextcloud no Ubuntu 20.04 com o servidor web Apache e o certificado SSL da Let’s encrypt.
1. PRé-requisitos
- Um servidor Ubuntu 20.04 instalado com IP estático (ex: 172.16.15.3) e devidamente atualizado.
- Acesso SSH e logado como usuário root.
- Um nome de domínio apontado para seu servidor: Para garantir conexões do Nextcloud com protocolos TLS/SSL. O Nextcloud pode configurar e gerenciar um certificado SSL gratuito e confiável da Let’s Encrypt se seu servidor tiver um nome de domínio (ex: arquivos.soulinux.com). Se não tiver um nome de domínio, o Nextcloud pode definir um certificado SSL autoassinado que possa criptografar conexões. porém, ele não será confiável por padrão em navegadores Web.
2. CONFIGURAÇÕES IMPORTANTES
2.1. Habilitar o acesso SSH no Ubuntu:
vim /etc/ssh/sshd_config
- A fim de melhorar a segurança, altere a porta de acesso SSH:
Port 2222
- Coloque a parte de autenticação como o mostrado abaixo:
#Authentication:
LoginGraceTime 2m
PermitRootLogin yes
StrictModes yes
- Para concluir, reinicie o serviço SSH:
systemctl restart sshd
2.2. Definir a região de fuso horário:
dpkg-reconfigure tzdata
2.3. Atualize o servidor e limpe itens não mais necessários:
apt update && sudo apt upgrade
apt autoremove
apt autoclean
apt clean
3. CONFIGURAÇÕES de Firewall
Supondo que você esteja usando o UFW para gerenciar seu firewall, será necessário abrir as portas HTTP ( 80 ) e HTTPS ( 443 ) e SSH (2222).
ufw allow 80
ufw allow 443
ufw allow 2222
enable
4. iNSTALAÇÃO DO sERVIDOR web (lamp)
4.1. Instalação do PHP e Apache:
No momento em que este tutorial está sendo escrito, a versão padrão do PHP no Ubuntu 20.04 é a 7.4.3 e é totalmente suportado e recomendado para o Nextcloud. por ser padrão, não é necessário indicar a versão na instalação:
apt install apache2 php libapache2-mod-php php-gmp php-bcmath php-gd php-json php-mysql php-curl php-mbstring php-intl php-xml php-zip php-imagick imagemagick php-fpm php-apcu php-fileinfo ffmpeg php-common php-bz2 unzip
Habilite alguns módulos Apache:
a2enmod headers dir mime ssl rewrite headers proxy proxy_http deflate cache proxy_wstunnel http2 proxy_fcgi env setenvif
Teste a configuração:
sudo apache2ctl -t
Habilite para iniciar no boot e reinicie o Apache:
systemctl enable apache2
systemctl restart apache2
Confira a versão do PHP:
php --version
4.2. Atualizar Configuração do PHP:
Antes da criação do banco de dados, pode-se definir os parâmetros recomendados no arquivo php.ini:
nano /etc/php/7.4/apache2/php.ini
- Ajuste os seguintes campos para os valores abaixo ou de acordo com suuas necessidades:
output_buffering = off (linha 215)
max_execution_time = 120 (linha 388)
memory_limit = 1024M (linha 409)
post_max_size = 128M (linha 694)
upload_max_filesize = 1024M (linha 846)
date.timezone = America/Sao_Paulo (linha 962)
4.3. Instalar e configurar a base de dados MySQL (MariaDB):
O MariaDB é um sistema de gerenciamento de banco de dados de código aberto, usado com frequência como uma alternativa ao MySQL como a parte que representa o banco de dados da famosa pilha LAMP (Linux, Apache, MySQL, PHP/Python/Perl). Ele foi criado como um substituto do MySQL.
No momento em que este tutorial está sendo escrito, os repositórios APT padrão do Ubuntu 20.04 incluem a versão 10.3.32 do MariaDB.
Proceda a instalação do MariaDB:
apt install mariadb-server
Após concluída a instalação, verifique se o habilite para iniciar no boot e reinicie o MariaDB:
systemctl enable mariadb
systemctl restart mariadb
Confira a versão do MariaDB:
mariadb --version
Confira a versão do MariaDB:
mariadb --version
Antes de criar a base de dados, vamos tornar o MariaDB mais seguro. Execute o comando a seguir e, quando solicitado, defina a "senha do usuário root do MariaDB", remova o "usuário anônimo", "mantenha o login remoto pelo usuário root do banco de dados" e exclua a base de dados "test":
/usr/bin/mysql_secure_installation
Quando solicitado, responda às perguntas abaixo:
Enter current password for root (enter for none): Pressione Enter
Change the root password? [Y/n]: Digite Y
New password: Digite a senha do SGBD
Re-enter new password: Digite a senha novamente
Remove anonymous users? [Y/n]: Digite Y
Disallow root login remotely? [Y/n] : Digite Y
Remove test database and access to it? [Y/n]: Digite Y
Reload privilege tables now? [Y/n]: Digite Y
Faça login ao servidor do banco de dados MariaDB com o respectivo usuário root e entre com a respectiva senha definida acima:
mysql -u root -p
Estando na interface de administração do MariaDB, crie a base de dados do seu NextCloud:
create database NomeDB_nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Defina o respectivo usuário e uma senha forte para esse banco de dados.
grant all on NomeDB_nextcloud.* to 'UsuarioDB_nextcloud'@'localhost' identified by 'SENHA_UsuárioDB';
Atribua os respectivos privilégios:
flush privileges;
Saia da interface de administração do MariaDB:
exit
5. INSTALAÇÃO DO NextCloud Server
5.1. Faça o download da última versão do NextCloud na pasta padrão do Apache:
Acesse a pasta "/var/www":
cd /var/www
Remova a subpasta padrão "html", pois colocaremos a pasta "nextcloud" em "/var/www":
rm -r /var/www/html/
No momento da elaboração desse artigo, a última versão do NextCloud é a 23.0. Faça o download da última versão do NextCloud. :
wget https://download.nextcloud.com/server/releases/latest.zip
Descompacte o arquivo recém baixado:
unzip latest.zip
Após descomapctado, remova o arquivo compactado recém baixado:
rm latest.zip
O shopt é um comando interno do shell Bash que pode ativar ou desativar as opções da sessão atual do shell. No caso, o bash inclui nomes de arquivos que começam com ‘ . ‘nos resultados do nome do caminho global:
shopt -s dotglob
O usuário "www-data" é o padrão para operação normal para servidores Web no Ubuntu como o Apache. Defina esse usuário como proprietário da pasta:
chown -R www-data:www-data /var/www
5.2. Definir permissões adequadas da pasta do NextCloud:
Para isso faremos o download e usaremos um shell script. Continue na pasta /var/www e faça o download a partir do github da Nextcloud.
wget https://raw.githubusercontent.com/nextcloud/vm/master/static/setup_secure_permissions_nextcloud.sh
Torne o script executável:
chmod +x setup_secure_permissions_nextcloud.sh
Como esse script busca um outro script que deve estar em uma pasta específica (/var/scripts). Crie essa pasta:
mkdir -p /var/scripts
Acesse essa pasta:
cd /var/scripts
Faça o download do arquivo com o nome que está indicado no script de permissões segura:
wget -O fetch_lib.sh https://raw.githubusercontent.com/nextcloud/vm/master/lib.sh
Torne o script executável:
chmod +x fetch_lib.sh
Volte para a pasta "/var/www":cd /var/www
Execute o script:./setup_secure_permissions_nextcloud.sh
5.3. Crie um site na configuração do Apache:
Crie o arquivo "nextcloud.conf" na pasta "/etc/apache2/sites-available":
cd /etc/apache2/sites-available
nano nextcloud.conf
Coloque o seguinte conteúdo, ajustando de acordo com suas configurações:
<VirtualHost *:80>
ServerName nextcloud.SeuDominio.com
ServerAlias www.nextcloud.SeuDominio.com
DocumentRoot /var/www/nextcloud
<Directory "/var/www/nextcloud">
Require all granted
AllowOverride All
Options -Indexes +FollowSymLinks
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
ErrorLog /var/log/apache2/nextcloud.SeuDominio.com-error.log
CustomLog /var/log/apache2/nextcloud.SeuDominio.com-requests.log combined
</VirtualHost>
Saia do editor (nano) e habilite o site nextcloud:
a2ensite nextcloud
Como vamos utilizar somente o site nextcloud, desabilite o site padrão definido em "000-default.conf":
sudo a2dissite 000-default.conf
Reinicie o Apache para fazer com que estas alterações tenham efeito:
sudo systemctl restart apache2
Agora você deve conseguir acessar e ver o Nextcloud no navegador. Mas não comece a instalação ainda.
5.4. Instalação do Certificado Digital:
Instalaremos o certbot do Let’s encrypt e obteremos um certificado para o Ubuntu 20.04:
sudo apt install certbot python3-certbot-apache
Crie um certificado de acordo com o seu caminho de instalação do NextCloud e com seu respectivo domínio:certbot certonly --webroot -w /var/www/nextcloud -d nextcloud.SeuDominio.com
O certificado Let's Encrypt tem duração de 3 meses, para realizar a renovação de forma automática, vamos executar a instrução no "crontab":crontab -e
Adicione o seguinte conteúdo ao "crontab":
#Renovação ocorre todo dia às 4:30
30 04 * * * certbot renew
Atualize o arquivo do site nextcloud para adicionar a porta 443 (SSL):
nano /etc/apache2/sites-enabled/nextcloud.conf
Coloque o seguinte conteúdo, ajustando de acordo com suas configurações:
<VirtualHost *:80>
ServerName nextcloud.SeuDominio.com
ServerAlias www.nextcloud.SeuDominio.com
DocumentRoot /var/www/nextcloud
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
<Directory "/var/www/nextcloud">
Require all granted
AllowOverride All
Options -Indexes +FollowSymLinks
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
ErrorLog /var/log/apache2/nextcloud.SeuDominio.com-error.log
CustomLog /var/log/apache2/nextcloud.SeuDominio.com-requests.log combined
</VirtualHost>
<VirtualHost *:443>
ServerName nextcloud.SeuDominio.com
ServerAlias www.nextcloud.SeuDominio.com
DocumentRoot /var/www/nextcloud
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On
Header always set Strict-Transport-Security "max-age=63072000; includeSubnextcloud.SeuDominio.coms; preload"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
<Directory "/var/www/nextcloud">
Require all granted
AllowOverride All
Options -Indexes +FollowSymLinks
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
</Directory>
ErrorLog /var/log/apache2/nextcloud.SeuDominio.com-error.log
CustomLog /var/log/apache2/nextcloud.SeuDominio.com-requests.log combined
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/nextcloud.SeuDominio.com/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/nextcloud.SeuDominio.com/fullchain.pem
</VirtualHost>
Reinicie o Apache:
systemctl restart apache2
Os certificados foram baixados, instalados e carregados. Tente recarregar o seu site usando https://nextcloud.SeuDominio.com e verifique o indicador de segurança do seu navegador. Ele deve indicar que o site está devidamente protegido, normalmente com um ícone de cadeado.
Faça também um teste no site SSL Labs Server Test, e você deverá receber uma classificação A.
Agora é possível acessar o navegador web com SSL ativado. https://nextcloud.seudominio.com
5.5. Configuração inicial do NextCloud:
Acesse o nexcloud a partir de do navegador web (Firefox, Chrome, etc.) e proceda com as configurações iniciais.
6. INSTALAÇÃO DO Redis Cache
Nextcloud se tornou uma das soluções de nuvem privada mais amplamente usadas no planeta. Este software em nuvem não é apenas de código aberto, mas também é escalonável, extensível e confiável. Por padrão, o Nextcloud não habilita o armazenamento em cache. Por que você precisa de cache? O armazenamento em cache aumenta o desempenho, armazenando objetos solicitados com frequência na memória.
Ao fazer isso, a recuperação desses objetos é consideravelmente mais rápida. Já que estamos falando sobre nuvem, você pode ter centenas (até milhares) de usuários acessando esse servidor simultaneamente. Sem o cache ativado, esse servidor sofrerá um impacto significativo à medida que cada usuário recupera objetos. Felizmente, com o Nextcloud é possível adicionar esse recurso utilizando um servidor Redis, que é um tipo de banco de dados NoSQL, classificado como servidor de estrutura de dados e armazena as informações em esquemas de chave-valor na memória. Ele é Open Source e licenciado em BSD. Seu nome é um acrônimo de REmote DIctionary Server (servidor de dicionário remoto).
6.1. Faça a instalação e configuração do servidor Redis:
apt install redis-server php-redis
Habilite o módulo php-redis:
phpenmod redis
Habilite e reinicie o servidor Redis:
systemctl enable redis-server
systemctl restart redis-server
Confira se o servidor Redis está em execução:
systemctl status redis-server
A fim de configurar o cache, edite o arquivo "config.php"
nano /var/www/nextcloud/config/config.php
Adicione o seguinte conteúdo ao arquivo "config.php" acima do final do bloco ");" :
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.local' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => 'localhost',
'port' => 6379,
),
Salve e feche o arquivo e em seguida, reinicie o Apache e o PHP-FPM:
systemctl restart apache2 php7.4-fpm
Configure Opcache para PHP (substituir o número da versão pelo que corresponde ao PHP instalada, em nosso caso é 7.4):
nano /etc/php/7.4/apache2/php.ini
Descomente a linhas relacionadas ao bloco [opcache] (pode-se modificar os valores padrão conforme necessário):
; Nextcloud Opcache settings
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1
Salve e feche o arquivo e em seguida, reinicie o Apache e o PHP-FPM:
systemctl restart apache2 php7.4-fpm