Ricerca nel sito web

Come installare la piattaforma di eLearning Moodle su Rocky Linux 8


Su questa pagina

  1. Prerequisiti
  2. Passaggio 1: configurazione del firewall
  3. Passaggio 2 - Installa Git
  4. Passaggio 3 - Installa e configura PHP
  5. Passaggio 4 - Installa e configura MySQL
  6. Passaggio 5 - Installa Nginx
  7. Passaggio 6 - Installa Moodle
  8. Passaggio 7 - Configura Moodle
  9. Passaggio 8 - Installa SSL
  10. Passaggio 9 - Configura Nginx
  11. Passaggio 10 - Configura SELinux
  12. Passaggio 11 - Completamento dell'installazione di Moodle
  13. Conclusione

Moodle è un Learning Management System (LMS) online gratuito e open source. Consente agli educatori di creare un sito Web completamente funzionale per corsi didattici completo di un'esperienza di classe online. È scritto in PHP. Fornisce un ricco set di funzionalità tra cui wiki, valutazione, invio di compiti, quiz online, forum di discussione e altro ancora.

Questa guida spiega come installare Moodle su un server Rocky Linux 8.

Prerequisiti

  • A server running Rocky Linux 8.

  • A domain name pointing to the server. For our tutorial, we will use the moodle.example.com domain.

  • A non-root user with sudo privileges.

  • Make sure everything is updated.

    $ sudo dnf update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Passaggio 1: configurare il firewall

Il primo passo è configurare il firewall. Rocky Linux utilizza Firewalld Firewall. Controlla lo stato dei firewall.

$ sudo firewall-cmd --state
running

Il firewall funziona con zone diverse e la zona pubblica è quella predefinita che utilizzeremo. Elenca tutti i servizi e le porte attive sul firewall.

$ sudo firewall-cmd --permanent --list-services

Dovrebbe mostrare il seguente output.

cockpit dhcpv6-client ssh

Moodle ha bisogno delle porte HTTP e HTTPS per funzionare. Aprili.

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

Ricarica il firewall per applicare le modifiche.

$ sudo firewall-cmd --reload

Passaggio 2: installa Git

Git è richiesto da Moodle per acquisire i file dell'applicazione. Installa Git.

$ sudo dnf install git

Passo 3 - Installa e configura PHP

Dobbiamo installare PHP 8.0 affinché Moodle funzioni per il nostro tutorial. Il primo passo è prendere il repository Epel.

$ sudo dnf install epel-release

Successivamente, installa il repository Remi.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Controlla i flussi PHP disponibili.

$ dnf module list php -y
Rocky Linux 8 - AppStream
Name                Stream                 Profiles                                 Summary
php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
php                 7.3                    common [d], devel, minimal               PHP scripting language
php                 7.4                    common [d], devel, minimal               PHP scripting language
php                 8.0                    common [d], devel, minimal               PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                Stream                 Profiles                                 Summary
php                 remi-7.2               common [d], devel, minimal               PHP scripting language
php                 remi-7.3               common [d], devel, minimal               PHP scripting language
php                 remi-7.4               common [d], devel, minimal               PHP scripting language
php                 remi-8.0               common [d], devel, minimal               PHP scripting language
php                 remi-8.1               common [d], devel, minimal               PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

La versione predefinita è 7.2. Abilita il repository Remis PHP 8.0.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.0

Installa PHP e le estensioni necessarie richieste da Moodle.

$ sudo dnf install graphviz aspell ghostscript clamav php-fpm php-iconv php-curl php-mysqlnd php-cli php-mbstring php-xmlrpc php-soap php-zip php-gd php-xml php-intl php-json php-sodium php-opcache

Verificare l'installazione.

$ php --version
PHP 8.0.21 (cli) (built: Jul  6 2022 10:13:53) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.21, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.21, Copyright (c), by Zend Technologies

Apri il file php.ini per modificarlo.

$ sudo nano /etc/php.ini

Modificare i valori delle seguenti variabili per impostare la dimensione dell'allegato di posta su 25 MB.

upload_max_filesize = 25M
post_max_size = 25M

Successivamente, decommenta la variabile max_input_vars rimuovendo il punto e virgola davanti ad essa e cambiando il suo valore in 5000.

max_input_vars = 5000

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Apri il file /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Trova le righe user=apache e group=apache nel file e modificale come segue.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Quindi, decommenta il proprietario del file socket, il gruppo e la riga di autorizzazione predefinita e modificali come mostrato di seguito.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Successivamente, commenta la seguente riga come mostrato mettendo un punto e virgola davanti ad essa.

;listen.acl_users = apache,nginx

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Assegna le autorizzazioni appropriate alla directory della sessione PHP.

$ chown -R nginx:nginx /var/lib/php/session/

Abilitare e avviare il servizio PHP-FPM.

