Salta al contenuto principale

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.

  1. Installiamo Apache2

    sudo dnf install httpd
  2. 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
    1. Se non viene visualizzato nulla editiamo il file /etc/httpd/conf.modules.d/00-mpm.conf in modo che la linea LoadModule risulti come la seguente, per caricare mpm_event

      LoadModule mpm_event_module modules/mod_mpm_event.so
  3. Controlliamo allo stesso modo precedente che sia attivo http2.

    sudo grep http2_module /etc/httpd/conf.modules.d/10-h2.conf
    1. 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
  4. Riavviamo Apache2.

    sudo systemctl restart httpd
  5. Assicuriamoci che Apache2 sia abilitato all'avvio

    sudo systemctl enable httpd
    sudo systemctl start httpd
  6. 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)
  7. 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.

  1. Installiamo FPM e FastCGI.

    sudo dnf install php php-fpm
  2. Riavviamo il processo di PHP FPM.

    sudo systemctl restart php-fpm
  3. 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.

  1. Per installare MySQL server:

    sudo dnf install mysql-server
  2. 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.

Aggiungi un commento

Comment

  • Elementi HTML permessi: <br> <p> <code class="language-*"> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Solo le immagini ospitate su questo sito possono essere utilizzate nel tag <img>.