mercoledì 12 gennaio 2011

Installare Joomla in locale su Ubuntu step by step con virtual host

Ma come, mi direte, ti dai alla concorrenza ? :-DDD
E poi, con tutti gli how to che ci sono per Ubuntu ?
Si, ma stavolta è per una buona causa (e per risolvere qualche piccolo tips... ;-) )
In ogni caso, sarò più breve dell'altra volta :-P

Installare LAMP


Aprire sistema --> amministrazione --> gestore pacchetti (synaptic)
Selezionare modifica --> selezionare per attività
Si aprirà una finestra: spuntare la voce LAMP server e dare OK.

In caso questa opzione non sia presente si può seguire la seguente procedura
NB marcatevi i dati (specialmente le password) che vi verranno via via richiesti, o diventerete matti :-| .


Installare Apache

Apache è il server web per eccellenza ed è quello che stiamo per installare, ma non è l'unico: ci sono anche Cherokee, Lighthttp, ecc., a vostra scelta.
Da terminale dare:

sudo apt-get install apache2

--> password root


Testare Apache

Copiare (o digitare) nello spazio URL del browser:

http://localhost/

Dovrà comparire la scritta "It works!"

Installare PHP

Da terminale dare:

sudo apt-get install php5 libapache2-mod-php5

Quindi riavviare Apache. Da terminale dare:

sudo /etc/init.d/apache2 restart


Verificare installazione PHP

Da terminale dare:

sudo gedit /var/www/testphp.php

per aprire un file chiamato phptest.php.
Copiare ed incollare entro il file la stringa:

<?php phpinfo(); ?>

Salvare e chiudere il file
Per verifica, copiare (o digitare) nello spazio URL del browser:

http://localhost/testphp.php


Installare MySQL

Da terminale, dare:

sudo apt-get install mysql-server

MySQL dovrebbe partire in automatico per richiedere l'impostazione della password dell'amministratore del database server. Qualora non succedesse, allora, da terminale dare:

mysql -u root

Al prompt di mysql inserire la seguente linea, inserendo al posto di yourpassword la nostra password scelta

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('yourpassword');

NB1 il punto e virgola finale è essenziale per comunicare a mysql la chiusura del comando

NB2 in caso di problemi con la password di mysql possiamo riconfigurare il servizio dando da terminale

sudo dpkg-reconfigure mysql-server

--> /// passo opzionale: se vogliamo pubblicare nella nostra rete privata (o in internet) il nostro server, va modificato il “Bind Address”, cioè l'indirizzo di rete di loopback del nostro pc al fine di farlo riconoscere dagli altri computer; nel caso di una rete privata è sufficiente inserire l'indirizzo di rete stabilito dal router per il nostro pc (ad es. 192.168.1.4).
Da terminale dare:

gksudo gedit /etc/mysql/my.cnf

Cambiare quindi la linea

bind-address = 127.0.0.1

sostituendo 127.0.0.1 (tipicamente il localhost) con l'indirizzo adeguato. Fine passo opzionale /// <--
.

Installare PhpMyAdmin

PhpMyAdmin è un ottimo (e semplice) tool lanciabile da browser per gestire il database server MySQL
Da terminale dare:

sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin

Per far si che php possa lavorare con mysql bisogna modificare il file php.ini.
Per editarlo, dare da terminale:

gksudo gedit /etc/php5/apache2/php.ini

e decommentiamo (cioè togliamo il punto e virgola iniziale) dalla linea

;extension=mysql.so

(NB per trovare rapidamente la linea possiamo usare la funzione Trova... dal menu Cerca di Gedit inserendo la parola extension)
così da farla diventare:

extension=mysql.so

Salviamo e usciamo da Gedit.
Riavviamo infine Apache. Da terminale dare:

sudo /etc/init.d/apache2 restart

Verifichiamo il funzionamento digitando nel browser

http://localhost/phpmyadmin

Digitiamo la password per loggarci come amministratore di server database ed inseriamola nella finestra che comparirà.

Fine installazione LAMP

Installare Joomla
Scarichiamo la versione di Joomla che ci interessa (supponiamo che si chiami Joomla_1.x.x_ita - Stable) in una cartella qualunque (ad es. /home/utente/scaricati) e scompattiamola.
Per scompattarla, possiamo farlo come utente da terminale

cd /home/utente/scaricati

tar -xvzf Joomla_1 .x.x _ita – Stable.tgz

oppure possiamo farlo graficamente.
Apriamo Nautilus (o Dolphin o Konqueror o altro window manager), spostiamoci in scaricati, diamo tasto destro sul file archivio e digitiamo 'Estrai qui' (con Konqueror, scegliamo l'opzione 'autorileva la sottocartella')
Quindi apriamo Nautilus in modalità root (da terminale: sudo nautilus) o l'ottimo Krusader in modalità root (si, lo so, usare il window manager per fare 'ste cose non è da geek, ma chissenefrega, ogni tanto bisogna pur cambiare, no ? :-D ), copiamo la cartella estratta dentro la cartella /var/www/ e rinominiamola come ci interessa (ad es miojoomla)
Diamo quindi ad Apache (ricordiamoci che il trasferimento lo abbiamo fatto come root, cui appartiene la cartella) il controllo della cartella miojoomla modificando il proprietario ed il gruppo.
Verifichiamo con

