Installare Apache, HTTPS e PHP-FPM in Debian 13
In questa guida installeremo Apache, PHP-FPM, Let's Encrypt SSL in Debian 13 Trixie. Applichiamo le prime ottimizzazioni e testiamo i risultati creando phpinfo.ini
Installiamo Apache2
Installiamo 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
Di default, è previsto il modulo multi processi, mpm_prefork, che permette di utilizzare mod_php e PHP 8.4, l'interprete interno
Questo approccio è sconsigliato sui siti molto visitati, oltre la maggiore lentezza, arrivati al numero di thread massimi, il web server, smette di rispondere fino alla liberazione di un thread che possa servire i contenuti
Installiamo Apache2
apt install apache2Disabilitiamo il modulo
mpm_preforka2dismod mpm_preforkAbilitiamo
mpm_eventehttp2a2enmod mpm_event http2Riavviamo Apache2
service apache2 restart
Installare PHP-FPM
Modifichiamo la configurazione del pool per ascoltare sulla porta predefinita 9000 di PHP-FPM. Se stai configurando un ambiente di produzione ad alto traffico, i nostri consulenti Linux Debian possono assisterti con il tuning avanzato delle prestazioni.
FPM è un vero e proprio demone, resta in ascolto per le richieste PHP, tramite una porta o un socket UNIX
Rappresenta la P del nostro LAMP
Installiamo FPM e FastCGI
apt install php-fpm libapache2-mod-fcgidEditiamo la configurazione della pool per ascoltare sulla porta di default di PHP-FPM, la 9000
nano /etc/php/8.4/fpm/pool.d/www.conf;listen = /run/php/php8.4-fpm.sock
listen = 9000Abilitiamo i moduli
a2enmod actions proxy_fcgi alias headersRiavviamo il processo di PHP FPM
service php8.4-fpm restartRiavviamo Apache2
service apache2 restartÈ ora possibile configurare per tutti i virtual host apache2 l'uso di FPM aggiungendo questo handler nella loro definizione:
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>Per testare l'esecuzione di PHP e avere informazioni su moduli e configurazione, possiamo creare un file phpinfo.php nella directory configurata nel nostro virtual host
<?php
phpinfo();
phpinfo(INFO_MODULES);
?>Visitando l'indirizzo https://IP-WEB/phpinfo.php possiamo visualizzare le informazioni relative a PHP
Installiamo i moduli necessari, PHP-MySQL e alcuni dei più comuni
apt-get install php8.4-{mysql,curl,gd,intl,mcrypt,ps,pspell,snmp,sqlite,tidy,xmlrpc,xsl}Possiamo anche scegliere di installare i moduli più comuni, come quelli di default in Plesk
apt-get install php8.4-{bcmath,enchant,ldap,mysql,curl,dba,enchant,gd,intl,ldap,mbstring,mcrypt,odbc,opcache,pgsql,sqlite3,pspell,soap,tidy,xml,xmlrpc,xsl,zip}Let's Encrypt certificati SSL validi e gratuiti
Grazie all'eccellente Let's Encrypt, è possibile generare certificati SSL universalmente riconosciuti, sicuri e gratuiti. Automatizzare questo processo su server multipli è un'attività comune nei nostri progetti DevOps di consulenza professionale.
È necessario configurare il nome DNS del sito web che andremo a ospitare in modo da raggiungere l'IP del nostro server
Esempio configurazione DNS
Per configurare il DNS, è necessario accedere al pannello del nostro fornitore e registrare un nome di questo tipo
mydomain.ext A 1.1.1.1Installiamo Let's Encrypt e generiamo i certificati SSL e TLS
apt-get install certbot python3-certbot-apacheCreiamo la configurazione di Apache2
certbot --apacheTestiamo il rinnovo dei certificati
certbot renew --dry-runControlliamo che sia presente il processo schedulato di Cron per il rinnovo
cat /etc/cron.d/certbotSe non ci sono stati problemi nella risoluzione del nostro dominio, i nostri virtual host risponderanno in HTTPS, restituendoci il famoso "luchetto verde" sul browser
I Virtualhost apache2
Virtual host HTTP
Per configurare un virtual host http, possiamo utilizzare una definizione molto semplice, come questa listata
È disponibile nella directory /etc/apache2/sites-available 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 path 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>A questo punto il nostro web server sarà in grado in grado di rispondere in HTTPS e servire le pagine PHP.
Installiamo MariaDB, Fork di MySQL
Debian, come molte altre distribuzioni, non può più fornire il pacchetto MySQL direttamente, essendo proprietario. Al momento in cui si scrive non è stato ancora pacchettizzato da Oracle per Debian 13 Trixie. Se è richiesto come requisito installare MySQL 8.0 o MySQL 8.4, al momento è necessario compilarlo da sorgente.
MySQL è però rimpiazzato dal fork completamente libero MariaDB che garantisce più funzionalità e supporto. Installiamo MariaDB 11.8 direttamente dai repository Debian:
apt install mariadb-serverConfigurare e mantenere uno stack LAMP ad alte prestazioni richiede competenze specifiche. Siamo al tuo fianco per ottimizzare la sicurezza e la stabilità del tuo server aziendale, evitando colli di bottiglia e configurazioni errate.
Ragazzi, vi manca l'ascolto...
Ragazzi, manca la modifica della direttiva "listen" nel file di conf di FPM (/etc/php/8.4/fpm/pool.d) in "listen = 9000" secondo la chiamata del gestore.