WebServer locale – Linux, Apache, MySql e PHP.


Per chi lavora, per chi studia o semplicemente vuole avvicinarsi al mondo dello sviluppo per il web è importante avere sempre a disposizione un proprio WebServer personale, ovvero in locale, per poter testare il proprio lavoro o i propri progressi nello studio in tempo reale.

Per fare questo ci serviamo di una combinazione chiamata LAMP appunto! e nello spercifico, Linux che è il sistema operativo (nel nostro caso sceglieremo una versione Debian based -> Ubuntu), Apache che è il server vero e proprio ovvero l’applicazione che gestisce il protocollo per lo scambio dei dati nella rete (HTTP/HTTPS), MySql  è  il database open-source più diffuso al mondo e PHP che è un linguaggio di scripting interpretato, il suo scopo è quello di processare gli ipertesti per ottenere pagine dinamiche.

Per installare il nostro web server possiamo scegliere due vie, quella facile con l’utilizzo di un pacchetto chiamato tasksel che fornisce una semplice interfaccia per gli utenti che desiderano configurare il proprio sistema per svolgere un’attività specifica, infatti è in grado di installare diversi ambienti grafici e/o servizi.

Quindi apriamo il terminale e come prima cosa assicuriamoci di avere il sistema aggiornato :

sudo apt-get update && apt-get upgrade

nell’ultima release di ubuntu la 16.04 “apt-get” è stato deprecato ma continua ad esistere, al suo posto viene introdotto “apt” che dal lato utente rimane sostanzialmente lo stesso, nella guida quindi userò “apt”, per quelli che usano release datate basta aggiungere “-get” alle righe.

sudo apt update && sudo apt upgrade

Quindi installiamo tasksel:

sudo apt install tasksel

Avviamo l’interfaccia di tasksel

sudo tasksel
tasksel

Fig.1

Scorriamo fino alla voce “LAMP server” selezioniamo con la barra spaziale, quindi spostimoci su OK con il tasto TAB, durante l’installazione ci verrà chiesto di inserire la password del database MySql.

Una volta terminata la configurazione il server è pronto a funzionare.

Regola il firewall per consentire il traffico web
Quindi, supponendo di aver seguito le istruzioni iniziali di configurazione del server e abilitato il firewall UFW, assicurarsi che il firewall consenta il traffico HTTP e HTTPS. Puoi verificare che UFW abbia un profilo di applicazione per Apache in questo modo:

sudo ufw app list

Output:

Applicazioni disponibili:
  Apache
  Apache Full
  Apache Secure
  CUPS
  Samba

Se è elencato il profilo Apache Full, visualizziamo le informazioni per vedere se è ablitato il traffico alle porte 80 e 443:

sudo ufw app info "Apache Full"

Output:

Profilo: Apache Full
Titolo: Web Server (HTTP,HTTPS)
Descrizione: Apache v2 is the next generation of the omnipresent Apache web
server.

Porte:
80,443/tcp

Consenti traffico HTTP e HTTPS in entrata per questo profilo:

sudo ufw allow in "Apache Full"

se tutto è andato bene dovremmo avere un output simile a questo

Regole aggiornate
Regole aggiornate (v6)

Facciamo il primo test per verificare che Apache funzioni, quindi apriamo il browser e digitiamo http://localhost/ se è andato tutto bene visualizziamo questo:

apache

Fig.2

Per verificare PHP potremmo eseguire il classico hello world! ma credo sia meglio iniziare a prendere confidenza con i parametri di PHP, quindi eseguiremo uno script che ci permette di visualizzare tutta la configurazione.

Creiamo una pagina test.php, con nano o con il vostro editor preferito, a me personalmente piace gedit.

salviamolo in /var/www/html che è la radice predefinita del server LAMP installato su Ubuntu; qualunque essa sia la versione a cui si riferisce. Ma attenzione, per modificare i suoi file, o crearne di nuovi/eliminarli, c’è bisogno dei permessi di root, quindi:

sudo gedit /var/www/html/test.php

inseriamo:

<?php //visualizza tutte le informazioni 
phpinfo(); ?>;

Quindi apriamo il browser e digitiamo http://localhost/test.php , se tutto funziona il risultato sarà una tabella simile a quella dell’immagine, vi consiglio di soffermarvi un po a leggere il contenuto di questa tabella.

phpinfo

Fig.3

 

 

phpMyAdmin

Per chi non è abituato ad interagire con il database tramite la riga di comando è utile avere un gestore del database,  phpmyadmin  è stato creato in modo che gli utenti possono interagire con MySQL attraverso un’interfaccia web.

Installiamo dal terminale:

sudo apt install phpmyadmin

