Guida alle tecnologie

Installare Moodle 3.2 su CentOS 7 con Nginx, PHP-FPM 7.0 e MariaDB

9 min read Linux Aggiornato 08 Oct 2025
Installare Moodle 3.2 su CentOS 7 con Nginx
Installare Moodle 3.2 su CentOS 7 con Nginx

Questo tutorial spiega passo passo come installare Moodle 3.2 su CentOS 7 usando Nginx come web server, PHP-FPM 7.0 e MariaDB come database. Include comandi pratici, configurazioni di SELinux e firewalld, creazione del virtual host HTTPS (self-signed o Let’s Encrypt), suggerimenti di sicurezza, test e procedure di backup e manutenzione.

Important: scegli password sicure per il database e per l’account amministratore di Moodle. Questo tutorial usa esempi didattici che devono essere adattati per produzione.

Per chi è questa guida

  • Amministratori di sistema che devono installare Moodle su server CentOS 7.
  • Docenti che vogliono comprendere l’architettura server di Moodle.
  • Team DevOps che cercano una checklist completa per rollout e hardening.

Varianti di intento correlate

  • Installare Moodle su CentOS 7 con Apache e MariaDB
  • Moodle con Nginx e PHP-FPM in produzione
  • Configurare PHP 7 per Moodle
  • Hardening di Moodle su Linux
  • Backup e ripristino di Moodle

Sommario dell’articolo

  1. Requisiti e terminologia essenziale
  2. Installazione e configurazione di Nginx
  3. Installazione e configurazione di PHP-FPM 7.0
  4. Installazione e configurazione di MariaDB
  5. Download e preparazione di Moodle
  6. Virtual host HTTPS e certificati
  7. SELinux e firewalld
  8. Installazione via web installer
  9. Test e verifica
  10. Sicurezza e hardening
  11. Backup, monitoraggio e manutenzione
  12. Troubleshooting e casi limite
  13. Checklist per ruoli
  14. FAQ e risorse

1. Requisiti e terminologia essenziale

Prerequisiti minimi

  • Server CentOS 7 aggiornato
  • Accesso root o sudo
  • Connettività per scaricare pacchetti e git
  • Nome DNS o indirizzo IP pubblico (per HTTPS usare un dominio valido)

Definizioni rapide

  • Moodle: piattaforma LMS open source scritta in PHP.
  • Nginx: web server leggero e reverse proxy.
  • PHP-FPM: FastCGI Process Manager per PHP.
  • MariaDB: fork di MySQL, usato come database per Moodle.

Nota sulla versione

Questa guida è orientata a Moodle 3.2 e PHP 7.0 come nell’esempio originale. Molte procedure valgono anche per versioni successive, ma verificare sempre i requisiti ufficiali di Moodle prima dell’aggiornamento.

2. Installare Nginx

Nginx non è incluso nel repository base di CentOS 7, quindi usiamo EPEL.

Installare EPEL e Nginx:

yum -y install epel-release
yum -y install nginx

Avviare e abilitare Nginx:

systemctl start nginx
systemctl enable nginx

Verificare porte aperte (netstat è comodo; installare net-tools se necessario):

netstat -plntu
yum -y install net-tools

Schermata di esempio: stato di Nginx dopo l'installazione

Note pratiche

  • Se netstat non è disponibile, usare ss -tulpen.
  • Verificare che SELinux o firewall non blocchino la porta 80/443.

3. Installare e configurare PHP-FPM 7.0

Moodle 3.2 è compatibile con PHP 7.0; su CentOS 7 spesso serve un repository esterno (es. webtatic).

Aggiungere il repository webtatic:

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

Installare PHP-FPM 7.0 e le estensioni richieste da Moodle:

yum install -y graphviz aspell php70w-fpm php70w-cli php70w-pspell php70w-curl php70w-gd php70w-intl php70w-mysql php70w-xml php70w-xmlrpc php70w-ldap php70w-zip php70w-json php70w-opcache php70w-readline php70w-mbstring php70w-soap

Modifiche chiave a /etc/php.ini

  • Impostare cgi.fix_pathinfo=0 per sicurezza.
  • Controllare memory_limit, max_execution_time e post_max_size secondo il carico previsto.
vim /etc/php.ini
# Cerca e modifica:
cgi.fix_pathinfo=0

