Guida alle tecnologie

Installare Nextcloud 17 su CentOS 8 con Nginx, PHP‑FPM 7.3 e MariaDB

7 min read Server Aggiornato 21 Oct 2025
Installare Nextcloud 17 su CentOS 8 con Nginx e MariaDB
Installare Nextcloud 17 su CentOS 8 con Nginx e MariaDB

Questo tutorial mostra come installare Nextcloud 17 su un server CentOS 8 usando Nginx, PHP‑FPM 7.3 e MariaDB, proteggendo il sito con certificati Let’s Encrypt. Include configurazione di PHP, SELinux, virtual host Nginx, e suggerimenti di sicurezza e manutenzione.

Importante: requisiti minimi suggeriti — 2 GB di RAM, 25 GB spazio libero, 2 CPU. Cambia i nomi di dominio e le credenziali negli esempi prima di applicare i comandi.

Sommario rapido

  • Installare Nginx e aprire le porte HTTP/HTTPS
  • Installare PHP‑FPM 7.3 dal repository REMI e configurare php.ini e opcache
  • Installare e proteggere MariaDB, creare database e utente Nextcloud
  • Ottenere certificati SSL con certbot (Let’s Encrypt)
  • Scaricare Nextcloud 17, impostare permessi e data directory
  • Configurare il virtual host Nginx per Nextcloud
  • Applicare le regole SELinux e verificare i servizi
  • Eseguire l’installazione tramite web installer

Termini chiave (1 linea ciascuno)

  • Nextcloud: software open source per sincronizzazione file e condivisione.
  • PHP‑FPM: FastCGI Process Manager per eseguire PHP con Nginx.
  • MariaDB: fork compatibile di MySQL usato come database.
  • certbot: client per ottenere certificati TLS/SSL da Let’s Encrypt.

Prerequisiti

  • Server CentOS 8 aggiornato
  • Accesso root o sudo
  • Dominio DNS puntato al server (es. cloud.tuodominio.example)
  • Requisiti hardware consigliati: 2 GB RAM, 25 GB spazio, 2 CPU

Schermata introduttiva di Nextcloud

Cosa faremo

  • Installare Nginx
  • Installare PHP‑FPM 7.3 e moduli necessari
  • Configurare PHP‑FPM e opcache
  • Installare e configurare MariaDB
  • Generare certificato SSL con Let’s Encrypt
  • Scaricare e installare Nextcloud 17
  • Configurare Nginx per Nextcloud
  • Configurare SELinux
  • Completare l’installazione via web

Contesto e scelte tecniche: perché questa combinazione

Nginx + PHP‑FPM è una scelta performante e comune per Nextcloud. PHP 7.3 è compatibile con Nextcloud 17; REMI fornisce pacchetti aggiornati per CentOS. MariaDB è usata qui per semplicità, ma PostgreSQL è un’alternativa supportata.


Step 1 - Installare Nginx

Installiamo Nginx dall’AppStream e apriamo le porte sul firewall (firewalld).

Esegui:

sudo dnf install nginx

Avvia e abilita il servizio all’avvio:

systemctl start nginx
systemctl enable nginx

Verifica lo stato:

systemctl status nginx

Dovresti vedere nginx attivo e in esecuzione.

Avvio di Nginx con systemd

Aggiungi i servizi HTTP/HTTPS al firewall:

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

Configurare il firewall per HTTP e HTTPS


Step 2 - Installare PHP‑FPM 7.3

Nextcloud 17 richiede una versione moderna di PHP. Useremo PHP 7.3 dai repository REMI.

Abilita PowerTools, 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

Controlla i repository disponibili:

dnf repolist

Abilita il modulo PHP 7.3 di REMI:

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

Aggiungere il repository Remi su CentOS 8

Installa PHP e i moduli richiesti:

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

Ora PHP e PHP‑FPM 7.3 sono installati.


Step 3 - Configurare PHP‑FPM 7.3

Modifichiamo le impostazioni consigliate per Nextcloud.

Apri php.ini:

vim /etc/php.ini

Cambia/discommenta:

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

Nota: imposta date.timezone sul tuo fuso orario (es. Europe/Rome).

Configura opcache:

vim /etc/php.d/10-opcache.ini

Imposta:

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

Configura PHP‑FPM pool:

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

Modifica l’utente e il gruppo in nginx:

user = nginx
group = nginx