Quando appare il primo prompt , apache2 è evidenziato, ma non selezionato. Se non premete “spazio” per selezionare Apache , il programma di installazione non installerà i file necessari durante l’installazione.
Premi “spazio” , “TAB” , e quindi “ENTER ” per selezionare Apache. Selezionare sì quando viene chiesto se utilizzare dbconfig-common per impostare il database. Verrà richiesta la password di amministratore del database. Vi verrà chiesto di scegliere e confermare una password per l’applicazione phpMyAdmin.

Per accedere a phpMyAdmin apriamo il browser e digitiamo http://localhost/phpmyadmin/

phpmyadmin

Se aprendo phpMyAdmin vi trovate difronte a questo errore non vi preoccupate

mbstring

manca il modulo mbstring (Multibyte String), quindi da terminale installiamo il modulo:

 sudo apt install php-mbstring php7.0-mbstring php-gettext

 

Installazione manuale

è importante sapere che quando usiamo la procedura appena illustrata installiamo l’ultima versione dei pacchetti disponibili, il problema che potrebbe verificarsi è quello che la versione di php non è quella con la quale stiamo sviluppando.

Per verificare la versione dei pacchetti disponibili in tasksel:

tasksel --list-tasks

il task che ci interessa è “lamp-server” (per gli utenti debian si chiama “web-server”)

sudo tasksel --task-packages lamp-server

Se quelli che ci interessano non sono i pacchetti contenuti nei task di tasksel possiamo provvedere ad istallare tutto a mano e quindi prendere la strada “tortuosa” .

Iniziamo con l’installare a apache:

sudo apt install apache2

a questo punto possiamo eseguire il primo test:  http://localhost/, se tutto è andato bene il risultato è quello che vediamo nella figura 2.

Proseguiamo installando php (l’ultima stabile) ad esempio, sempre da terminale digitiamo:

sudo apt install libapache2-mod-php php php-cli php-common php-readline php-json php-mysql

Una breve descrizione dei pacchetti che abbiamo installato:

  • libapache2-mod-php – Questo pacchetto fornisce il modulo PHP 7.2 per il server web Apache 2;
  • php – metapacchetto;
  • php-cli – interprete a riga di comando per il linguaggio di scripting PHP7.2;
  • php-common – file comuni per pacchetti compilati dai sorgenti di PHP7.2;
  • php-readline – modulo readline per PHP7.2;
  • php-json – modulo JSON per PHP7.2;
  • php-mysql – modulo MySQL per PHP7.2;

sudo apt install libapache2-mod-php5 php5 php5-cli php5-common php5-mcrypt php5-readline php5-json php5-mysql

Una breve descrizione dei pacchetti che abbiamo installato:

  • libapache2-mod-php5 – Questo pacchetto fornisce il modulo PHP5 per il server web Apache 2;
  • php5 – metapacchetto;
  • php5-cli – interprete a riga di comando per il linguaggio di scripting PHP5;
  • php5-common – file comuni per pacchetti compilati dai sorgenti di PHP5;
  • php5-mcrypt – modulo MCrypt per PHP5;
  • php5-readline – modulo readline per PHP5;
  • php5-json – modulo JSON per PHP5;
  • php5-mysql – modulo MySQL per PHP5;

Terminata questa installazione è necessario riavviare apache per caricare i moduli di php:

sudo service apache2 restart

(upstart fino a 14.10)

o

sudo systemctl restart apache2.service

(systemd da 15.04)

invece:

sudo /etc/init.d/apache2 restart

riavvia apache tramite il gestore del sistema in cui ci troviamo.

A questo punto procediamo con il secondo test, verifichiamo che la versione di php sia quella che desideravamo installare, creiamo la pagina test.php con lo script che abbiamo visto prima, collochiamola sempre in /var/www/html, apriamo il browser è digitiamo http://localhost/test.php, se il risultato è quello della figura 3  possiamo proseguire con l’istallazione del database:

Ora che hai il tuo server web attivo e funzionante, è ora di installare MySQL. MySQL è un sistema di gestione di database. Fondamentalmente, organizzerà e fornirà l’accesso ai database in cui il tuo sito può memorizzare informazioni.

Usuamo di nuovo apt per installare questo software:

sudo apt install mysql-server

Quando l’installazione è completa, esegui un semplice script di sicurezza che viene preinstallato con MySQL che rimuoverà alcune impostazioni predefinite pericolose e bloccherà l’accesso al tuo sistema di database. Avvia lo script interattivo eseguendo:

sudo mysql_secure_installation

Questo ti chiederà se vuoi configurare il VALIDATE PASSWORD PLUGIN.

Nota: Se abilitato, le password che non corrispondono ai criteri specificati verranno respinte da MySQL con un errore. Ciò causerà problemi se si utilizza una password debole in combinazione con un software che configura automaticamente le credenziali utente MySQL, come i pacchetti Ubuntu per phpMyAdmin. È sicuro lasciare la convalida disabilitata, ma è necessario utilizzare sempre password complesse e univoche per le credenziali del database.

