Salta al contenuto principale

Come Installare Apache2 web server e LAMP su Ubuntu 24.04 Noble Numbat

In questa guida vedremo come installare un web server LAMP su Ubuntu 24.04 Noble Numbat utilizzando apt, il gestore di pacchetti di default.

Introduzione

Nei nostri interventi di Assistenza Linux, gli stack LAMP (Linux, Apache, MySQL, PHP), LEMP (NginX) e altri sono fondamentali per web app, CMS ed e-commerce come WordPress, Magento, Drupal e molti altri.

Iniziamo installando il web server Apache con HTTPS, il primo componente dello stack LAMP, 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 come generare un certificato HTTPS valido e gratuito con Let's Encrypt.

Installazione di Apache2 su Ubuntu 24.04

Di default, è previsto il modulo multi-processi mpm_prefork, che permette di utilizzare mod_php o php8.3, 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 apt install apache2
  2. Assicuriamoci che il modulo mpm_prefork sia disattivato, poiché rappresenta un collo di bottiglia per le prestazioni.

    sudo a2dismod mpm_prefork
  3. Abilitiamo mpm_event e http2.

    sudo a2enmod mpm_event http2
  4. Riavviamo Apache2.

    sudo service apache2 restart

Gestione del servizio Apache

Puoi utilizzare i seguenti comandi per gestire il servizio Apache:

  • sudo systemctl start apache2: avvia il servizio Apache
  • sudo systemctl stop apache2: arresta il servizio Apache
  • sudo systemctl restart apache2: riavvia il servizio Apache
  • sudo systemctl enable apache2: abilita l'avvio automatico di Apache all'avvio del sistema
  • sudo systemctl disable apache2: disabilita l'avvio automatico di Apache all'avvio del sistema

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 apt install php-fpm
  2. Abilitiamo i moduli.

    sudo a2enmod actions proxy_fcgi alias headers
  3. Riavviamo il processo di PHP FPM.

    sudo service php8.3-fpm restart
  4. Riavviamo Apache2.

    sudo service apache2 restart

Virtual Hosts PHP

È ora possibile configurare tutti i virtual host di Apache2 per utilizzare FPM aggiungendo questo handler nella loro definizione:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>

Test di PHP con info.php:

<?php
  phpinfo();
  phpinfo(INFO_MODULES);
?>

Installiamo i moduli necessari e PHP-MySQL.

  1. Possiamo scegliere di installare alcuni dei più comuni moduli.

    sudo apt-get install php-pear \
            php8.3-{mysql,curl,gd,intl,imap,mcrypt,ps,pspell,snmp,sqlite,tidy,xmlrpc,xsl}
  2. In alternativa, possiamo usare i moduli presenti in Plesk.

    sudo apt-get install php-pear \
            php8.3-{bcmath,enchant,imap,ldap,mysql,curl,dba,enchant,gd,intl,ldap,mbstring,mcrypt,odbc,opcache,pgsql,sqlite3,pspell,soap,tidy,xml,xmlrpc,xsl,zip}

Certificati SSL validi e gratuiti con Let's Encrypt

Grazie a Let's Encrypt, è 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 apt-get install certbot python3-certbot-apache

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 cat /etc/cron.d/certbot

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. È disponibile nella directory /etc/apache2/sites-available come vhost di default, da cui possiamo partire.

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</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:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Installazione di MySQL o MariaDB

Per installare MySQL o MariaDB, utilizziamo i pacchetti corrispondenti mysql-server e mariadb-server.

  1. Per installare MySQL server:

    sudo apt install mysql-server
  2. Per installare MariaDB (personalmente lo preferisco):

    sudo apt install mariadb-server

Per una configurazione dettagliata, potete fare riferimento alla nostra guida all'installazione e configurazione di MySQL per Ubuntu 24.04.

Condivisione

Se hai trovato utile questa guida, condividila con altri che potrebbero trarne beneficio.

Aggiungi un commento

Text Only

  • Nessun tag HTML consentito.