Passa ai contenuti principali

Server Aruba Cloud - Debian 12 - Installare un Web Server LAMP multi PHP (PHP 5.6, PHP 7.4, PHP 8.2)


### Una premessa fondamentale

Alcuni anni fa pubblicai come realizzare un server su CentOS 7 che potesse ospitare diversi siti in PHP (multihost), ma soprattutto con diverse versioni di esso dal 5.6 al 74 (poi in un apposito post anche 8.1, clicca qui per leggere tutti i post del dEC System IV).

La macchina, usata in svariate versioni anche per uso professionale si è rivelata efficiente, robusta e funzionale per tutte quelle applicazioni anche obsolete che per mancanza di fondi, investimenti e quant'altro dava la possibilità di poter sfruttare le tecnologie acquisite anche su una macchina aggiornabile dove far coesistere tutto il patrimonio digitale che si era costruito nel corso del tempo.

Ricordo che CentOS è l'acronimo di Community Enterprise Operating System, è una distribuzione Linux di classe enterprise derivata dai sorgenti di Red Hat Enterprise Linux (RHEL)

Com'è noto, l'anno scorso (il 30-06-2024) CentOS  ha eliminato il supporto per la versione 7 lasciando senza supporto, una popolazione di circa il 26% dei web server mondiali (clicca qui per una analisi dei sistemi Linux).

Se si pensa all'enormità del problema è fisiologico immaginare ad una soluzione alternativa che possa avere un prospettiva nel tempo, senza sacrificare tutto quello che si è costruito in precedenza.

In questo post propongo un'alternativa basata su Debian (sul quale è basato anche Ubuntu) che sostanzialmente esiste da quando il compianto Ian Murdock lo creò nel 1994 ed è un software multi piattaforma.

Ho concepito il progetto come quello basato su CentOS ma su base solida di Debian nativo


### Puliamo la macchina dal firewall installato ed aggiorniamo la macchina

Prima di iniziare è bene fare un upgrade del sistema, per il momento eliminiamo il firewall installato di deafult:


sudo apt purge --autoremove iptables


poi facciamo tutti gli aggiornamenti che ci servono

sudo apt update && sudo apt upgrade


Installiamo anche, per comodità, Midnight Commander (MC) e vediamo di organizzare il sistema


sudo apt install mc



### Installiamo Apache2

Prima di tutto, installiamo il web server apache sul quale costruiremo il sistema

sudo apt install -y apache2


verifichiamolo 


sudo systemctl status apache2


ed abilitiamolo


sudo systemctl enable apache2


A questo punto il sistema è funzionante web server funzionante



### PHP 5.6

Partiamo da una premessa che installare PHP 5.6 è molto difficile dal punto di vista della disponibilità del pacchetto, poiché è da considerarsi obsoleto. 

Usiamo il pacchetto di Ondrej Sury per avere un PHP 5.6 funzionante

Invece di fare pezzo a pezzo l'installazione, prepariamo un file di script da incollare in nano per far installare il sistema automaticamente:

nano php56.sh


ed incollare il seguente codice


#!/bin/bash

## Install Debian/Ubuntu


## https://think.unblog.ch/en/multiple-php-fpm-versions-with-apache-on-debian-12/

## https://tecadmin.net/how-to-install-php-on-debian-11/

## https://shape.host/resources/how-to-install-multiple-versions-of-php-on-debian-with-ispconfig


## installiamo wget

apt install -y lsb-release apt-transport-https ca-certificates wget gnupg


wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list

apt update


## PHP 5.6

apt install -y php5.6 php5.6-cli php5.6-cgi php5.6-gd php5.6-mysql php5.6-imap 

apt install -y php5.6-curl php5.6-intl php5.6-pspell php5.6-recode php5.6-sqlite3 php5.6-tidy 

apt install -y php5.6-xmlrpc php5.6-xsl php5.6-zip php5.6-mbstring php5.6-soap 

apt install -y php5.6-opcache libicu72 php5.6-common php5.6-json php5.6-readline php5.6-xml

sudo apt install-y libapache2-mod-php5.6

salvare e dare i permessi 755 al file (chmod 755 php56.sh) e poi farlo partire nel seguente modo:


./php56.sh


Se andiamo a creare nella cartella di default /var/www/html creiamo con nano il file ver.php con il seguente codice, possiamo verificare sia il server apache che la versione di php


nano ver.php


dentro copiare

<?php

    phpinfo();

?>


A questo punto facciamo un test:




