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.
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).
Abra portas HTTP e HTTPS no firewalld:
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload
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
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
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
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.
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
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
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:
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.
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
- Documentação oficial Nextcloud: https://docs.nextcloud.com/
FAQ
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.Como renovar o certificado Let’s Encrypt automaticamente?
O certbot geralmente instala timers/systemd para renovar automaticamente. Teste comcertbot renew --dry-run
.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.
Materiais semelhantes

Mudar região da Steam com segurança

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

Widgets no iPhone: adicionar, personalizar e organizar

Desativar busca online no Unity Dash

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