cat /etc/group

che esista www-data, cioè l'utente speciale, con relativo gruppo, che Apache crea per scrivere nella cartella /var/www/.
Una volta verificato consegnamogli il controllo della cartella dando:

sudo chown -R www-data:www-data /var/www/miojoomla


Creare il database mysql per Joomla e l'utente amministratore del database
NB // --> Nota: Joomla è impostato con set di caratteri UTF. Spesso invece il database MySQL database viene impostato di default con collation latin1_xxxxxx_ci e ciò può causare problemi di visualizzazione nell'utilizzo di caratteri non latini (ad es cirillico).
Per fare in modo che Jomla lavori correttamente è necessario scegliere, all'atto della creazione del database, il collation UTF-8 Unicode (utf8) (va bene utf8-general-ci)
In caso di database già creati, sarà necessario effettuare il back up del database (non si sa mai) ed in seguito lanciare, per ogni tabella del database, la seguente query SQL al fine di modificarne l'impostazione:

ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

fine nota <-- //

Nel browser digitiamo

http://localhost/phpmyadmin


inseriamo il nome scelto per il database (ad es joomladb), verifichiamo la collation utf8-general-ci e diamo Crea

Quindi selezioniamo il database nell'elenco sulla sinistra, scegliamo 'Privilegi', selezioniamo 'Crea un nuovo utente' (sarà l'utente che gestirà il database di Joomla durante l'amministrazione del sito Joomla)
Nella schermata inseriamo nel campo 'nome' il nome scelto (ad es joomlauserdb), nel campo 'host' inseriamo localhost, e nei campi password la password scelta (ad es (joomlapwdb), lasciando i grant (i privilegi) così come impostati di default, quindi salviamo.

NB la stessa operazione può essere fatta da linea di comando dando

mysql -u root -

per entrare come amministratore di mysql. Quindi (enter dopo ogni riga):

CREATE DATABASE joomladb;

GRANT ALL on joomladb.* TO ’ joomlauserdb’@’localhost’ IDENTIFIED BY ’joomlapwdb ’;

FLUSH PRIVILEGES;

EXIT;

Installare Joomla
Digitiamo


http://localhost/miojoomla ed avviamo l'installazione

Al termine, sarà necessario rimuovere la cartella installation presente dentro /var/www/miojoomla.
Potremo farlo tramite sudo Nautilus o Krusader root, oppure da terminale

sudo rm - R / var/www/miojoomla/installation

Fatto ! :-)


Per chi volesse trasferire in locale una installazione già esistente sul server sarà necessario:
- trasferire la cartella del sito dal server remoto via ftp in una cartella utente locale
- spostare (come root) la cartella in /var/www/
- trasferire i permessi della cartella ad Apache
- scaricare il database del sito, ad es via phpmyadmin fornito dal server del sito con l'opzione esporta (semprechè non sia stato impostato già il back up automatico quotidiano via email)
- importare il database nel server mysql locale con phpmyadmin locale
- verificare l'avvenuta associazione loggandosi nel sito come amministratore

PS addendum del 13/07/2011

Gestione dei virtual host

E' una cosa abbastanza semplice e nota, ma un breve riassunto posizionato qui penso possa essere di utilità, specie per chi trasferisce più di un sito da remoto a locale.

Qui una valida guida

Passo primo: verifichiamo che apache2 sia in grado di vedere i virtual host.

sudo gedit /etc/apache2/apache2.conf

la linea finale

Include /etc/apache2/sites-enabled/

deve essere decommentata (cioè non deve iniziare con un #)
Se c'è, rimuoviamolo e salviamo.
In questo modo apache2 è in grado di leggere i puntatori dei files di configurazione presenti nella cartella /etc/apache2/sites-enabled/ che corrispondono ai virtual host che ci interessano.

Passo secondo: creiamo i files di configurazione dei virtual host

Assumiamo che:
- la cartella contenente il sito (o che vogliamo contenga il sito se dobbiamo ancora crearlo) sia nominata miosito1
- la cartella sia posizionata entro la cartella /var/www - NB solo root ed apache2 possono scrivere dentro questa cartella - è possibile spostare la cartella in questa posizione con un file manager con privilegi di root, dando ad esempio sudo nautilus
- il proprietario della cartella miosito1 sia apache2 ed abbia su questa ed il suo contenuto i permessi adeguati (755); lo si può verificare, ed eventualmente modificare, graficamente chiedendo le proprietà alla cartella con il sudo nautilus di prima, oppure nel caso in cui si voglia usare la console diamo:

sudo chown -R www-data:www-data /var/www/

Creiamo a questo punto il file di configurazione di miosito1

sudo gedit /etc/apache2/sites-avaiable/miosito1

ed inseriamo 

<VirtualHost miosito1>

ServerAdmin webmaster@localhost
ServerName miosito1
#We want to be able to access the web site using www.miosito1 or miosito1
ServerAlias www.miosito1
DocumentRoot /var/www/miosito1
Errorlog /var/log/apache2/error.log
#if using awstats
ScriptAlias /awstats/ /usr/lib/cgi-bin/
#we want specific log file for this server
CustomLog /var/log/apache2/other_vhost_access.log combined

</VirtualHost>

Verifichiamo che nella cartella /etc/apache2/sites-enabled sia presente il link simbolico al file miosito1 (che abbiamo creato nella cartella sites-avaiable); se non ci fosse, creiamolo.

Passo terzo: creiamo gli alias, in modo da far capire al sistema di cercare il sito nella macchina locale e non in rete

sudo gedit /etc/hosts

ed aggiungiamo

127.0.0.1 miosito1
127.0.0.1 www.miosito1

quindi salviamo. In realtà non servono entrambe le linee, ma se vogliamo che il server trovi comunque la nostra cartella lasciamocele tutte e due, che non si sa mai :-).