Ovviamente il nome a dominio è del tutto arbitrario e punta ad un indirizzo IP di macchina del Server Aruba che stiamo usando


### PHP 7.4

Fatto il PHP 5.6, ora concentriamoci sulla versione intermedia, la 7.4, anche questa non più supportata, ma ancora in uso largamente:

Installiamo la versione di PHP 7.4, con il seguente script


nano php74.sh

e dentro incolliamo il seguente script

#!/bin/bash

## PHP 7.4

apt install php7.4 php7.4-cli php7.4-cgi php7.4-gd php7.4-mysql php7.4-imap 

apt install php7.4-curl php7.4-intl php7.4-pspell php7.4-recode php7.4-sqlite3 php7.4-tidy 

apt install php7.4-xmlrpc php7.4-xsl php7.4-zip php7.4-mbstring php7.4-soap 

apt install php7.4-opcache libicu72 php7.4-common php7.4-json php7.4-readline php7.4-xml

sudo apt install libapache2-mod-php7.4


salvare e dare i permessi 755 al file (chmod 755 php74.sh) e poi farlo partire nel seguente modo:


./php74.sh


In questo momento il sistema ha al suo interno attivo l'ultima versione di PHP che abbiamo installato


### PHP 8.2

Installiamo ora l'ultima versione di PHP 8.2, poiché è l'ultima stabile.

Al momento in cui scrivo (29-10-2024) sono state rilasciate le versioni 8.3 (grossomodo stabile) e 8.4 RC4.

Le differenze, come al solito sono relativamente poche, ma una versione più "stabile" è sempre preferibile ad una meno stabile (poi dipende da cosa fare)

Come nei casi precedenti, facciamo lo script per caricare i moduli di PHP 8.2

nano php82.sh

e dentro incolliamo il seguente script

#!/bin/bash

## PHP 8.2

apt install php8.2 php8.2-cli php8.2-cgi php8.2-gd php8.2-mysql php8.2-imap 

apt install php8.2-curl php8.2-intl php8.2-pspell php8.2-recode php8.2-sqlite3 php8.2-tidy 

apt install php8.2-xmlrpc php8.2-xsl php8.2-zip php8.2-mbstring php8.2-soap 

apt install php8.2-opcache libicu72 php8.2-common php8.2-json php8.2-readline php8.2-xml

sudo apt install libapache2-mod-php8.2


salvare e dare i permessi 755 al file (chmod 755 php82.sh) e poi farlo partire nel seguente modo

./php82.sh



### Installiamo le FastCGI Process Manager (FPM) per la gestione parallela

Fatto i tre script che caricano automaticamente i tre tipi di PHP, a questo punto carichiamo gli FPM che li possono gestire in parallelo:


sudo apt update

sudo apt install -y php5.6-fpm php7.4-fpm php8.2-fpm


Questa operazione ci consentirà di attivare i scoket dei tre sistemi di PHP, che è possibile verificare con il seguente comando:


