Guia de tecnologias

Instalar Nextcloud 17 no CentOS 8 com Nginx e PHP 7.3

8 min read Tutoriais Atualizado 21 Oct 2025
Instalar Nextcloud 17 no CentOS 8 com Nginx e PHP 7.3
Instalar Nextcloud 17 no CentOS 8 com Nginx e PHP 7.3

Instale Nextcloud 17 no CentOS 8 com Nginx, PHP‑FPM 7.3 e MariaDB: configure repositórios REMI/EPEL, ajuste php.ini e php-fpm, crie base de dados MariaDB, gere SSL com Certbot, ajuste SELinux e virtualhost Nginx. Este guia passo a passo cobre instalação, ajustes de segurança, verificação e tarefas pós-instalação.

Importante: troque os nomes de domínio, endereços de e‑mail e senhas pelos seus valores reais antes de aplicar os comandos em produção.

O que é este guia

Este tutorial mostra como instalar Nextcloud 17 (software open source para sincronização de arquivos e colaboração) em um servidor CentOS 8 com Nginx, PHP‑FPM 7.3 e MariaDB. Também cobre a geração de certificado SSL gratuito com Let’s Encrypt, ajuste de SELinux e boas práticas de segurança e operação.

Definição rápida: Nextcloud é uma solução self‑hosted para armazenamento e colaboração de arquivos, semelhante a Dropbox, escrita em PHP/JavaScript.

Variantes de intenção (para SEO)

  • Instalar Nextcloud 17 no CentOS 8
  • Nextcloud com Nginx e PHP‑FPM 7.3
  • Nextcloud + MariaDB + Let’s Encrypt
  • Guia passo a passo Nextcloud CentOS
  • Configurar SELinux para Nextcloud

Requisitos mínimos (fact box)

  • Memória RAM: 2 GB (recomendado >= 4 GB para uso intenso)
  • Espaço em disco: ≥ 25 GB livre (depende do volume de dados)
  • CPUs: 2 vCPU
  • Sistema operacional: CentOS 8
  • Acesso root ou sudo

Nota: esses requisitos vêm do exemplo usado neste guia; ajuste conforme a carga e número de usuários.


Imagem: vista geral do painel Nextcloud e login inicial

Pré‑passos e plano de ação

O que faremos neste tutorial:

  • Instalar Nginx
  • Instalar PHP‑FPM 7.3 e extensões recomendadas
  • Configurar PHP e PHP‑FPM (opcache, timezone, limites)
  • Instalar e configurar MariaDB (base e usuário Nextcloud)
  • Gerar SSL com Certbot (Let’s Encrypt)
  • Baixar e instalar Nextcloud 17
  • Criar virtualhost Nginx para Nextcloud
  • Ajustar SELinux para permitir escrita nas pastas necessárias
  • Finalizar pela interface web do instalador Nextcloud

Passo 1 - Instalar Nginx

Instale o Nginx a partir do repositório AppStream:

sudo dnf install nginx

Inicie e habilite no boot:

systemctl start nginx
systemctl enable nginx

Verifique o status:

systemctl status nginx

Você deverá ver o serviço Nginx ativo (running).

Imagem: iniciar Nginx com systemd e verificar serviço

Abra portas HTTP e HTTPS no firewalld:

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

Imagem: configuração do firewall para Nginx

Passo 2 - Instalar PHP‑FPM 7.3

Nextcloud 17 funciona bem com PHP 7.2/7.3; usaremos PHP 7.3 via repositório REMI.

Habilite PowerTools, instale EPEL e REMI:

sudo dnf config-manager --set-enabled PowerTools
sudo dnf install epel-release
sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Confira os repositórios:

dnf repolist

Habilite o módulo PHP 7.3 do REMI:

dnf module list php
dnf module enable php:remi-7.3

Imagem: adicionando repositório Remi no CentOS 8

Instale PHP e extensões recomendadas para Nextcloud:

sudo dnf install php-fpm php-cli php-devel php-gd php-mysqlnd php-pear php-xml php-mbstring php-pdo php-json php-pecl-apcu php-pecl-apcu-devel php-pecl-imagick-devel php-intl php-opcache php-zip