Passo quarto: abilitiamo il virtual host

sudo a2ensite miosito1

//////////////// Nel caso in cui avessimo bisogno di disabilitarlo
//////////////// sudo a2dissite miosito1

infine riavviamo apache2

sudo /etc/init.d/apache2 restart

Fatto. Carichiamo il sito, e l'eventuale database, andiamo nel browser e digitiamo

http://localhost/miosito1

ed il sito magicamente comparirà

9 commenti:

  1. Sei un grande, grazie mille!

    RispondiElimina
  2. Guida perfetta, grazie 1000!

    Vorrei aggiungere una cosa; in caso ricevete un errore 404 digitando http://localhost/phpmyadmin è perchè diverse versioni di ubuntu non creano il link nella cartella /var/www/ quindi è necessario farlo a mano digitando "sudo ln -s /usr/share/phpmyadmin /var/www"

    Voglio farti i complimenti perchè spieghi passo passo i procedimenti senza dare una lista di comandi da eseguire come robot e dando agli utenti modo di capire cosa stanno facendo! Continua così!! :D

    RispondiElimina
  3. Ciao...
    Posso fare una domanda?
    Ho installato tutto su ubuntu, che uso come server web.
    Dal pc accedo e vedo il sito in joomla, tutto ok.
    Vedo anche la parte administrator, e ho impostato Dreamweaver per gestire il sito, tutto bene.
    Ho scaricato un template da template.joomla.it.
    Però la cartella di quel template, all'interno delle cartelle di joomla ha i permessi settati in modo che io non possa moficarli.
    Può modificarli solo www-data che, se non sbaglio, è Apache.
    Quindi dal computer con ubuntu non posso neanche modificare un logo, e nemmeno da Dreamweaver mi permette di caricare i file in quella cartella.
    In sostanza posso solo modificare il sito dal pannello amministratore di joomla.
    Ho provato con tutti i chmod possibili, ricorsivi e non da terminale dalla macchina con ubuntu, ma i permessi sono sempre quelli.
    Ah, aggiungo che lo stesso template installato sul mio portatile in locale (una Mac con Mamp come server locale) è modificabilissimo, e anche su un sito che ho già pubblicato con lo stesso template sui server di aruba (linux) è modificabile, quindi non è colpa del template.
    Scusate se sono stato prolisso ma volevo spiegare bene il problema.
    Qualcuno ha delle idee su cosa io possa fare?
    Grazie mille.
    Daniele

    RispondiElimina
  4. ciao, interesante il tuo doc su come preparare l'enviroment per ospitare joomla.
    seguendo il tuo piccolo manuale, quando arrivo al task dove chidi di verificare il funzionamente di phpmyadmin, apache mi da errore 404 pagina non trovata. puoi aiutarmi?

    grazie giacomo
    jakortis@gmail.com

    RispondiElimina
  5. scusatemi, ma solo ora o travato la soluzione postata da EugenioZ. grazie a tutti

    RispondiElimina
  6. Ciao,
    Ho seguito la tua guida, l'installazione tutto ok, solo che non riesco ad installare nuovi template.

    Mi da il messaggio di errore

    Attenzione: fallito spostamento del file!
    Tipo di archivio sconosciuto

    Ma il template funziona correttamente.

    Mi sapresti dire il perchè??

    Grazie

    RispondiElimina
    Risposte
    1. devi cambiare il proprietario della directory www, come da comando sopra descritto.
      Ciao

      Elimina
  7. scusate l'ignoranza... ma nella sezione:
    Creare il database mysql per Joomla e l'utente amministratore del database

    quando apro http://localhost/phpmyadmin
    che nome utente devo iserire per entrare? la password ce l'ho... ma il nome utente?
    c'è qualche anima pia che può risolvermi questo dubbio?

    RispondiElimina
  8. Complimenti per la chiarezza: molto importante, per chi non è esperto di apache, la nota su apache2:
    sudo chown -R www-data:www-data /var/www/miojoomla
    che non ho trovato su nessuna delle altre guide che ho consultato.
    Grazie per il tempo che ho risparmiato ....

    RispondiElimina