ls -l /run/php/*.sock



A questo punto vediamo quali moduli apache-php sono attivi (non gli FPM) e disabilitiamoli.

Usiamo il seguente comando per verificare i moduli attivi:


apache2ctl -M | grep php



In questa schermata ci sono due indicazioni:

Could not reliably determine the server's fully qualified domain name, using 127.0.0.1.  

Set the 'ServerName' directive globally to suppress this message


significa che in /etc/apache2/apache2.conf (o in un suo include) non è stato definito un ServerName di default per l’intero server. Di conseguenza Apache si “auto‑assegna” 127.0.0.1 come nome di host.


La seconda indicazione è che il modulo mod_php per PHP 5 è attualmente caricato in Apache.


Visto che abbiamo installato i moduli FPM, dobbiamo necessariamente disabilitare questo modulo con il comando:

sudo a2dismod php5.6 

Attiviamo il proxu FPM:

sudo a2enmod proxy proxy_fcgi setenvif


e dopo dobbiamo riavviare apache2 con il seguente comando:

sudo systemctl reload apache2


Ovviamente se esistono (improbabile) altri mod apache php attivi, per disabilitarli si usa la stessa sintassi mettendo la versione attiva (es. sudo a2dismod php7.4, ecc.) e poi si ricarica apache



### Virtual Host con PHP personalizzati

Ora che abbiamo installato tutte le versioni che ci interessano di PHP sul nostro server.

Andiamo nella cartella /etc/apache2/sites-available/ e costruiamo i nostri Virtual Host

In questo esempio, uso dei domini reali che ho in portafoglio mio: php56.dec.pw, php74.dec.pw e php82.dec.pw 

Quindi, creiamo i file con nano:

### Virtual Host PHP 5.6

nano /etc/apache2/sites-available/php56.dec.pw.conf


e copiamo il seguente testo:


<VirtualHost *:80>

    ServerName php56.dec.pw

    DocumentRoot /var/www/php56


    <Directory /var/www/php56>

        DirectoryIndex index.php

        AllowOverride All

        Require all granted

    </Directory>


    <FilesMatch \.php$>

        # punta al socket di PHP 5.6-FPM

        SetHandler "proxy:unix:/run/php/php5.6-fpm.sock|fcgi://localhost/"

    </FilesMatch>


    ErrorLog ${APACHE_LOG_DIR}/php5_error.log

    CustomLog ${APACHE_LOG_DIR}/php5_access.log combined

</VirtualHost>


    ErrorLog ${APACHE_LOG_DIR}/sito1_error.log

    CustomLog ${APACHE_LOG_DIR}/sito1_access.log combined

</VirtualHost>


Ovviamente il dominio php56.dec.pw fa parte del mio pacchetto dati, ma l'utente che si vuole cimentare nella creazione di questa struttura deve usare i suoi domini indicando dentro la Gestione DNS il'ip v4 (ip v6 lo gestisce solo aruba.it per ora) della macchina ed al posto di Server Name mettere il nome a dominio che intende usare (ad esempio php5.example.com)

### Virtual Host PHP 7.4

nano /etc/apache2/sites-available/php74.dec.pw.conf


analogamente al testo della 5.6, copiamo il seguente testo nel file di configurazione


<VirtualHost *:80>

    ServerName php74.dec.pw

    DocumentRoot /var/www/php74


    <Directory /var/www/php74>

        DirectoryIndex index.php

        AllowOverride All

        Require all granted

    </Directory>


    <FilesMatch \.php$>

        # punta al socket di PHP 7.4‑FPM

        SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"

    </FilesMatch>


    ErrorLog ${APACHE_LOG_DIR}/php7_error.log

    CustomLog ${APACHE_LOG_DIR}/php7_access.log combined

</VirtualHost>


### Virtual Host PHP 8.2

Come detto in precedenza, usiamo il dominio php82.dec.pw, ma intendiamo PHP 8.2

nano /etc/apache2/sites-available/php82.dec.pw.conf


analogamente al testo della 5.6 e 7.4, copiamo il seguente testo nel file di configurazione


<VirtualHost *:80>

    ServerName php82.dec.pw

    DocumentRoot /var/www/php82


    <Directory /var/www/php82>

        DirectoryIndex index.php

        AllowOverride All

        Require all granted

    </Directory>


    <FilesMatch \.php$>

        # punta al socket di PHP 8.2‑FPM

        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"

    </FilesMatch>


    ErrorLog ${APACHE_LOG_DIR}/php8_error.log

    CustomLog ${APACHE_LOG_DIR}/php8_access.log combined

</VirtualHost>



### Creiamo le directory dentro /var/www

mkdir  /var/www/php56

mkdir  /var/www/php74

mkdir  /var/www/php82


Queste sono le directory personalizzate e dentro copiamo il file ver.php che avevamo visto all'inizio, rendendolo da ver.php a index.php


 cp /var/www/html/ver.php /var/www/php56/index.php

 cp /var/www/html/ver.php /var/www/php74/index.php

 cp /var/www/html/ver.php /var/www/php82/index.php



### Abilitiamo i Virtual Host nel Server

sudo a2ensite php56.dec.pw
sudo a2ensite php74.dec.pw
sudo a2ensite php82.dec.pw


attiviamo anche il modulo proxy per Apache per le versione FPM di PHP


sudo a2enmod proxy proxy_fcgi setenvif


e riavviamo Apache 2

sudo systemctl restart apache2



### Una nota sul "proprietario" dei file di Apache2 sotto Debian/Ubuntu

Seppur trattato superficialmente, quando si crea un Virtual Host sul server sotto Apache2, nelle cartelle che si intende usare per caricare dati, senza dare alle stesse valore chmod 777 (ovvero dove tutti possono scrivere, compreso malintenzionati) Apache2 ha un ID che indica il proprietario del file (UserID, abbreviato UID).

Nelle immagini precedenti che mostrano la consolle del server, spesso il proprietario dei file è root, poiché abbiamo fatto accesso con quell'utente (se era un utente differente tipo giovanni, il proprietario sarebbe stato giovanni e via dicendo).

Apache2 come utente proprietario del file indica se stesso con l'UID www-data.

Questo è importantissimo, poiché le cartelle che dovranno contenere dati caricati da Web può avere tranquillamente la i permessi 755 (chmod 755 [cartella]), ma il proprietario che li gestirà sarà www-data (quindi chown www-data:www_data [cartella])



### Considerazioni

Il sistema proposto consente di avere lo stesso tipo e funzionalità del dEC System IV su piattaforma Debian/Ubuntu

Il fatto stesso che possa includere anche PHP 5.6 consente agli sviluppatori di poter effettuare upgrade di programmi in modo graduale contenendo i costi senza perdere funzionalità acquisite per programmi già scritti.

Inoltre essendo compatibile con Debian/Ubuntu l'aggiornabilità del sistema dovrebbe essere più garantita rispetto al compianto CentOS 7, che nelle sue versioni successive non è riuscito a mantenere quella compatibilità e funzionalità con RHEL che ne hanno decretato il successo.


###  Gli Articoli fondamentali del dEC System V








Commenti

Post più popolari

Link al Web

Lista di Comandi Linux Mozilla FireFox / Thunderbird / FileZilla Portable FireFox Download localizzati FireFox Portable - Pagina download localizzati ThunterBird Portable - Pagina dei download localizzati FileZilla Portable Avast Avast Download Avast Registrazione Vecchie versioni Avast Attivazione della copia gratuita per 1 anno Adobe Reader Get Adobe Acrobat e Adobe Reader Cartella tutte le versioni Adobe Reader da scaricare offline Microsoft 365 Accedere ad area riservata Microsoft 365 Scarica Office (365 o versione unica) dal Sito Microsoft Windows 365 VideoLAN VLC Video Player Pagina di Download di VLC Pix Resizer for Windows Pagina dell'autore del programma WinRAR Preleva winrar Java Runtime & Development Kit (Java SDK) Java SE Downloads NetBeans Java Runtime Editio Download Pagine Facebook Rendere Amministratore di una pagina Convertitore Immagine 2 ASCII Art PICASCII Verificare e Scaric...

Mac OS X - Installare ed usare una stampante sul Print Server GetNet 3 Port 2 USB e 1 LPT

Abbiamo visto come installare il Print Server GetNet 3 in 1 sui più diffusi sistemi operativi Windows (vedi articoli correlati in fondo al post). La "scatoletta" ha anche un protocollo di comunicazione Apple Talk, quindi può essere collegata (fare da tramite) anche a stampanti che abbiano la gestione post script integrata (quasi tutte le stampanti salvo quelle del gruppo Ricoh che hanno bisogno di un apposito moduol installato) sul Mac. Print Server GetNet 1 Parallela e 2 USB Il metodo di installazione è molto simile a quello visto su Windows, con la differenza sostanziale che non è necessario scegliere tra moltissimi modelli, ma si gestisce in modo più semplice. Purtroppo sul Mac non è possibile (allo stato attuale) collegare print server di tipo TP-Link, ovvero replicatori di porta USB su Lan, in quanto non esiste un driver adatto. Detto questo, consideriamo la stampante che vogliamo collegare al Mac. Il caso che abbiamo usato nei precedenti post,...

BlackBerry - Importare i dati da altri cellulari

English translated post Un amico mi porta un BlackBerry Pearl 8110 e mi chiede di trasferire i dati dal suo cellulare Nokia a questo telefono. Premesso che personalmente non ho mai reputato il BlackBerry un telefono "semplice", l'operazione si è reputata piuttosto complessa. Scartata l'idea di mandare i vcard via bluetooth (come si fa con quasi tutti i Nokia e Samsung), l'unica alternativa è quella di appoggiarsi a Microsoft Outlook !!! Come fare? 1 - Installare il Microsoft Outlook (XP o 2003) nel proprio PC 2 - Installare (nel caso specifico del Nokia) il programma Nokia PC Suite 3 - Sincronizzare solo la Rubrica (ovviamente dipende sempre se il cellulare Nokia è il Vostro o di un Vostro amico) del Nokia con l'Outlook, così che tutti i dati presenti nella Rubrica siano copiati nella sezione Contatti dell'Outlook 4 - Scaricare l'ultima versione del BlackBerry Desktop Manager (se il pacchetto è quello Vodafone, la versione sul CD non è molto efficac...