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 :
[code]sudo apt-get update apt-get upgrade[/code]
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.
[code]sudo apt update sudo apt upgrade[/code]
Quindi installiamo tasksel:
[code]sudo apt install tasksel[/code]
Avviamo l’interfaccia di tasksel
[code]sudo tasksel[/code]
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:
[code]sudo ufw app list[/code]
Output:
[code] Applicazioni disponibili: Apache Apache Full Apache Secure CUPS Samba [/code]
Se è elencato il profilo Apache Full, visualizziamo le informazioni per vedere se è ablitato il traffico alle porte 80 e 443:
[code]sudo ufw app info "Apache Full"[/code]
Output:
[code]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[/code]
Consenti traffico HTTP e HTTPS in entrata per questo profilo:
[code] sudo ufw allow in "Apache Full" [/code]
se tutto è andato bene dovremmo avere un output simile a questo
[code]Regole aggiornate Regole aggiornate (v6)[/code]
Facciamo il primo test per verificare che Apache funzioni, quindi apriamo il browser e digitiamo http://localhost/ se è andato tutto bene visualizziamo questo:
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:
[code]sudo gedit /var/www/html/test.php[/code]
inseriamo:
[code language="php"] <?php //visualizza tutte le informazioni phpinfo(); ?> [/code]
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.
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:
[code]sudo apt install phpmyadmin[/code]
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/
Username : phpmyadmin
Pwd:
Se aprendo phpMyAdmin vi trovate difronte a questo errore non vi preoccupate
manca il modulo mbstring (Multibyte String), quindi da terminale installiamo il modulo:
[code] sudo apt install php-mbstring php-gettext[/code]
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:
[code]tasksel --list-tasks[/code]
il task che ci interessa è “lamp-server” (per gli utenti debian si chiama “web-server”)
[code]sudo tasksel --task-packages lamp-server[/code]
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:
[code]sudo apt install apache2[/code]
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:
[code]sudo apt install libapache2-mod-php php php-cli php-common php-readline php-json php-mysql[/code]
Una breve descrizione dei pacchetti che abbiamo installato:
- libapache2-mod-php – Questo pacchetto fornisce il modulo PHP per il server web Apache 2;
- php – metapacchetto;
- php-cli – interprete a riga di comando per il linguaggio di scripting PHP;
- php-common – file comuni per pacchetti compilati dai sorgenti di PHP;
- php-readline – modulo readline per PHP;
- php-json – modulo JSON per PHP;
- php-mysql – modulo MySQL per PHP;
Terminata questa installazione è necessario riavviare apache per caricare i moduli di php:
[code]sudo service apache2 restart[/code]
(upstart fino a 14.10)
o
[code]sudo systemctl restart apache2.service[/code]
(systemd da 15.04)
invece:
[code]sudo /etc/init.d/apache2 restart[/code]
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:
[code]sudo apt install mysql-server[/code]
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:
[code]sudo mysql_secure_installation[/code]
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:
[code]sudo mysql[/code]
Quindi, controlla quale metodo di autenticazione utilizza ciascun account utente MySQL con il seguente comando:
[code]SELECT user,authentication_string,plugin,host FROM mysql.user;[/code]
+------------------+-------------------------------------------+-----------------------+-----------+
| 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:
[code]ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';[/code]
Quindi, esegui FLUSH PRIVILEGES che dice al server di ricaricare le tabelle di sovvenzione e applicare le nuove modifiche:
[code]FLUSH PRIVILEGES;[/code]
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:
[code]SELECT user,authentication_string,plugin,host FROM mysql.user;[/code]
+------------------+-------------------------------------------+-----------------------+-----------+
| 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)
[code]exit [/code]
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
[code]sudo a2enmod rewrite[/code]
disabilitare il modulo
[code]sudo a2dismod rewrite[/code]
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:
[code] sudo gedit /etc/apache2/apache2.conf[/code]
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 .
[code]sudo mkdir -p /var/www/esempio.it[/code]
[code]sudo mkdir -p /var/www/altroesempio.it[/code]
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 :
[code]sudo chown -R $USER:$USER /var/www/esempio.it[/code]
[code]sudo chown -R $USER:$USER /var/www/altroesempio.it[/code]
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 :
[code]sudo chmod -R 755 /var/www[/code]
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:
[code]sudo gedit /etc/apache2/sites-available/esempio.it.conf[/code]
Il contenuto del nostro esempio.it.conf file dovrà essere, quindi:
[code] VirtualHost *:80 # 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/ Location /cgi-bin Options +ExecCGI /Location # 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 [/code]
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.
[code] sudo cp /etc/apache2/sites-available/esempio.it.conf /etc/apache2/sites-available/altroesempio.it.conf [/code]
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:
[code]sudo a2ensite esempio.it[/code]
[code]sudo a2ensite altroesempio.it[/code]
Per rendere effettive le modifiche è necessario riavviare apache.
Per completezza riporto il comando per disabilitare l’host virtuale :
[code]sudo a2dissite esempio.it[/code]
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 :
[code]sudo gedit /etc/hosts[/code]
[code] 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 [/code]
dopo la riga “127.0.0.1 localhost”
aggiungere le seguenti righe:
[code] 127.0.0.1 esempio.it 127.0.0.1 altroesempio.it [/code]
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
[code]sudo gedit /etc/apache2/sites-available/000-default.conf[/code]
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
[code]sudo gedit /etc/apache2/apache2.conf[/code]
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 :
[code]Directory /var/www/ Options Indexes FollowSymLinks AllowOverride All Require all granted /Directory[/code]
modifichiamo in questo modo
[code]Directory /home/user/Dropbox/www/ Options Indexes FollowSymLinks AllowOverride All Require all granted /Directory[/code]