Imposta l’ascolto su socket:

listen = /run/php-fpm/www.sock

Discommenta le variabili d’ambiente e la cache file opcache:

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

Crea directory per sessioni/opcache e imposta i permessi:

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

Abilita e avvia php-fpm:

systemctl enable php-fpm
systemctl start php-fpm

Verifica socket e stato:

netstat -pl | grep php
systemctl status php-fpm

Configurare PHP 7.3

Verifica PHP-FPM e socket


Step 4 - Installare e configurare MariaDB

Installa MariaDB:

sudo dnf install mariadb mariadb-server

Avvia e abilita:

systemctl start mariadb
systemctl enable mariadb

Avviare e configurare MariaDB

Esegui lo script di sicurezza:

mysql_secure_installation

Rispondi Y alle richieste per impostare la password root, rimuovere utenti anonimi, rimuovere database di test e ricaricare le tabelle dei privilegi.

Accedi al prompt MySQL:

mysql -u root -p
TYPE YOUR ROOT PASSWORD

Crea database e utente per Nextcloud (sostituisci password e nomi nelle installazioni reali):

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;

Creare il database per Nextcloud


Step 5 - Generare certificato SSL Letsencrypt

Installa certbot e richiedi il certificato usando il webroot di Nginx. Sostituisci dominio e email con i tuoi.

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

I certificati saranno sotto /etc/letsencrypt/live/tuo-dominio/

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

Step 6 - Scaricare e installare Nextcloud 17

Installa unzip e scarica Nextcloud:

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

Crea la directory dati e imposta permessi:

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

Download Nextcloud


Step 7 - Configurare Nginx per Nextcloud

Crea un virtual host in /etc/nginx/conf.d/nextcloud.conf e sostituisci il dominio e i percorsi dei certificati con i tuoi:

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
 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;
 }
 
 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;
 
 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;
 }
 
 location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
 try_files $uri /index.php$request_uri;
 add_header Cache-Control "public, max-age=15778463";
 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;
 access_log off;
 }
 
 location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
 try_files $uri /index.php$request_uri;
 access_log off;
 }
}

Test e riavvia nginx:

nginx -t
systemctl restart nginx

Controlla le porte in ascolto:

netstat -plntu

Configurare Nginx per Nextcloud


Step 8 - Configurare SELinux per Nextcloud

Se SELinux è in modalità enforcing, applica i contesti corretti alle directory usate da Nextcloud.

Installa gli strumenti SELinux:

sudo dnf install policycoreutils-python-utils

Esegui i seguenti comandi come root:

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/'

Questo applicherà i contesti necessari per consentire a Nginx/PHP di scrivere nelle directory richieste.


Step 9 - Completare l’installazione via web

Apri il browser su:

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

Compila l’utente amministratore, scegli MySQL/MariaDB e inserisci i parametri del database creato in precedenza. Clicca Finish Setup.

Installazione web di Nextcloud

Al termine vedrai la dashboard di Nextcloud.

Nextcloud su CentOS 8


Controlli post-installazione consigliati

  • Verifica i log di Nginx (/var/log/nginx/error.log) e PHP (/var/log/php-fpm/error.log)
  • Controlla lo stato dei servizi: nginx, php-fpm, mariadb
  • Testa l’accesso HTTPS e la catena dei certificati
  • Verifica i permessi delle cartelle /var/www/nextcloud e /var/www/nextcloud/data

Hardening e suggerimenti di sicurezza

  • Abilita HSTS solo dopo aver verificato il dominio e il funzionamento HTTPS: add_header Strict-Transport-Security “max-age=15768000; includeSubDomains; preload;” always;
  • Disabilita l’accesso SSH con password (usa chiavi SSH)
  • Esegui backup regolari dei dati e del database (dump e copia della cartella data)
  • Usa firewall e limitazioni di accesso (fail2ban per proteggere admin/login)
  • Mantieni il sistema aggiornato e monitora gli avvisi di sicurezza di Nextcloud

Alternative e scenari diversi

  • Apache invece di Nginx: Apache + mod_php o Apache + PHP‑FPM è supportato. La configurazione VirtualHost differisce ma il principio è identico.
  • PostgreSQL: supportato da Nextcloud; consigliato in ambienti con carichi complessi o se già usi PostgreSQL.
  • PHP 7.4/8.x: versioni più nuove possono essere compatibili con Nextcloud recenti, ma verifica i requisiti specifici della release.
  • Container: eseguire Nextcloud in Docker o Podman semplifica isolamento e aggiornamenti.