Configurare php-fpm pool (www.conf):

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

Cambi rilevanti:

user = nginx
group = nginx
listen = /run/php-fpm/php-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
security.limit_extensions = .php
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Creare directory per sessioni PHP e impostare permessi:

mkdir -p /var/lib/php/session/
chown -R nginx:nginx /var/lib/php/session/
chown -R nginx:nginx /run/php-fpm/

Avviare PHP-FPM:

systemctl start php-fpm
systemctl enable php-fpm

Verificare socket:

netstat -lx | grep php-fpm.sock

Suggerimenti di tuning PHP-FPM

  • Per siti con molti utenti contemporanei regolare pm = dynamic/static, pm.max_children, pm.start_servers.
  • Abilitare opcache e verificare configuratione opcache.memory_consumption.

4. Installare e configurare MariaDB

Installare MariaDB:

yum -y install mariadb-server mariadb

Aggiungere impostazioni InnoDB in /etc/my.cnf (se non già presenti):

vim /etc/my.cnf
# Alla fine della sezione [mysqld]
default_storage_engine = innodb
innodb_file_per_table = 1
innodb_file_format = Barracuda

Avviare MariaDB:

systemctl start mariadb
systemctl enable mariadb

Eseguire mysql_secure_installation per impostare la password di root e rimuovere account pericolosi:

mysql_secure_installation

Creare database e utente per Moodle (usare password sicura):

mysql -u root -p
CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';
GRANT ALL PRIVILEGES ON moodledb.* TO 'moodleuser'@'localhost';
FLUSH PRIVILEGES;

Schermata: creazione database per Moodle

Security note

  • Non usare password di esempio in produzione. Considerare autenticazione tramite socket per accesso locale sicuro.
  • Valutare cifratura a riposo e backup cifrati per dati sensibili.

5. Scaricare e preparare Moodle

Installare git e clonare repository ufficiale:

yum -y install git
mkdir -p /var/www/
cd /var/www/
git clone https://github.com/moodle/moodle.git

Selezionare ramo stabile per Moodle 3.2:

cd /var/www/moodle
git branch -a
git checkout MOODLE_32_STABLE
git status

Creare la directory moodledata e impostare permessi corretti:

mkdir -p /var/moodledata
chown -R nginx:nginx /var/moodledata
chmod 770 /var/moodledata
chown -R nginx:nginx /var/www/moodle
chmod 755 /var/www/moodle

Nota: evitare 777 in produzione. Privilegi più restrittivi riducono il rischio.

Schermata: repository Moodle scaricato

6. Configurare HTTPS e virtual host Nginx

Creare certificato self-signed (esempio) o usare Let’s Encrypt per produzione.

Self-signed:

mkdir -p /etc/nginx/ssl/
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/moodle.crt -keyout /etc/nginx/ssl/moodle.key
chmod 600 /etc/nginx/ssl/moodle.key

Schermata: generazione certificato self-signed

Creare file di configurazione Nginx in /etc/nginx/conf.d/moodle.conf:

cd /etc/nginx/
vim conf.d/moodle.conf

Esempio di configurazione Nginx (adattare server_name):

# PHP Upstream Handler
upstream php-handler {
    server unix:/run/php-fpm/php-fpm.sock;
}

server {
    listen 80;
    server_name moodle.hakase-labs.com;
    return 301 https://$server_name$request_uri;
}

server {
    server_name moodle.hakase-labs.com;
    listen *:443 ssl http2;
    listen [::]:443 ssl http2;

    ssl on;
    ssl_certificate /etc/nginx/ssl/moodle.crt;
    ssl_certificate_key /etc/nginx/ssl/moodle.key;

    root /var/www/moodle;
    rewrite ^/(.*\.php)(/)(.*)$ /$1?file=/$3 last;

    location ^~ / {
        try_files $uri $uri/ /index.php?q=$request_uri;
        index index.php index.html index.htm;

        location ~ \.php$ {
            include fastcgi.conf;
            fastcgi_pass php-handler;
        }
    }
}

Verificare la configurazione e riavviare Nginx:

nginx -t
systemctl restart nginx

Se si desidera usare Let’s Encrypt con certbot (consigliato per produzione):

yum -y install certbot-nginx
certbot --nginx -d moodle.tuodominio.example