$ sudo systemctl enable php-fpm --now

Passo 4 - Installa e configura MySQL

Installa il server MySQL.

$ sudo dnf install mysql-server

Confermare l'installazione controllando la versione.

$ mysql --version
mysql  Ver 8.0.26 for Linux on x86_64 (Source distribution)

Abilita e avvia il servizio MySQL.

$ sudo systemctl enable mysqld --now

Eseguire lo script di installazione sicura.

$ sudo mysql_secure_installation

Riceverai diversi prompt. Il primo prompt chiederà se si desidera installare il plug-in Validate Password. Premi Y per installare il plugin. Scegli 2 come livello di sicurezza che richiederà che la tua password sia lunga almeno 8 caratteri e includa un mix di caratteri maiuscoli, minuscoli, numerici e speciali.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: (Press Y)

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: (Type 2)

Successivamente, ti verrà chiesto di creare una password di root sicura. Assicurati che la tua password corrisponda ai requisiti del plug-in Validate.

Please set the password for root here.

New password:

Re-enter new password:

Successivamente, ti verranno chieste diverse richieste relative all'aumento della sicurezza del database. Premi Y in ogni prompt.

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : (Press Y)
Remove anonymous users? (Press y|Y for Yes, any other key for No) : (Press Y)
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : (Press Y)
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : (Press Y)
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : (Press Y)
Success.

All done!

Accedi alla shell MariaDB.

$ sudo mysql

Crea un database per Moodle.

mysql > CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Creare un utente SQL per accedere al database. Sostituisci YourPassword23! con una password a tua scelta.

mysql > create user 'moodleuser'@'localhost' IDENTIFIED BY 'YourPassword23!';

Concedi a moodleuser l'accesso al database.

mysql > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodledb.* TO 'moodleuser'@'localhost';

Ricarica la tabella dei privilegi.

mysql > FLUSH PRIVILEGES;

Esci dal guscio.

mysql > exit

Passaggio 5: installa Nginx

Rocky Linux viene fornito con una versione precedente di Nginx. Devi scaricare il repository Nginx ufficiale per installare l'ultima versione.

Crea e apri il file /etc/yum.repos.d/nginx.repo per creare il repository Nginx ufficiale.

$ sudo nano /etc/yum.repos.d/nginx.repo

Incolla il seguente codice al suo interno.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Installa il server Nginx.

$ sudo dnf install nginx

Verificare l'installazione.

$ nginx -v
nginx version: nginx/1.22.0

Passaggio 6: installa Moodle

Crea la directory pubblica per Moodle.

$ sudo mkdir /var/www/html/moodle

Autorizza l'utente che ha effettuato l'accesso ad accedere alla directory.

$ sudo chown -R $USER:$USER /var/www/html/moodle

Passa all'elenco pubblico.

$ cd /var/www/html/moodle

Clonare il repository Github di Moodle.

$ git clone https://github.com/moodle/moodle.git .

Controlla l'elenco delle filiali disponibili.

$ git branch -a

Per ora, MOODLE_400_STABLE è l'ultima versione disponibile. Crea un ramo locale chiamato MOODLE_400_STABLE e impostalo per tracciare il ramo remoto.

$ git branch --track MOODLE_400_STABLE origin/MOODLE_400_STABLE

Passa alla filiale locale appena creata.

$ git checkout MOODLE_400_STABLE

Crea una directory di dati per Moodle.

$ sudo mkdir /var/moodledata

Assegna le autorizzazioni appropriate alla directory dei dati di Moodle.

$ sudo chown -R nginx /var/moodledata
$ sudo chmod -R 775 /var/moodledata

Concedi i permessi di scrittura sulla directory di Moodle.

$ sudo chmod -R 755 /var/www/html/moodle

Passo 7 - Configura Moodle

Passa alla directory di Moodle.

$ cd /var/www/html/moodle

Copia il file di configurazione di esempio per creare il file di configurazione di Moodle.

$ cp config-dist.php config.php

Apri il file di configurazione per la modifica.

$ nano config.php

Cerca la sezione di configurazione del database, quindi configura il database in cui verranno archiviati tutti i dati di Moodle, come mostrato di seguito.

$CFG->dbtype    = 'mysqli';      // 'pgsql', 'mariadb', 'mysqli', 'auroramysql', 'sqlsrv' or 'oci'
$CFG->dblibrary = 'native';     // 'native' only at the moment
$CFG->dbhost    = 'localhost';  // eg 'localhost' or 'db.isp.com' or IP
$CFG->dbname    = 'moodledb';     // database name, eg moodle
$CFG->dbuser    = 'moodleuser';   // your database username
$CFG->dbpass    = 'YourPassword23!';   // your database password
$CFG->prefix    = 'mdl_';       // prefix to use for all table names

Inoltre, configurare la posizione del nome di dominio Moodle e la directory dei dati.