Após instalar, prossiga para configurar PHP‑FPM.

Passo 3 - Configurar PHP‑FPM 7.3

Edite o php.ini:

vim /etc/php.ini

Ajuste as diretivas:

memory_limit = 512M
date.timezone = Asia/Jakarta
cgi.fixpathinfo = 0

Altere timezone para o fuso correto da sua infraestrutura.

Otimize o opcache em /etc/php.d/10-opcache.ini:

opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Edite /etc/php-fpm.d/www.conf para rodar como usuário nginx e usar socket:

vim /etc/php-fpm.d/www.conf

Altere:

user = nginx
group = nginx
listen = /run/php-fpm/www.sock

Uncomente variáveis de ambiente e opcache file cache:

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

php_value[opcache.file_cache] = /var/lib/php/opcache

Crie diretórios para sessão e opcache e ajuste propriedade:

mkdir -p /var/lib/php/{session,opcache}
chown -R nginx:nginx /var/lib/php/{session,opcache}

Habilite e inicie o PHP‑FPM:

systemctl enable php-fpm
systemctl start php-fpm

Verifique o socket e status:

netstat -pl | grep php
systemctl status php-fpm

Imagem: configuração do PHP 7.3 e PHP-FPM em execução

Imagem: socket do PHP-FPM e status

Resultado: PHP‑FPM deverá estar escutando em /run/php-fpm/www.sock.

Passo 4 - Instalar e configurar MariaDB

Instale MariaDB:

sudo dnf install mariadb mariadb-server

Inicie e habilite:

systemctl start mariadb
systemctl enable mariadb

Imagem: configuração do MariaDB

Execute o script de hardening:

mysql_secure_installation

Responda conforme suas políticas (recomenda‑se definir senha root e remover usuários anônimos e DBs de teste).

Crie a base de dados e usuário para Nextcloud (exemplo):

mysql -u root -p
-- NO PROMPT: digite sua senha root
create database nextcloud_db;
create user nextclouduser@localhost identified by 'nextcloudpassdb';
grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'nextcloudpassdb';
flush privileges;

Substitua nextcloudpassdb por uma senha forte e segura. Você também pode criar um usuário que se conecte a partir de hosts remotos se necessário.

Imagem: criação da base de dados Nextcloud no MariaDB

Passo 5 - Gerar SSL com Let’s Encrypt (Certbot)

Instale o Certbot (cliente para Let’s Encrypt):

sudo dnf install certbot

Gere o certificado usando o webroot (exemplo):

certbot certonly --webroot --webroot-path /usr/share/nginx/html --agree-tos -m [email protected] -d cloud.hakase-labs.io

Substitua o e‑mail e o domínio pelo seu.

Os certificados serão gerados em /etc/letsencrypt/live/cloud.hakase-labs.io/. Verifique:

ls -lah /etc/letsencrypt/live/cloud.hakase-labs.io/

Notas de renovação: o certbot instala um timer/systemd unit para renovação automática. Verifique com systemctl list-timers e agende testes com certbot renew --dry-run.

Passo 6 - Baixar e instalar Nextcloud

Instale unzip e baixe o pacote Nextcloud 17:

sudo dnf install unzip
cd /var/www/
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.2.zip
unzip nextcloud-17.0.2.zip

Crie a pasta de dados e ajuste proprietário:

mkdir -p /var/www/nextcloud/data/
sudo chown -R nginx:nginx /var/www/nextcloud

Imagem: download do Nextcloud e conteúdo da pasta

Dica: para segurança, coloque o diretório data fora do webroot (ex.: /srv/nextcloud-data) e aponte a instalação para ele no instalador web para evitar servir arquivos diretamente.

Passo 7 - Configurar Virtual Host Nginx para Nextcloud

Crie /etc/nginx/conf.d/nextcloud.conf e cole a configuração abaixo (altere server_name e caminhos SSL conforme o seu ambiente):

upstream php-handler {  
 #server 127.0.0.1:9000;  
 server unix:/run/php-fpm/www.sock;  
}  
  