Consigli SSL

  • Preferire TLS 1.2+ e suite moderne; aggiornare la direttiva ssl_protocols.
  • Abilitare HSTS e valutare OCSP stapling.

7. Configurare SELinux e Firewalld

Controllare stato SELinux:

sestatus

Se SELinux è Enforcing, impostare contesti coerenti:

yum -y install policycoreutils-python
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/moodle(/.*)?'
restorecon -Rv '/var/www/moodle/'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata(/.*)?'
restorecon -Rv '/var/moodledata/'

Installare e configurare firewalld:

yum -y install firewalld
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
firewall-cmd --list-all

Schermata: controllo SELinux

Note SELinux e permessi

  • Se riscontri 403 o errori di scrittura, verifica audit log (/var/log/audit/audit.log) e usa audit2allow per diagnosticare.
  • Evita di disabilitare SELinux in produzione; correggi i contesti.

8. Installare Moodle tramite interfaccia web

Aprire il browser e puntare al dominio configurato (nell’esempio moodle.hakase-labs.com). Seguire il setup web:

  • Scegli lingua
  • Conferma percorso web root (/var/www/moodle) e moodledata (/var/moodledata)
  • Seleziona driver database MySQL (MariaDB)
  • Inserire credenziali DB e socket/porta: host localhost, nome moodledb, utente moodleuser, password, porta 3306, socket /var/lib/mysql/mysql.sock

Schermata: selezione lingua

Verificare che tutte le estensioni PHP richieste risultino OK. Compilare i dettagli admin e la configurazione della homepage.

Schermata: configurazione directory e URL di Moodle

Se l’installazione si completa senza errori vedrai la dashboard amministrativa.

Schermata: dashboard amministratore

9. Test e verifica

Pagine chiave da testare:

Controlli funzionali

  • Login con utente admin
  • Creazione corso di prova e upload file
  • Invio attività di prova e download

Schermata: homepage Moodle

Schermata: pagina login Moodle

10. Sicurezza e hardening

Checklist di hardening rapido

  • Usare HTTPS con certificato valido (Let’s Encrypt o commerciale).
  • Limitare accesso SSH con chiavi e change porta se necessario.
  • Applicare aggiornamenti regolari OS e PHP/Moodle.
  • Disabilitare plugin non necessari di Moodle.
  • Impostare permessi file stretti (non 777).
  • Effettuare backup regolari del DB e della directory moodledata.

Configurazioni consigliate

  • Impostare Strict-Transport-Security header:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
  • Limitare upload file a tipi consentiti e dimensione massima.
  • Abilitare autenticazione a due fattori per gli account amministrativi tramite plugin ufficiale.

Privacy e GDPR

  • Informare gli utenti su raccolta dati e utilizzo dei cookie.
  • Se memorizzi dati sensibili, considera cifratura e minimizzazione dei dati.
  • Fornire meccanismi per esportare o rimuovere dati utente su richiesta.

11. Backup, monitoraggio e manutenzione

Strategia di backup minima

  • Backup giornaliero del database (mysqldump) con conservazione rotativa.
  • Backup della directory moodledata e della directory del codice (var/www/moodle).
  • Conservare backup in location offsite e monitorarne l’integrità.

Esempio semplice di dump giornaliero:

#!/bin/bash
BACKUP_DIR=/backup/moodle
mkdir -p $BACKUP_DIR/$(date +%F)
mysqldump -u root -p'ROOTPASS' moodledb > $BACKUP_DIR/$(date +%F)/moodledb.sql
rsync -a /var/moodledata $BACKUP_DIR/$(date +%F)/

Monitoraggio

  • Abilitare monitor per processi PHP-FPM, Nginx, MariaDB.
  • Utilizzare strumenti come Prometheus + Grafana o Zabbix per metriche.
  • Controllare log di errore Nginx (/var/log/nginx/error.log) e log PHP-FPM.

Manutenzione

  • Programmare manutenzione per aggiornamenti di Moodle (usare modalità manutenzione in Moodle admin).
  • Testare patch in staging prima di applicarle in produzione.

12. Troubleshooting e casi limite

Errore 403 dopo aver impostato permessi

  • Verificare SELinux con getenforce e cercare voci in audit.log. Applicare restorecon e semanage fcontext come mostrato.

Errori PHP o mancanza estensioni

  • Controllare php -v e php -m, e i log PHP-FPM.
  • Installare estensioni mancanti (gd, intl, mbstring, xml, xmlrpc ecc.).