$CFG->wwwroot   = 'https://moodle.example.com';
$CFG->dataroot  = '/var/moodledata';

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Passaggio 8: installa SSL

Lo strumento Certbot genera certificati SSL utilizzando l'API Lets Encrypt. Richiede il repository EPEL ma poiché lo abbiamo installato, possiamo procedere direttamente. Immetti il seguente comando per installarlo.

$ sudo dnf install certbot

Genera il certificato SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d moodle.example.com

Il comando precedente scaricherà un certificato nella directory /etc/letsencrypt/live/moodle.example.com sul tuo server.

Genera un certificato di gruppo Diffie-Hellman.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Crea una directory radice Web di verifica per il rinnovo automatico di Lets Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Crea un Cron Job per rinnovare l'SSL. Verrà eseguito ogni giorno per controllare il certificato e rinnovarlo se necessario. Per questo, per prima cosa, crea il file /etc/cron.daily/certbot-renew e aprilo per modificarlo.

$ sudo nano /etc/cron.daily/certbot-renew

Incolla il seguente codice.

#!/bin/sh
certbot renew --cert-name moodle.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Modificare le autorizzazioni sul file dell'attività per renderlo eseguibile.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Passaggio 9: configurare Nginx

Crea e apri il file /etc/nginx/conf.d/moodle.conf per la modifica.

$ sudo nano /etc/nginx/conf.d/moodle.conf

Incolla il seguente codice al suo interno.

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    listen [::]:80;
    server_name moodle.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name moodle.example.com;
    root   /var/www/html/moodle;
    index  index.php;

    ssl_certificate     /etc/letsencrypt/live/moodle.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/moodle.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/moodle.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    access_log /var/log/nginx/moodle.access.log main;
    error_log  /var/log/nginx/moodle.error.log;
    
    client_max_body_size 25M;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ ^(.+\.php)(.*)$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_index index.php;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        include /etc/nginx/mime.types;
        include fastcgi_params;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    
    # Hide all dot files but allow "Well-Known URIs" as per RFC 5785
	location ~ /\.(?!well-known).* {
    	return 404;
	}
 
	# This should be after the php fpm rule and very close to the last nginx ruleset.
	# Don't allow direct access to various internal files. See MDL-69333
	location ~ (/vendor/|/node_modules/|composer\.json|/readme|/README|readme\.txt|/upgrade\.txt|db/install\.xml|/fixtures/|/behat/|phpunit\.xml|\.lock|environment\.xml) {
     	deny all;
	    return 404;
	}
}

Una volta terminato, salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Apri il file /etc/nginx/nginx.conf per la modifica.

$ sudo nano /etc/nginx/nginx.conf

Aggiungere la riga seguente prima della riga include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

Verificare la sintassi del file di configurazione di Nginx.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Abilita e avvia il servizio Nginx per abilitare la nuova configurazione.

$ sudo systemctl enable nginx --now

Se ricevi il seguente errore, molto probabilmente è dovuto alle restrizioni di SELinux.

nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)

Per correggere l'errore, eseguire i seguenti comandi.

$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

Riavvia il servizio Nginx.

$ sudo systemctl start nginx

Passo 10 - Configura SELinux

Modificare il contesto di sicurezza dei file per la directory Web e dei dati di Moodles.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/moodle'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata'
$ sudo restorecon -Rv '/var/www/html/moodle'
$ sudo restorecon -Rv '/var/moodledata'

Configura SELinux per consentire le connessioni di rete da Moodle.

$ sudo setsebool -P httpd_can_network_connect on

Passaggio 11: completamento dell'installazione di Moodle

Apri l'URL https://moodle.example.com nel tuo browser e ti verrà presentata la seguente schermata di benvenuto.

Premere il pulsante Continua per procedere. Successivamente, il programma di installazione verificherà i requisiti di sistema.

Se tutto è ok, scorri verso il basso e fai clic sul pulsante Continua per procedere con l'installazione dei file e la configurazione del database.

Fare clic sul pulsante Continua una volta completata l'installazione. Successivamente, crea un account amministratore compilando i dettagli dell'account come richiesto.

Al termine, scorri verso il basso fino alla pagina e fai clic su Aggiorna profilo per procedere.

Successivamente, ti verrà chiesto di configurare le impostazioni della prima pagina di Moodles.

Configuralo secondo i requisiti e fai clic su Salva modifiche per procedere alla dashboard di Moodle. Successivamente, fai clic sul collegamento Salta in basso se non desideri registrare il tuo sito Moodle con l'azienda.

Ora puoi iniziare a utilizzare la piattaforma di apprendimento.

Conclusione

Questo conclude il nostro tutorial sull'installazione della piattaforma di apprendimento Moodle su un server Rocky Linux 8. Se hai domande, pubblicale nei commenti qui sotto.