Guia Completo: Como instalar e configurar o Nextcloud Hub 9 no Debian 12


Neste tutorial, você aprenderá como configurar e instalar o NextCloud em um servidor Linux Debian 12. O Nextcloud Hub é uma poderosa solução de armazenamento em nuvem que permite hospedar seus próprios arquivos, calendários, contatos e outros dados, garantindo total controle sobre a privacidade e segurança.

Abordaremos passo a passo desde a configuração do servidor web com Apache, PHP e MariaDB, até a instalação e configuração do NextCloud. Além disso, este guia inclui ajustes de segurança, como a implementação de SSL com Certbot (Let’s Encrypt) e otimizações para melhorar o desempenho do sistema.

Ao final, você terá um ambiente funcional e seguro para hospedar sua própria nuvem privada, ideal para empresas ou usuários que desejam independência de serviços de terceiros.

Prepare-se para transformar seu servidor em uma plataforma de nuvem privada robusta e personalizável! 🚀

Debian 12

Instalação do Debian 12 Bookworm limpa passo-a-passo

Subindo Servidor Web

Instale o servidor web Apache e vários módulos do PHP necessários para o nextcloud

# apt install apache2 apache2-utils redis-server php \
  php-{fpm,pclzip,xmlrpc,imagick,redis,memcached,apcu,imap,ldap,intl,mysql,cli,pear,gmp,gd,bcmath,mbstring,curl,xml,zip} -y

Habilitação de Módulos do Apache

# a2enmod proxy_fcgi setenvif mpm_event rewrite headers http2
  • proxy_fcgi: Permite que o Apache se conecte a servidores FastCGI, como PHP-FPM.
  • setenvif: Configura variáveis de ambiente com base em condições das requisições.
  • mpm_event: Otimiza o Apache para lidar com conexões simultâneas de forma eficiente.
  • rewrite: Permite redirecionamentos e reescritas de URL dinâmicas.
  • headers: Permite manipulação de cabeçalhos HTTP em respostas e requisições.
  • http2: Habilita suporte ao protocolo HTTP/2 para maior velocidade e eficiência.

Desabilitação do Módulo PHP do Apache, vamos utilizar o PHP-FPM.

# a2dismod php8.2

Ativação do PHP-FPM no Boot, e habilite o PHP-FPM no Apache.

# systemctl enable php8.2-fpm
# a2enconf php8.2-fpm

Melhorias de Segurança: Ajusta as configurações para ocultar informações sensíveis do servidor, como versão do Apache e detalhes do sistema operacional.

# sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/apache2/conf-available/security.conf
# sed -i 's/ServerSignature On/ServerSignature Off/' /etc/apache2/conf-available/security.conf

Adiciona o usuário `www-data` (usado pelo servidor web) ao grupo do Redis, permitindo acesso ao cache Redis pelo Apache ou PHP.

# usermod -a -G redis www-data
echo 'apc.enable_cli=1' >> /etc/php/8.2/cli/php.ini

Edite o arquivo php.ini do PHP-FPM

# vim /etc/php/8.2/fpm/php.ini
  • Defina o limite de memória para scripts PHP em 512MB, garantindo que aplicações PHP que consomem mais memória possam funcionar adequadamente.
  • Configura o opcache para usar 16MB de buffer para strings internada, melhorando o desempenho e reduzindo o consumo de memória de strings repetitivas.
memory_limit = 512M
opcache.interned_strings_buffer=16

Para instalação do NextCloud vou utilizar o diretório padrão do Apache /var/www/html, desta forma se você se você não fou utilizar DNS (acessar via IP) pode pular o próximo passo.

Aponte em seus DNS a entra para o subdomínio, exemplo: nextcloud.seudominio.com.br. Agora vamos criar a configuração do Apache para tratar o “nextcloud.seudominio.com.br”

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

Ajuste da seguinte forma:

<virtualhost *:80>
        Protocols h2 http/1.1
        ServerName nextcloud.seudominio.com.br
        ServerAdmin noc@seudominio.com.br
 
        DocumentRoot /var/www/html 
 
        <IfModule mod_headers.c>
          Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
        </IfModule> 
 
        <directory /var/www/html/ >
                Options FollowSymLinks
                AllowOverride All
        </directory> 
 
        LogLevel warn 
        ErrorLog ${APACHE_LOG_DIR}/error_nextcloud.log
        CustomLog ${APACHE_LOG_DIR}/access_nextcloud.log combined