Problemi con socket PHP-FPM

  • Se fastcgi_pass non trova il socket, controllare che /run/php-fpm/php-fpm.sock esista e appartenga a nginx: nginx.
  • In alternativa configurare PHP-FPM per ascoltare su TCP 127.0.0.1:9000 e aggiornare fastcgi_pass.

Errori DB: accesso negato

  • Controllare utente DB, host e password. Verificare che l’utente sia definito per ‘localhost’ o ‘%’ secondo necessità.

Performance degradata

  • Abilitare opcache e regolare parametri PHP-FPM.
  • Usare caching lato Moodle (Redis/Memcached) per sessioni e cache delle pagine.

13. Checklist per ruoli

Checklist: Amministratore di sistema

  • Aggiornare CentOS e pacchetti
  • Configurare firewall e SELinux
  • Implementare certificati HTTPS
  • Gestire backup e disaster recovery
  • Monitoraggio e alerting

Checklist: Amministratore Moodle

  • Configurare categorie e corsi di prova
  • Installare plugin necessari e verificarne sicurezza
  • Configurare autenticazione esterna (LDAP/SAML) se necessario
  • Testare ruoli e permessi

Checklist: Docente

  • Creare corso, attività e valutazioni
  • Caricare materiali e verificare accessibilità
  • Testare flussi di consegna compiti

14. Mini metodologia di rilascio e rollback

Fasi di rilascio

  1. Ambiente di staging con mirror identico alla produzione
  2. Test funzionali e di carico su staging
  3. Backup completo prima del deploy
  4. Modalità manutenzione su produzione e deploy
  5. Verifica post-deploy e disattivare modalità manutenzione

Rollback rapido

  • Ripristinare dump DB precedente e sincronizzare moodledata dalla copia di backup.
  • Documentare tempi RTO/RPO e testare procedure di restore regolarmente.

15. Domande frequenti

Quali sono i permessi corretti per moodledata?

Impostare proprietario nginx:nginx e permessi restrittivi (es. 770) evitando 777.

Posso usare Apache invece di Nginx?

Sì. Le istruzioni variano per il virtual host e la configurazione FastCGI; Apache con mod_php o mpm_event + PHP-FPM è supportato.

Come aggiornare Moodle in produzione?

Eseguire backup DB e moodledata, testare l’aggiornamento in staging, applicarlo in manutenzione e verificare notifiche di aggiornamento plugin.

16. Risorse utili

17. Riepilogo

  • Questa guida spiega come installare Moodle 3.2 su CentOS 7 con Nginx, PHP-FPM 7.0 e MariaDB, coprendo installazione, HTTPS, SELinux, firewall, test, sicurezza, backup e troubleshooting.
  • Adattare le password e i permessi per ambienti di produzione e pianificare backup e monitoraggio.

Note finali

  • Non usare password d’esempio in ambienti reali.
  • Testare ogni cambiamento su staging e documentare la configurazione per futuri aggiornamenti.

FAQ

  • Dove modifico la configurazione della cron di Moodle? Moodle richiede una cron periodica; configurare un job cron (es. ogni minuto) che esegue /usr/bin/php /var/www/moodle/admin/cli/cron.php con utente nginx o www-data a seconda della configurazione.

  • È necessario Redis o Memcached? Per siti con molti utenti concorrenti, usare Redis o Memcached per sessioni e cache migliora le prestazioni.

  • Posso usare SELinux permissive? SELinux permissive aiuta il debug, ma non è raccomandato in produzione; meglio correggere i contesti.

Autore
Redazione

Materiali simili

Limitare le autorizzazioni delle app Android
Sicurezza

Limitare le autorizzazioni delle app Android

Installare Chef su Ubuntu 17.04
DevOps

Installare Chef su Ubuntu 17.04

Correggere l'errore 500 di Microsoft Teams
Supporto tecnico

Correggere l'errore 500 di Microsoft Teams

Trovare un broker online affidabile in 6 passaggi
Finanza

Trovare un broker online affidabile in 6 passaggi

Testo colorato su Discord: guida pratica
Discord

Testo colorato su Discord: guida pratica

Installare Moodle 3.2 su CentOS 7 con Nginx
Linux

Installare Moodle 3.2 su CentOS 7 con Nginx