Rispondi a Y per sì, o qualsiasi altra cosa per continuare senza abilitare.

Proviamo mysql da termnale:
&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;sudo mysql

Quindi, controlla quale metodo di autenticazione utilizza ciascun account utente MySQL con il seguente comando:

SELECT user,authentication_string,plugin,host FROM mysql.user;

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *06340861EE595FA43DC4869F72D53548D0F17D2E | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

In questo esempio, puoi vedere che l’utente root si autentica di fatto usando il plugin auth_socket. Per configurare l’account di root per l’autenticazione con una password, eseguire il seguente comando ALTER USER. Assicurati di cambiare la ‘password’ con una password sicura a tua scelta:

mysql&amp;gt;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Quindi, esegui FLUSH PRIVILEGES che dice al server di ricaricare le tabelle di sovvenzione e applicare le nuove modifiche:

FLUSH PRIVILEGES;

Verifica nuovamente i metodi di autenticazione utilizzati da ciascuno dei tuoi utenti per confermare che root non si autentica più utilizzando il plug-in auth_socket:

SELECT user,authentication_string,plugin,host FROM mysql.user;

+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *4F3BC5749D35A1E215D788D593B393E0F657D8F3 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *06340861EE595FA43DC4869F72D53548D0F17D2E | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
&amp;gt;exit 

per uscire da mysql

il modulo per php lo avevamo già installato al passaggio precedente, se siete intenzionati ad istallare un altro database, ad esempio MariaDB, istallare l’apposito modulo al posto di  php5-mysql.

Installate phpMyAdmin come descritto precedentemente.

Ok il meno è fatto!

alcuni comandi per la gestione di apache

Per Ubuntu 14.04 e precedenti i comandi relativi al server apache e upstart sono:

  • sudo service apache2 start
  • sudo service apache2 stop
  • sudo service apache2 restart

Per Ubuntu 15.04 e successive, dotate di systemd:

  • sudo systemctl status apache2.service
  • sudo systemctl start apache2.service
  • sudo systemctl stop apache2.service
  • sudo systemctl restart apache2.service

 

Moduli

In apache abbiamo la possibilità di abilitare dei moduli che ci permettono di aggiungere funzionalità, ad esempio mod_rewrite che consente di “tradurre” un’URL, al fine di facilitare il compito ai motori di ricerca nell’indicizzare il nostro sito, in un’altra definita dall’utilizzatore seguendo determinate regole che vanno scritte all’interno del file di configurazione di Apache oppure dentro ad un apposito file, denominato .htaccess, che andrà uploadato all’interno della root del nostro sito web.

all’interno di /etc/apache2/ abbiamo due cartelle, mods-available che contiene tutti i moduli disponibili e mods-enabled che contiene i link dei moduli abilitati, esistono, naturalmente, dei comandi per abilitare e disabilitare i moduli da riga di comando:

abilitare il modulo

sudo a2enmod rewrite

disabilitare il modulo

sudo a2dismod rewrite

ATTENZIONE dopo ogni comando per abilitare o disabilitare un modulo è necessario riavviare apache.

Per far funzionare questo modulo abbiamo bisogno di modificare anche la configurazione di Apache  , quindi da terminale apriamo il file di configurazione di apache:

 sudo gedit /etc/apache2/apache2.conf

ed in particolare la direttiva “AllowOverride”all’interno del file  dovrà essere settata su All, grazie ad essa infatti permetteremo al Web server di utilizzare i file .htaccess che salveremo nelle directory contenente i file per cui dovranno essere riscritte le URL.

Host virtuali

Gli host virtuali consentono l’esecuzione di diversi server per diversi indirizzi IP, host o per diverse porte sulla stessa macchina. Per esempio, è possibile avere in esecuzione sullo stesso server le pagine web http://esempio.it e http://altroesempio.it.

Come prima cosa creiamo le cartelle che conterranno i nostri due progetti .

sudo mkdir -p /var/www/esempio.it
sudo mkdir -p /var/www/altroesempio.it

fin qui sono di proprietà di nostro utente root.
Se vogliamo che il nostro utente sia in grado di modificare i file nelle nostre directory web , siamo in grado di modificare la proprietà in questo modo :

sudo chown -R $USER:$USER /var/www/esempio.it
sudo chown -R $USER:$USER /var/www/altroesempio.it

La variabile $USER prenderà il valore del utente .

In questo modo, il nostro utente normale ora possiede le directory  dove sono memorizzati nostri contenuti. Dobbiamo anche modificare i nostri permessi in modo che le pagine possono essere fruite in modo corretto :

sudo chmod -R 755 /var/www