</virtualhost>

Se estiver configurado servidor para um DNS desative a configuração 000-default, caso não configurou pule essa etapa.

# a2dissite 000-default

Ative as configurações do nextcloud.conf no apache para interpretar as configurações com nosso domínio.

# a2ensite nextcloud

Reinicia o servidor Apache e php-fpm para aplicar as configurações feitas.

# systemctl restart php8.2-fpm apache2

Instala o Certbot (ferramenta para gerenciar certificados grátis da Let’s Encrypt) e o plugin para integração com o Apache.

# apt install certbot python3-certbot-apache

Execute o Certbot para configura automaticamente o VirtualHost.

# certbot
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel): noc@seudominio.com.br 👈

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in
order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y 👈

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N 👈
Account registered.

Which names would you like to activate HTTPS for?
We recommend selecting either all domains, or all domains in a VirtualHost/server block.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: nextcloud.seudominio.com.br
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1
Requesting a certificate for nextcloud.seudominio.com.br

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/nextcloud.seudominio.com.br/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/nextcloud.seudominio.com.br/privkey.pem
This certificate expires on 2025-04-06.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for nextcloud.seudominio.com.br to /etc/apache2/sites-available/nextcloud-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://nextcloud.seudominio.com.br

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Certificados gerados pela Let’s Encrypt tem validade de 90 dias. Então vamos criar um script para renovar de forma automática.

# vim /usr/local/bin/renew-certificates.sh

Adicione:

#!/bin/bash

# Renova os certificados usando Certbot
/usr/bin/certbot renew --quiet

De permissão para execução.

chmod +x /usr/local/bin/renew-certificates.sh

Adicione ao cron para 1x por semana às 03:00 da manhã ele realizar a renovação.

crontab -e

Adicion:

0 3 * * 1 /usr/local/bin/renew-certificates.sh

Reinicie o cron.

# systemctl restart cron

MariaDB (Banco de Dados)

Instala o servidor e o cliente do MariaDB, um sistema de gerenciamento de banco de dados.

# apt install mariadb-server mariadb-client

Crie o banco de dados para o NextCloud, acesso o terminal do MariaDB.

# mariadb -u root 

Altere SUA_SENHA para sua senha.

CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'SUA_SENHA';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost';
FLUSH PRIVILEGES;
QUIT;

Vamos fazer mais um ajuste no banco de dados MariaDB:

# vim /etc/mysql/conf.d/mysql.cnf

Adicione configuração extras do innodb_buffer_pool_size e innodb_io_capacity para uma melhor performace.

[mysqld]

# Define o tamanho do buffer pool do InnoDB para 1 GB, usado para armazenar 
# dados e índices em memória, melhorando o desempenho.
innodb_buffer_pool_size=1G

# Configura a capacidade máxima de I/O por segundo do InnoDB, 
# ideal para servidores com discos rápidos, como SSDs.
innodb_io_capacity=4000

Reinicie o serviço para carregar as novas configurações.

# systemctl restart mariadb
Bibliotecas adicionais

Instala bibliotecas adicionais para suporte a formatos de imagem extras e funcionalidades avançadas no ImageMagick.

# apt install libmagickcore-6.q16-6-extra -y

Instalação do NextCloud

Servidor web pronto, vamos as configurações do NextCloud

Vamos fazer download da versão mais recente (Hoje 06/01/2025 v30.0.4)

# cd /tmp/
# wget https://download.nextcloud.com/server/releases/latest.zip
--2025-01-06 11:50:58--  https://download.nextcloud.com/server/releases/latest.zip
Resolvendo download.nextcloud.com (download.nextcloud.com)... 2a01:21c8::145, 5.9.202.145
Conectando-se a download.nextcloud.com (download.nextcloud.com)|2a01:210:21c8::145|:443... conectado.
A requisição HTTP foi enviada, aguardando resposta... 200 OK
Tamanho: 225508096 (215M) [application/zip]
Salvando em: “latest.zip”

latest.zip  100%[============================================>] 215,06M   373KB/s    em 8m 11s  

2025-01-06 11:59:10 (448 KB/s) - “latest.zip” salvo [225508096/225508096]

Extraia o arquivo

# unzip -q latest.zip

