L'argomento di questo post è un bel po' complesso, poiché è una evoluzione forte di quello che abbiamo fin qui affrontato col THE MATRIX MACHINE Project - Linux.
Se fino ad ora avevamo come interesse quello di creare un Web Server che ci consentisse di avere in ufficio, in casa un server web per le nostre invenzioni, dove potevamo ospitare più domini con i VirtualHost, ma tutto sommato la base di linguaggio PHP rimaneva immutato per tutte i domini sulla stessa macchina, ora "giochiamo" su piani paralleli, dove ogni dominio (o sottodominio) si sviluppa in modo differente, usando risorse differenti.
Ovviamente risorse di linguaggio PHP differenti, ma base di dati unica sotto, in quanto il database (se inteso come ospitato in locale, localhost) è sempre lo stesso.
Ovviamente nulla ci vieta di usare database differenti su macchine differenti (ad esempio il MySQL Server di Aruba fornito col pacchetto hosting), ma è un dettaglio che affronteremo in seguito.
La base - Un Server CentOS Cloud Aruba.it
Se è pur vero che andiamo a costruire un Server LAMP (Linux, Apache, MySQL/MariaDB, PHP), usiamo una versione base Linux pronta e con IP pubblico statico, visto che riprogettare tutta la struttura su un server in locale è più complesso (ma non è detto che affronteremo il problema in un altro post).
Ovviamente è anche un discorso di costo, visto che un Server Smart Cloud di Aruba.it costa, iva inclusa, 3,50€/mese, due Cornetti ed un Caffè, per giocare.
Il Server che andremo ad usare è il basilare CentOS 7 64 Bit
I tool base per Linux
Innanzitutto installiamo i tool base (già affrontati in altri post)
yum -y install nano
L'editor di testo più semplice ed avanzato del vi di base che consente un minimale Copia/Incolla da PC
yum -y install unzip
Il programma di decompressione file zip standard
yum -y install vsftpd
Il programma di FTP Server che useremo per uploadare file (clicca qui per il post)
yum -y install mc
Il programma di gestione file simile al Norton Commander di felice memoria (clicca qui per il post dedicato)
Si potrebbe installare anche il Maria DB Server, il clone di MySQL, ma si rimanda direttamente al post dedicato.
Il DataBase lo si può installare anche a conclusione della procedura del sistema.
Installare Apache2
Il primo pezzo del puzzle, a parte quelli elencati in precedenza, è Apache2, che è il programma standard per la pubblicazione di pagine web e del quale già abbiamo discusso in altri post per la creazione di Virtual Host e SSL su dominio:
- Server Aruba Cloud - CentOS 7 - Installare Virtual Host su Apache2 (porta 80)
- Server Aruba Cloud - CentOS 7 - Installare Virtual Host SSL su Apache2 (porta 443)
yum -y install httpd
così installa direttamente l'ultima versione nel repository
I due articoli precedenti, dovranno essere adattati alla nuova struttura.
Installare le due versioni di PHP 5.6 e 7.3
La versione di PHP che andremo ad usare è PHP-FPM (FastCGI Process Manager) ed è un'implementazione PHP FastCGI alternativa con alcune funzionalità aggiuntive (principalmente) utili per siti con carichi pesanti.
Quindi andremo ad installare questi oggetti:
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
(andiamo a configurare il Repository Remi)
yum -y install php56
yum -y install php73
yum -y install php56-php-fpm
yum -y install php73-php-fpm
Una volta installate, le andiamo a bloccare
systemctl stop php56-php-fpm
systemctl stop php73-php-fpm
per consentire a SELinux (1) di eseguire lo script php-fpms, eseguire questi comandi:
semanage port -a -t http_port_t -p tcp 9072
semanage port -a -t http_port_t -p tcp 9056
(1) SELinux è un set di modifiche che possono essere applicate a sistemi operativi di tipo Unix come Linux e BSD. La sua architettura cerca di separare l'uso delle regole di sicurezza dalla definizione delle regole stesse, riducendo il numero di software incaricati a verificare che queste vengano rispettate. I concetti base di SELinux possono essere ricondotti ad alcuni progetti della National Security Agency (NSA) statunitense
La mossa precedente serve ad aprire due porte per indirizzare le richieste che arrivano sia per PHP 5.6 che per PHP 7.3 sulla stessa porta 9000.
Quindi andiamo a configurare i due file www.conf delle due versioni di PHP:
sed -i 's/:9000/:9056/' /etc/opt/remi/php56/php-fpm.d/www.conf
sed -i 's/:9000/:9072/' /etc/opt/remi/php73/php-fpm.d/www.conf
Le due installazioni di PHP sono monche degli add-on per accedere al DataBase ed altro, quindi installiamoli:
PHP 7.3
yum -y install php73-php-mysql php73-php-pecl-memcache php73-php-pecl-memcached php73-php-gd php73-php-mbstring php73-php-mcrypt php73-php-xml php73-php-pecl-apc php73-php-cli php73-php-pear php73-php-pdo
PHP 5.6
yum -y install php56-php-mysql php56-php-pecl-memcache php56-php-pecl-memcached php56-php-gd php56-php-mbstring php56-php-mcrypt php56-php-xml php56-php-pecl-apc php56-php-cli php56-php-pear php56-php-pdo
Ora riavviamo sia PHP 5.6 che 7.3, in precedenza fermati
systemctl start php73-php-fpm
systemctl start php56-php-fpm
A questo punto dobbiamo creare due script-wrapper per PHP 5.6 e 7.3
PHP 5.6
nano /var/www/cgi-bin/php56.fcgi
e dentro incolliamo
PHP 7.3
nano /var/www/cgi-bin/php73.fcgi
e dentro incolliamo
exec /bin/php73-cgi
Fatto ciò diamo i permessi soliti (755) ai due file
sudo chmod 755 /var/www/cgi-bin/php56.fcgi
sudo chmod 755 /var/www/cgi-bin/php73.fcgi
I due Virtual Host di Prova
A questo punto abbiamo bisogno di due Virtual Host per testare se tutto è andato a buon fine
Immaginiamo di usare un dominio e di creare due sottodomini.
Nel caso qui riportato usiamo:
tmm.2cg.it per PHP 5.6
tmm2.2cg.it per PHP 7.3
Configuriamo il file del Virtual Host tmm.2cg.it
Creiamo il file di VirtualHost direttamente nella cartella con nano
nano /etc/httpd/conf.d/tmm.2cg.it.conf
########################
###### Porta 80 - Inizio
###
### - tmm.2cg.it
### - Con accesso con .htaccess
### - e con error.log
######
<VirtualHost tmm.2cg.it>
DocumentRoot "/var/www/html/php56"
#ServerName tmm.2cg.it
# Parametri della struttura in php 5.6
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php56-fcgi .php
Action php56-fcgi /cgi-bin/php56.fcgi
# Parametri della cartella in PHP 5.6
<Directory /var/www/html/php56>
DirectoryIndex index.php
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
Configuriamo il file del Virtual Host tmm2.2cg.it
Creiamo il file di VirtualHost direttamente nella cartella con nano
nano /etc/httpd/conf.d/tmm2.2cg.it.conf
########################
###### Porta 80 - Inizio
###
### - tmm2.2cg.it
### - Con accesso con .htaccess di yourl
### - e con error.log
######
<VirtualHost tmm2.2cg.it>
DocumentRoot "/var/www/html/php73"
#ServerName tmm2.2cg.it
# Parametri della struttura in php 7.3
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php73-fcgi .php
Action php73-fcgi /cgi-bin/php73.fcgi
# Parametri della cartella in PHP 7.3
<Directory /var/www/html/php73>
DirectoryIndex index.php
AllowOverride all
Require all granted
</Directory>
</VirtualHost>
Ultimo passaggio è quello di creare un file php che ci consenta di vedere la versione e cosa abbiamo come add-on
mkdir -p /var/www/html/php56
mkdir -p /var/www/html/php73
echo "<?php phpinfo(); ?>" > /var/www/html/php56/index.php
echo "<?php phpinfo(); ?>" > /var/www/html/php73/index.php
Avviamo tutti i servizi
systemctl enable httpd
systemctl enable php56-php-fpm
systemctl enable php73-php-fpm
systemctl start httpd
systemctl start php56-php-fpm
systemctl start php73-php-fpm
Il test sul browser
Andiamo a vedere che cosa accade quando digitiamo nella barra degli indirizzi i due domini:
tmm.2cg.it
tmm2.2cg.it
Se non si è installato prima si può installare il DataBase Maria DB
Nota: In caso di riavvio del server, in questa configurazione i servizi partono in modo automatico.
L'unico problema può presentarsi nel caso si MariaDB, che va avviato manualmente, ma il gestore del PHP non da problemi, partono entrambi in modo automatico
Bibliografia
Server Aruba Cloud - CentOS 7 - Installare un Web Server LAMP multi PHP (PHP 5.6 e PHP 7.3)
Server Aruba Cloud - CentOS 7 - Installare Virtual Host SSL su Apache2 (porta 443)
Server Aruba Cloud - CentOS 7 - Installare i certificati SSL di Let's Encrypt
Commenti