Come Installare LAMP in CentOS Stream 9
In questa guida vedremo come installare LAMP in CentOS Stream 9 utilizzando dnf
, il gestore di pacchetti di default.
Introduzione
Nei nostri interventi di Assistenza Linux, gli stack LAMP (Linux, Apache, MySQL, PHP), LEMP (NginX) e simili, sono fondamentali per Web App, CMS ed e-commerce come WordPress, Magento, Drupal e molti altri.
Per installare LAMP in CentOS Stream 9 iniziamo installando il web server Apache con HTTPS, il primo componente dello stack, che si occuperà di servire i contenuti.
Per ottimizzare le performance del web server, consigliamo di utilizzare PHP-FPM, mpm_event
e HTTP2. La maggior parte dei siti web utilizza connessioni sicure. Vedremo anche come generare un certificato HTTPS valido e gratuito con Let's Encrypt.
Installare LAMP in CentOS Stream 9
1. Installare Apache2
Di default, è previsto il modulo multi-processi mpm_prefork
, che permette di utilizzare mod_php
o php8.0, l'interprete interno. Questo approccio è sconsigliato per siti molto visitati, poiché arrivati al numero massimo di thread, il web server smette di rispondere fino alla liberazione di un thread.
Installiamo Apache2
sudo dnf install httpd
Assicuriamoci che il modulo
mpm_event_module
sia in uso per assicurarci migliori prestazioni.sudo grep mpm_event_module /etc/httpd/conf.modules.d/00-mpm.conf
Se non viene visualizzato nulla editiamo il file
/etc/httpd/conf.modules.d/00-mpm.conf
in modo che la lineaLoadModule
risulti come la seguente, per caricarempm_event
LoadModule mpm_event_module modules/mod_mpm_event.so
Controlliamo allo stesso modo precedente che sia attivo
http2
.sudo grep http2_module /etc/httpd/conf.modules.d/10-h2.conf
Nel caso non lo sia editiamo il file
/etc/httpd/conf.modules.d/10-h2.conf
come sotto:LoadModule http2_module modules/mod_http2.so
Riavviamo Apache2.
sudo systemctl restart httpd
Assicuriamoci che Apache2 sia abilitato all'avvio
sudo systemctl enable httpd sudo systemctl start httpd
Controlliamo che sia attivo Apache2
httpd
sudo systemctl status httpd
● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled) Active: active (running) since Fri 2024-10-18 00:47:25 UTC; 1min 6s ago Main PID: 67247 (httpd)
Permettiamo il traffico HTTP e HTTPS attraverso il firewall
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload
2. Installare PHP-FPM
PHP-FPM è un'implementazione alternativa di PHP FastCGI, nota per la velocità, tre volte superiore al classico modulo, con funzionalità aggiuntive. FPM è un vero e proprio demone che resta in ascolto per le richieste PHP tramite una porta o un socket UNIX. Rappresenta la P del nostro LAMP.
Installiamo FPM e FastCGI.
sudo dnf install php php-fpm
Riavviamo il processo di PHP FPM.
sudo systemctl restart php-fpm
Riavviamo Apache2.
sudo systemctl restart httpd
Configurazione Virtual Host PHP-FPM
È ora possibile configurare tutti i virtual host di Apache2 per utilizzare FPM con il modello sotto, o crearne nuovi all'interno di /etc/httpd/conf.d/
utilizzando un nome che termina in .conf
, partendo dal questo esempio:
# Ensure that Apache listens on port 80
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName www.mydomain.ext
# Other directives here
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler "proxy:unix:/run/php-fpm/www.sock"
</FilesMatch>
</VirtualHost>
Ora possiamo testare il web server e PHP creando il file /var/www/html/info.php
:
<?php
phpinfo();
phpinfo(INFO_MODULES);
?>
Installiamo i moduli necessari e PHP-MySQL
. Possiamo scegliere di installare anche alcuni dei più comuni moduli.
sudo dnf install php-pear \
php-{mysqlnd,gd,intl,snmp,xsl,pdo,mbstring}
3. Installare Let's Encrypt per Certificati SSL gratuiti
Grazie a Let's Encrypt e al demone certbot
, è possibile generare certificati SSL universalmente riconosciuti, sicuri e gratuiti. È necessario configurare il nome DNS del sito web in modo da raggiungere l'IP del nostro server.
Esempio di configurazione DNS
Per configurare il DNS, accediamo al pannello del nostro fornitore e creiamo un record di tipo "A".
mydomain.ext A 1.1.1.1
Installiamo Let's Encrypt e generiamo i certificati SSL e TLS.
sudo dnf install epel-release
Accettiamo la chiave se richiesto:
CentOS Stream 9 - Extras packages 2.1 MB/s | 2.1 kB 00:00
Importing GPG key 0x1D997668:
Userid : "CentOS Extras SIG (https://wiki.centos.org/SpecialInterestGroup) <[email protected]>"
Fingerprint: 363F C097 2F64 B699 AED3 968E 1FF6 A217 1D99 7668
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Extras-SHA512
Is this ok [y/N]: y
Installiamo Let's Encrypt certbot
sudo dnf install certbot python3-certbot-apache
Riavviamo Apache2 httpd per peremettergli di generare i certificati auto firmati
sudo systemctl restart httpd
Creiamo la configurazione di Apache2.
sudo certbot --apache
Testiamo il rinnovo dei certificati.
sudo certbot renew --dry-run
Controlliamo che sia presente il processo schedulato di Cron per il rinnovo.
sudo grep certbot /etc/cron.d/ -R
Se la risoluzione del nostro dominio è corretta, i nostri virtual host risponderanno in HTTPS, restituendoci il famoso "lucchetto verde" sul browser.
I Virtual Host di Apache2
Virtual Host HTTP
Per configurare un virtual host HTTP, possiamo utilizzare una definizione semplice come quella elencata di seguito creando un file nella directory /etc/httpd/conf.d
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler "proxy:unix:/run/php-fpm/www.sock"
</FilesMatch>
</VirtualHost>
Virtual Host HTTPS
I virtual host HTTPS includono i percorsi necessari per l'utilizzo di SSL e l'attivazione di PHP.
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot "/var/www/data/online"
ServerName mydomain.ext
ServerAlias www.mydomain.ext
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Protocols h2 h2c http/1.1
SSLEngine on
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/mydomain.ext/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.ext/privkey.pem
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler "proxy:unix:/run/php-fpm/www.sock"
</FilesMatch>
</VirtualHost>
4. Installare MySQL o MariaDB
Per installare MySQL o MariaDB, utilizziamo i pacchetti corrispondenti mysql-server
e mariadb-server
.
Per installare MySQL server:
sudo dnf install mysql-server
Per installare MariaDB (personalmente lo preferisco):
sudo dnf install mariadb-server
Per una configurazione dettagliata, potete fare riferimento alla nostra guida all'installazione e configurazione di MySQL per CentOS Stream 9.
Conclusione
Siamo riusciti a installare LAMP in CentOS Stream 9, ora il nostro server è pronto per ospitare un CMS o una Web App
Se hai trovato utile questa guida, condividila sui social, altri potrebbero averne bisogno.