Agora vamos mover os arquivos para /var/www/html, porem antes vamos renomear a pasta html que contém o arquivo index.html padrão do apache.

# mv /var/www/html/ /var/www/html_old

Agora vamos mover nossa pasta que extraímos nextcloud para /var/www/html, e vamos dar permissões para o usuário Apache administrar os arquivos.

# mv nextcloud /var/www/html
# chown -R www-data: /var/www/html

Agora acesse em seu navegador “https://nextcloud.seudominio.com.br” para finalizar a instalação:
Crie uma nome de usuário e senha para o administrador, em seguida informe os dados da conexão do banco de dados MariaDB, conforme você criou anteriormente, e clique em instalar.

Selecione quais aplicações gostaria de instalar e clique em instalar, ou clique em ignorar para não instalar agora. (É possível instalar posteriormente no painel de administração.)

Algumas telas irão aparecer apresentando o Nexcloud Hub.

Ao final você terá a seguinte tela.

Seu NextCloud está quase pronto para utilizar, vamos a mais alguns ajustes.

Adicionar Índices Ausentes ao Banco de Dados:

# su - www-data --shell=/bin/bash -c 'php /var/www/html/occ db:add-missing-indices' 

Este comando utiliza a interface de linha de comando do Nextcloud (`occ`) para verificar e adicionar índices que possam estar faltando nas tabelas do banco de dados. Índices são cruciais para melhorar a velocidade das consultas e o desempenho geral do sistema. Ao adicionar os índices ausentes, garantimos que o banco de dados opere de maneira mais eficiente.

Configurar o Horário de Início da Janela de Manutenção:

# su - www-data --shell=/bin/bash -c 'php /var/www/html/occ config:system:set maintenance_window_start --type=integer --value=3' 

Este comando define o horário de início da janela de manutenção para as tarefas de segundo plano que exigem muitos recursos. Ao configurar este parâmetro, você especifica a hora (em UTC) em que essas tarefas devem começar, minimizando o impacto no desempenho durante os períodos de uso intenso. No exemplo acima, o valor `3` indica que a janela de manutenção começará às 03:00 UTC.

Executar Reparos de Manutenção Incluindo Migrações de Mime Types:

# su - www-data --shell=/bin/bash -c 'php /var/www/html/occ maintenance:repair --include-expensive' 

Este comando executa uma série de reparos no sistema Nextcloud, incluindo tarefas que podem ser demoradas (`–include-expensive`). Entre essas tarefas, está a migração de tipos MIME, que assegura que novos tipos de arquivos sejam reconhecidos e tratados corretamente pelo sistema. É especialmente útil após atualizações ou quando novos tipos de arquivos são adicionados.

Ajustes finais

# vim /var/www/html/config/config.php

Adicione as seguintes linhas dentro do array $CONFIG {}:

  'default_language' => 'pt-BR',
  'default_locale' => 'pt_BR',
  'default_phone_region' => 'BR',

Adicione: Redis como memcache para o bloqueio de arquivos.

  'filelocking.enabled' => true,
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => [
    'host' => 'localhost',
    'port' => 6379,
  ],

Sempre que você cria um usuário novo ele cria vários arquivos de exemplo/modelo, se desejar desativar isso adicione também:

  'skeletondirectory' => '',

Agora limpe os logs

 # > /var/www/html/data/nextcloud.log

Agora vá até as configurações de administrador para verificar se a instalação está tudo “dentro dos conformes”.

Deve conter apenas um “problema”: Você ainda não definiu ou verificou a configuração do seu servidor de e-mail. Para resolver basta configurar o serviço de envio de e-mail.

É possível testar seu servidor em: https://scan.nextcloud.com

Agora sim seu servidor NextCloud Hub está pronto!

Bônus

Perdi a senha como recupara?

# su - www-data --shell=/bin/bash -c 'php /var/www/html/occ user:resetpassword administrador'
Enter a new password: 
Confirm the new password: 
Successfully reset password for administrador

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Fonte:
https://docs.nextcloud.com/server/latest/admin_manual/contents.html

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

4 Resultados

  1. Valdir disse:

    Muito bom o material, gostaria de saber se já tem algum tutorial em vídeo passo a passo para a instalação e configuração de todo o processo, obrigado.

  2. Bruno Dantas disse:

    Excelente, obrigado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *