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

Installare e usare Podman su Debian 11
DevOps

Installare e usare Podman su Debian 11

Guida rapida a apt-pinning su Debian
Linux

Guida rapida a apt-pinning su Debian

Forzare FSR 4 con OptiScaler: guida completa
Guide.

Forzare FSR 4 con OptiScaler: guida completa

Dansguardian + Squid NTLM su Debian Etch
Rete

Dansguardian + Squid NTLM su Debian Etch

Riparare errore installazione SD su Android
Android

Riparare errore installazione SD su Android

Cartelle di rete con KNetAttach e remote:/
Linux

Cartelle di rete con KNetAttach e remote:/