server {  
 listen 80;  
 listen [::]:80;  
 server_name cloud.hakase-labs.io;  
 # enforce https  
 return 301 https://$server_name:443$request_uri;  
}  
  
server {  
 listen 443 ssl http2;  
 listen [::]:443 ssl http2;  
 server_name cloud.hakase-labs.io;  
  
 # Use Mozilla's guidelines for SSL/TLS settings  
 # https://mozilla.github.io/server-side-tls/ssl-config-generator/  
 # NOTE: some settings below might be redundant  
 ssl_certificate /etc/ssl/nginx/fullchain.pem;  
 ssl_certificate_key /etc/ssl/nginx/privkey.pem;  
  
 # Add headers to serve security related headers  
 # Before enabling Strict-Transport-Security headers please read into this  
 # topic first.  
 #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;  
 #  
 # WARNING: Only add the preload option once you read about  
 # the consequences in https://hstspreload.org/. This option  
 # will add the domain to a hardcoded list that is shipped  
 # in all major browsers and getting removed from this list  
 # could take several months.  
 add_header Referrer-Policy "no-referrer" always;  
 add_header X-Content-Type-Options "nosniff" always;  
 add_header X-Download-Options "noopen" always;  
 add_header X-Frame-Options "SAMEORIGIN" always;  
 add_header X-Permitted-Cross-Domain-Policies "none" always;  
 add_header X-Robots-Tag "none" always;  
 add_header X-XSS-Protection "1; mode=block" always;  
  
 # Remove X-Powered-By, which is an information leak  
 fastcgi_hide_header X-Powered-By;  
  
 # Path to the root of your installation  
 root /var/www/nextcloud;  
  
 location = /robots.txt {  
 allow all;  
 log_not_found off;  
 access_log off;  
 }  
  
 # The following 2 rules are only needed for the user_webfinger app.  
 # Uncomment it if you're planning to use this app.  
 #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;  
 #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;  
  
 # The following rule is only needed for the Social app.  
 # Uncomment it if you're planning to use this app.  
 #rewrite ^/.well-known/webfinger /public.php?service=webfinger last;  
  
 location = /.well-known/carddav {  
 return 301 $scheme://$host:$server_port/remote.php/dav;  
 }  
 location = /.well-known/caldav {  
 return 301 $scheme://$host:$server_port/remote.php/dav;  
 }  
  
 # set max upload size  
 client_max_body_size 512M;  
 fastcgi_buffers 64 4K;  
  
 # Enable gzip but do not remove ETag headers  
 gzip on;  
 gzip_vary on;  
 gzip_comp_level 4;  
 gzip_min_length 256;  
 gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;  
 gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;  
  
 # Uncomment if your server is built with the ngx_pagespeed module  
 # This module is currently not supported.  
 #pagespeed off;  
  
 location / {  
 rewrite ^ /index.php;  
 }  
  
 location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {  
 deny all;  
 }  
 location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {  
 deny all;  
 }  
  
 location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {  
 fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;  
 set $path_info $fastcgi_path_info;  
 try_files $fastcgi_script_name =404;  
 include fastcgi_params;  
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
 fastcgi_param PATH_INFO $path_info;  
 fastcgi_param HTTPS on;  
 # Avoid sending the security headers twice  
 fastcgi_param modHeadersAvailable true;  
 # Enable pretty urls  
 fastcgi_param front_controller_active true;  
 fastcgi_pass php-handler;  
 fastcgi_intercept_errors on;  
 fastcgi_request_buffering off;  
 }  
  
 location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {  
 try_files $uri/ =404;  
 index index.php;  
 }  
  
 # Adding the cache control header for js, css and map files  
 # Make sure it is BELOW the PHP block  
 location ~ \.(?:css|js|woff2?|svg|gif|map)$ {  
 try_files $uri /index.php$request_uri;  
 add_header Cache-Control "public, max-age=15778463";  
 # Add headers to serve security related headers (It is intended to  
 # have those duplicated to the ones above)  
 # Before enabling Strict-Transport-Security headers please read into  
 # this topic first.  
 #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;  
 #  
 # WARNING: Only add the preload option once you read about  
 # the consequences in https://hstspreload.org/. This option  
 # will add the domain to a hardcoded list that is shipped  
 # in all major browsers and getting removed from this list  
 # could take several months.  
 add_header Referrer-Policy "no-referrer" always;  
 add_header X-Content-Type-Options "nosniff" always;  
 add_header X-Download-Options "noopen" always;  
 add_header X-Frame-Options "SAMEORIGIN" always;  
 add_header X-Permitted-Cross-Domain-Policies "none" always;  
 add_header X-Robots-Tag "none" always;  
 add_header X-XSS-Protection "1; mode=block" always;  
  
 # Optional: Don't log access to assets  
 access_log off;  
 }  
  
 location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {  
 try_files $uri /index.php$request_uri;  
 # Optional: Don't log access to other assets  
 access_log off;  
 }  
}