Quando questa guida potrebbe non funzionare (controesempi)

  • CentOS 8 obsoleto o repository rimossi: se il repository REMI/EPEL non è disponibile, l’installazione fallirà.
  • Dominio non risolto o porte bloccate: certbot e accesso web falliranno.
  • SELinux in modalità permissiva non ripristina automaticamente i contesti: alcune scritture potrebbero comunque essere negate.

Checklist di ruolo (operazioni rapide)

Admin di sistema:

  • Verificare servizi (nginx, php-fpm, mariadb)
  • Controllare aggiornamenti di sistema e sicurezza
  • Pianificare backup regolari

DevOps:

  • Automatizzare deploy (ansible/terraform)
  • Configurare monitoraggio e alerting
  • Implementare CI per aggiornamenti e test

Utente finale:

  • Configurare client desktop/mobile Nextcloud
  • Abilitare autenticazione a due fattori nel profilo

Metodo rapido di aggiornamento (mini‑metodologia)

  1. Metti Nextcloud in modalità maintenance: occ maintenance:mode –on
  2. Esegui backup DB e dati
  3. Aggiorna pacchetti PHP/Nginx/OS
  4. Scarica nuova release Nextcloud e testa in staging
  5. Esegui update tramite occ o web updater
  6. Disattiva maintenance: occ maintenance:mode –off

Esempi di test/criteri di accettazione

  • Accesso alla pagina di login via HTTPS restituisce 200 e certificato valido
  • Upload di un file singolo >100 MB funziona (se client_max_body_size adeguato)
  • Creazione di un nuovo utente e login funzionano
  • I backup del DB si completano correttamente e possono essere ripristinati

Migrazione da ownCloud o versioni precedenti

  • Segui le note ufficiali di upgrade Nextcloud: test in staging, backup completi, verifica compatibilità app.
  • Alcune app di terze parti potrebbero non essere compatibili e richiedere aggiornamenti o sostituzioni.

Privacy e note GDPR (uso dei dati)

  • Nextcloud memorizza file e metadati degli utenti sul server: assicurati che il server sia sotto il tuo controllo e ubicato in un’area giuridica conforme alle tue policy
  • Mantieni log accessibili solo al personale autorizzato
  • Fornisci informazioni di contatto e policy privacy agli utenti se gestisci un’istanza multiutente pubblica

Manutenzione e backup (playbook sintetico)

  • Backup giornaliero: dump MySQL e sincronizzazione della cartella data verso storage esterno
  • Backup settimanale: snapshot completo del filesystem
  • Test mensile di ripristino: verifica che i backup siano ripristinabili

FAQ

Posso usare PostgreSQL invece di MariaDB?

Sì. Nextcloud supporta PostgreSQL; la procedura per creare database/utente è simile.

Come rinnovare automaticamente i certificati Let’s Encrypt?

Usa certbot renew e configura un cron job o systemd timer per eseguire il rinnovo automatico (es. quotidiano).

Devo usare SELinux?

SELinux aumenta la sicurezza. Se non vuoi configurarlo, puoi impostarlo in permissive ma perdi alcune garanzie di isolamento.


Riferimenti


Riassunto finale

Hai installato Nextcloud 17 su CentOS 8 con Nginx, PHP‑FPM 7.3, e MariaDB, protetto con Let’s Encrypt. Dopo l’installazione, applica hardening, backup regolari e un piano di aggiornamento per mantenere l’istanza sicura e affidabile.

Autore
Redazione

Materiali simili

Apple Music non funziona in iOS 17 — come risolvere
Guide.

Apple Music non funziona in iOS 17 — come risolvere

Installare Tripwire su Ubuntu 16.04
Sicurezza

Installare Tripwire su Ubuntu 16.04

Split View su Mac: guida pratica
Productivity

Split View su Mac: guida pratica

Aggiungere immagini come punti elenco in Word
Guide Word

Aggiungere immagini come punti elenco in Word

Cancellare la cache su iPhone senza eliminare le app
Guide tecniche

Cancellare la cache su iPhone senza eliminare le app

Come pulire una Sony PSP: guida completa
Guide hardware

Come pulire una Sony PSP: guida completa