Una nuova postazione di sviluppo con Ubuntu LAMP. L’acronimo LAMP indica la presenza di: Linux, Apache, Mysql, Php e varie ed ventuali. E’ un acronimo oramai storico, e apache potrebbe tranquillamente essere sostituito da Enginx, o se ti piace qualcos’altro di cui non ho ancora sentito parlare. In questo articolo mi tengo sul classico e uso Apache .
Vediamo una serie di passaggi per installare in una postazione ubuntu una LAMP funzionante. La macchina di riferimento ha una ubuntu 16.04, in ogni caso il processo è simile in altre versioni. Per altre release di Linux invece i comandi potrebbero variare da leggermente a leggi il manuale.
Andiamo ad iniziare, su questa postazione basta un comando per l’installazione di tutti i pacchetti necessari:
$ sudo apt-get install lamp-server^
E’ importante notare il carattere ^ alla fine del comando, serve a specificare che si sta installando un metapacchetto. Ma se fai copia e incolla della stringa non dovresti avere problemi.
L’unica cosa che ti verrà espressamente richiesta durante l’installazione è una password da assegnare all’utente root del database MySql. Mettine una robusta e segnatela per utilizzarla quando sarà necessario.
Dopo qualche minuto, al termine dell’installazione sarà possibile fare il primo test, con il browser preferito si accede al IP locale: http://127.0.0.1 se tutto è andato a buon fine comparirà la pagina di default installata dal server apache.
Virtualhost
Ora che la nostra LAMP è pronta, passiamo ora alla configurazione di qualche Virtualhost. Di default apache presenta il sito che trova al seguente path: /var/www potremmo servirci di questa url, sovrascrivendo di volta in volta con quello che ci serve. Dipende solo dalla quantità di materiale su cui stiamo lavorando.
Personalmente trovo più utile utilizzare la strategia dei virtualhost. Creo un virtualhost per ogni progetto su cui sto lavorando, faccio in modo che punti direttamente alla directory di sviluppo, che generalmente è già predisposta con una struttura del tutto simile a quella che troverà sul server di produzione.
Vediamo i passaggi necessari. Assumiamo alcune convenzioni che mi serviranno per spiegarti la struttura di riferimento: il nome dell’utente è utentepippo, nella home di questo utente abbiamo una cartella Sviluppo , dentro questa cartella ci sono i vari progetti in fase di sviluppo. Ogni cartella rappresenta un progetto diverso, supponiamo di avere progetto01 e progetto02. Ogni progetto ha due sottocartelle html e logs . Sembra complicato ma fin’ora ho solo descritto un esempio per analizzare poi la configurazione. La struttura che si presenta nella /home/utentepippo/ sarà la seguente:
Sviluppo/ ├── progetto01 │ ├── html │ │ └── index.html │ └── logs └── progetto02 ├── html └── logs
Di diverso rispetto quello che ho descritto è che nel punto adatto del progetto01 ho aggiunto un file html.
Per preparare la configurazione del nostro primo virtualhost partiamo dal file di configurazione di default fornito da apache, ne eseguiamo una copia per poi andarlo a modificare, il file che ci serve è di solito denominato 000-default.conf , posizioniamoci nella directory apposita e creiamo la nostra copia:
$ cd /etc/apache2/sites-available/ $ ls 000-default.conf default-ssl.conf $ sudo cp 000-default.conf progetto01.conf
Ho chiamato il nuovo file con un chiaro riferimento al mio progetto01, fino a che sono due progetti in croce questo non ha tanta importanza, ma quando cominciano a diventare da qualche decina, ad un centinaio perdersi diventa facile. E’ opportuno quindi iniziare da subito a tenere qualche regola, come ad esempio ricordare nel nome del file di configurazione il progetto al quale si riferisce, oppure il nome del dominio a cui si riferisce. L’importante è darsi una regola e rispettarla per semplificarsi la vita.
Andiamo ad editare il nuovo file, creando la configurazione che ci serve: sudo gedit progetto01.conf
<VirtualHost *:80> ServerName progetto01.locale.it ServerAdmin webmaster@localhost DocumentRoot "/home/utentepippo/Sviluppo/progetto01/html" #ErrorLog ${APACHE_LOG_DIR}/error.log #CustomLog ${APACHE_LOG_DIR}/access.log combined ErrorLog /home/utentepippo/Sviluppo/progetto01/logs/error.log CustomLog /home/utentepippo/Sviluppo/progetto01/logs/access.log combined #per apache2 2.4 <Directory "/home/utentepippo/Sviluppo/progetto01/html"> Options FollowSymLinks Require all granted </Directory> </VirtualHost>
Questa configurazione è semplice e ridotta all’osso. Ho assegnato un ServerName con cui accedere tramite il browser, occorre inserire nel file /etc/hosts l’opportuna mappatura. Ho definito i vari path necessari, se osservi troverai tutti i dettagli che abbiamo descritto qualche riga sopra. Ho lasciato la doppia configurazione per i file di log, quella suggerita da apache che vedi commentata, che memorizza i logs nel percorso standard. Per mia comodità preferisco separare i logs per ogni progetto, ed averli direttamente nella directory di sviluppo. Per questo motivo ho creato la directory logs nella mia struttura, deve essere creata prima di attivare questa configurazione altrimenti il server apache darà qualche avviso di errore.
Andiamo a modificare il file di host mediante sudo gedit /etc/hosts ed aggiungiamo la seguente riga:
127.0.0.1 progetto01.locale.it
Anche qui nulla di nuovo, mappiamo sul IP locale il nuovo nome del server.
Arrivati a questo punto si procede all’attivazione della nuova configurazione e successivamente si riavvia il servizio apache:
$ sudo a2ensite progetto01.conf $ sudo service apache2 reload $ ls /home/utentepippo/Sviluppo/progetto01/logs access.log error.log
Il primo comando a2ensite (apache2 enable site) crea un link simbolico alla nostra configurazione, esiste un comando analogo per disabilitare un sito. Con il secondo comando si ricarica il demone apache2 forzandolo a ricaricare le configurazione attive e quindi anche quella appena creata per progetto01.
Ho poi controllato la cartella dei logs del progetto01, se tutto era andato per il verso giusto all’avvio di apache2 sono stati creati i due file di log inseriti nella configurazione, per il momento vuoti.
Ora non rimane che aprire un browser e puntarlo a progetto01.locale.it deve comparire il messaggio che abbiamo messo nel file di esempio.
Ora si riparte
Fatto il primo, tutti gli altri si fanno allo stesso modo.
In questo caso parto dalla configurazione di progetto01.conf, duplico direttamente questa, ci sono poche cose da cambiare per farle puntare al progetto02, in pratica solo il nome.
Aggiungo il puntamento sul file hosts.
Abilito il sito con a2ensite.
Riavvio il servizio apache.
Controllo con il browser.
Phpmyadmin
Ora non rimane che installare questo strumento per gestire i database dalla macchina locale.
Ho trovato qualche problemino ad installare questo strumento in alcune postazioni, mentre in altre tutto è andato alla perfezione al primo tentativo. Con il semplice comando:
$ sudo apt-get install phpmyadmin
Vengono richieste alcune informazioni che non ho avuto l’accortezza di tracciare, forse alla prossima installazione aggiungerò qualcosa.
In tutti quei casi in cui si sono presentati problemi, ho dovuto rilanciare la configurazione e/o editare il file di configurazione di phpmyadmin a mano, il tutto utilizzando i seguenti comandi:
$ sudo dpkg-reconfigure phpmyadmin $ sudo vi /etc/dbconfig-common/phpmyadmin.conf
Potrebbe essere necessario riavviare il demone apache per attivare le modifiche effettuate.
Attenzione ai permessi
In alcune situazioni il sito che è stato cosi configurato localmente potrebbe avere necessità di operare scrivendo dei file sulla struttura della directory, ad esempio il compilatore dei template delle pagine Smarty nel mio caso. Occorre cambiare opportunamente i permessi delle cartelle necessarie per fare in modo che il demone apache possa scriverci. Oppure cambiare il gruppo della cartella con uno in cui apache ha i permessi.
La terza strada è associare al proprio gruppo il demone apache. Probabilmente questa è la strada che preferisco in un ambiente di sviluppo locale. Una volta fatta è attiva per ogni futuro dominio virtuale che vado ad attivare, questo apre tutta la home associata al nostro utente al demone apache.