Teste e reinicie o Nginx:

nginx -t
systemctl restart nginx

Verifique portas abertas:

netstat -plntu

Imagem: configuração do Nginx para Nextcloud

Passo 8 - Ajustar SELinux para Nextcloud

Se o SELinux estiver em modo enforcing, permita que o Nginx/PHP escrevam nas pastas necessárias:

sudo dnf install policycoreutils-python-utils

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/assets(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini'

restorecon -Rv '/var/www/nextcloud/'

Esses comandos aplicam o tipo httpd_sys_rw_content_t às pastas que precisam de permissão de escrita.

Resultado: SELinux permitirá operações de escrita para o processo web sem desativar o modo enforcing.

Passo 9 - Finalizar pela interface web do instalador Nextcloud

Abra no navegador:

https://cloud.hakase-labs.io/

No instalador web informe:

  • Usuário admin e senha
  • Tipo de banco: MySQL/MariaDB
  • Host: localhost
  • Database: nextcloud_db
  • Usuário: nextclouduser
  • Senha: nextcloudpassdb

Clique em Finish Setup e aguarde a instalação. Ao finalizar, você verá o painel do Nextcloud.

Imagem: instalador web do Nextcloud

Imagem: painel Nextcloud após instalação no CentOS 8

Pós‑instalação e boas práticas de segurança

Checklist imediato:

  • Troque senhas temporárias e crie contas administrativas com MFA.
  • Habilite HTTPS forçado (já feito no virtualhost).
  • Configure backups regulares (metadata + data).
  • Automatize renovação de certificados com certbot renew.
  • Revise apps habilitados e habilite apenas os necessários.

Segurança adicional recomendada:

  • Habilite HSTS com cuidado (considere pré‑carregamento apenas após testes).
  • Configure um filtro de upload (antivírus) e monitoramento de logs.
  • Limite o acesso SSH (firewall, chave pública, fail2ban).

Backups (mini‑metodologia)

  • Backup do diretório de dados (ex.: /var/www/nextcloud/data)
  • Backup do diretório config (config.php)
  • Dump do banco de dados (mysqldump)
  • Valide backups com restauração periódica em ambiente de teste

Exemplo de comandos (conceito):

mysqldump -u root -p nextcloud_db > nextcloud_db.sql
rsync -a /var/www/nextcloud/data /backup/location/
tar -czf nextcloud-config-$(date +%F).tgz /var/www/nextcloud/config

Não armazene backups sem criptografia em locais públicos.

Monitoramento e performance (heurísticas)

  • CPU/RAM: acompanhe picos quando muitos clientes sincronizam (increase PHP workers se necessário).
  • I/O: discos rápidos (SSD) para metadata e banco de dados melhoram latência.
  • PHP opcache: ajuste memory_consumption e max_accelerated_files conforme o número de arquivos PHP (já configurado).

Alternativas e quando este guia não se aplica

  • Se preferir Apache, use o pacote httpd + mod_php/PHP‑FPM com configuração distinta.
  • Para alta escala (centenas de usuários) considere usar Redis para locking e cache, e um backend de object storage (S3) para os arquivos.
  • Se você usa um container orchestrator (Kubernetes) siga um deployment baseado em imagens e volumes persistentes.

Problemas comuns e soluções rápidas (troubleshooting)

  • Erro 502 Bad Gateway: verifique se php-fpm está rodando e socket /run/php-fpm/www.sock existe e pertence a nginx.
  • Permissão negada ao acessar data: revise permissões e SELinux (restorecon e semanage).
  • Uploads falhando com 413: verifique client_max_body_size no Nginx e upload_max_filesize/post_max_size no php.ini.
  • Certificado não renovado: execute certbot renew --dry-run e verifique timers/systemd.

Checklist por função (role-based)

Administrador de Sistema:

  • Validar repositórios e versões de PHP
  • Configurar firewall, SELinux e backups
  • Automatizar renovação de certificados

Administrador Nextcloud (aplicação):

  • Criar usuários/grupos e aplicar políticas de senha
  • Gerenciar apps e permissões
  • Monitorar uso de armazenamento

Usuário final:

  • Instalar cliente Nextcloud (Windows/Mac/Linux/Android/iOS)
  • Configurar pastas a sincronizar e usar MFA

Critérios de aceitação

  • A página HTTPS do Nextcloud abre sem erros de certificado.
  • O instalador web conclui a criação da instância Nextcloud.
  • Uploads de arquivos funcionam (testar até o limite configurado).
  • Backups da base e dos dados concluem com sucesso e podem ser restaurados em teste.

Migração e compatibilidade

  • Upgrades de Nextcloud devem seguir a documentação oficial; sempre faça backup antes.
  • PHP 7.3 é compatível com Nextcloud 17; versões mais novas do Nextcloud podem exigir PHP 7.4+.
  • Se migrar banco de dados entre hosts, use mysqldump e verifique collation/charset.

Segurança e privacidade

  • Revise as configurações de compartilhamento público e políticas de retenção.
  • Habilite criptografia de disco/partição se armazenar dados sensíveis.
  • Se lidar com dados pessoais de residentes UE, avalie conformidade com GDPR (registro de tratamento, avaliações de risco, contratos de processamento com provedores terceiros se existirem).

Testes básicos/aceitação

  • Login como admin e criação de conta de usuário testada.
  • Upload e download de arquivos pequenos e grandes.
  • Sincronização com cliente de desktop.
  • Execução de occ commands para verificar integridade (ex.: php occ maintenance:mode --on).

Resumo final

Você instalou e configurou Nextcloud 17 no CentOS 8 com Nginx, PHP‑FPM 7.3 e MariaDB, gerou certificados Let’s Encrypt, ajustou SELinux e criou um virtualhost seguro. Agora resta validar backups, monitorar o comportamento e aplicar políticas de segurança e manutenção regulares.

Referências

FAQ

  1. Posso usar Apache em vez de Nginx?
    Sim. Apache é totalmente suportado pelo Nextcloud; a configuração de virtual host, PHP‑FPM e permissões será diferente.

  2. Como renovar o certificado Let’s Encrypt automaticamente?
    O certbot geralmente instala timers/systemd para renovar automaticamente. Teste com certbot renew --dry-run.

  3. Onde colocar a pasta data de forma segura?
    É recomendável mover a pasta data para fora do webroot (ex.: /srv/nextcloud-data) e referenciar esse caminho no instalador.

Autor
Edição

Materiais semelhantes

Mudar região da Steam com segurança
Jogos

Mudar região da Steam com segurança

Escolha Plataforma de Vídeo: DRM e Segurança
Vídeo

Escolha Plataforma de Vídeo: DRM e Segurança

Widgets no iPhone: adicionar, personalizar e organizar
Tutoriais

Widgets no iPhone: adicionar, personalizar e organizar

Desativar busca online no Unity Dash
Ubuntu

Desativar busca online no Unity Dash

Aria no Opera One: guia prático e como testar
Tecnologia

Aria no Opera One: guia prático e como testar

Compartilhar jogos no Steam — Guia prático
Tutoriais

Compartilhar jogos no Steam — Guia prático