Il server web dovrebbe ora avere i permessi necessari per restituire contenuti , e l’utente dovrebbe essere in grado di creare contenuti all’interno delle cartelle necessarie .

A questo punto creiamo i file che conterranno la configurazione del VirtuaHost, nella cartella /etc/apache2/sites-available esiste un file chiamato 000-default.conf che contiene la configurazione di http://localhost, possiamo usare questo file come base per editare le configurazioni dei nostri host virtuali, vi consiglio di leggere attentamente anche i commenti del file.

Creiamo il file esempio.it.conf:

sudo gedit /etc/apache2/sites-available/esempio.it.conf

Il contenuto del nostro esempio.it.conf file dovrà essere, quindi:

&lt;VirtualHost *:80&gt;
# nome server + ServerAdmin
ServerAdmin admin@esempio.it
ServerName esempio.it
ServerAlias www.esempio.it

# Indexes + Directory Root.
DirectoryIndex index.html index.htm index.php
DocumentRoot /var/www/esempio.it/
# CGI Directory
ScriptAlias /cgi-bin/ /var/www/esempio.it/cgi-bin/
&lt;Location /cgi-bin&gt;
Options +ExecCGI
&lt;/Location&gt;

# Logfiles
#ErrorLog ${APACHE_LOG_DIR}/error.log
#CustomLog ${APACHE_LOG_DIR}/access.log combined
ErrorLog /var/www/esempio.it/error.log
CustomLog /var/www/esempio.it/access.log combined
&lt;/VirtualHost&gt;

vi rammento che nei file di configurazione le righe che iniziano con il cancelletto(#) sono dei commenti.

Creiamo il secondo file di configurazione che chiameremo altroesempio.it.conf, copiate il file precedente e modificate tutte le ricorrenze di  “esempio” con “altroesempio”, salvate e con diritti di amministratore.

sudo cp /etc/apache2/sites-available/esempio.it.conf /etc/apache2/sites-available/altroesempio.it.conf

Create le configurazioni dal punto di vista del server non ci resta che abilitarle, per gli host virtuali la struttura delle cartelle di apache è simile a quella dei moduli, abbiamo una prima cartella  sites-available che contiene le configurazioni disponibili dei virtualhost e la cartella sites-enabled che contiene i collegamenti ai file di  configurazione degli host abilitati.

Da riga di comando abilitiamo i due host:

sudo a2ensite esempio.it
sudo a2ensite altroesempio.it

Per rendere effettive le modifiche è necessario riavviare apache.

Per completezza riporto il comando per disabilitare l’host virtuale :

sudo a2dissite esempio.it

C’è un ultimo passo da compiere, dobbiamo dire al sistema che esistono degli host locali e  di indirizzare la chiamata sul VPS (virtual private server) proprio come fanno i DNS per i domini registrati .

Apriamo il file hosts da terminale :

sudo gedit /etc/hosts

 


127.0.0.1    localhost
127.0.1.1    user-my_pc

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

dopo la riga “127.0.0.1    localhost”

aggiungere le seguenti righe:

127.0.0.1 esempio.it
127.0.0.1 altroesempio.it

Salvare e riavviare il sistema .

Backup live

La priorità più importante di ogni sviluppatore  è quella di salvaguardare l’integrità del proprio lavoro,  il modo migliore è quello di avere un bakup in tempo reale (una sincronizzazione) dei nostri file, io uso il servizio di cloud storage di Dropbox, quindi i file sono allocati nella cartella :

/home/user/Dropbox/www/html

In questo modo i nostri file sono al sicuro almeno da eventuali rotture dell’hdd.

Una volta spostati i file dobbiamo dire ad apache dove sono allocati questi file e garantirne la fruibilità.

Non necessariamente nell’ordine in cui viene presentato dobbiamo: modificare la configurazione dei VirtualHost e di Httpd

apriamo il file 000-default.conf

sudo gedit /etc/apache2/sites-available/000-default.conf

modifichiamo la riga

DocumentRoot /var/www/html/

in

DocumentRoot /home/user/Dropbox/www/html/

naturalmente dovete sostituire “user” con il vostro nome utente.

Se abbiamo attivato degli altri  host  facciamo la stessa operazione per tutti i file .conf

adesso dobbiamo dare ad apache le direttive riguardanti la cartella, apriamo il file apache2.conf

sudo gedit /etc/apache2/apache2.conf

 

cerchiamo il contenitore  <Directory> che contiene un gruppo di direttive che si applicano solo alla directory dichiarata , alle sue sotto-directory , e al loro contenuto :

&lt;Directory /var/www/&gt;
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
&lt;/Directory&gt;

modifichiamo in questo modo

&lt;Directory /home/user/Dropbox/www/&gt;
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
&lt;/Directory&gt;

Buon Sviluppo a tutti!!

Lascia un commento