9. FAGUNGIS
Un insieme di “task” FABRIC che hanno il
compito di installare e configurare un intero
ambiente per il vostro progetto DJANGO.
Denis Darii
10. FAGUNGIS
Quindi, vi darà la possibilità, direttamente dal
computer locale, di configurare e mettere in
produzione il progetto, pronto a ricevere visitatori
sul vostro dominio. Il tutto con un paio di semplici
comandi.
Denis Darii
12. perché ho creato
FAGUNGIS
Diversi motivi mi hanno spinto:
● DRY – non ripetere la stessa procedura per ogni sito
● Portabilità del progetto su altri server con un impegno minimo
● Evitare il login diretto sul server con root o alto utente privilegiato
● Dopo il setup, aggiornare in produzione con un solo comando
● Velocità! ( update → syncdb → migrate → collectstatic → riavvio )
● Test automatici della configurazione, SEMPRE, ad ogni comando
● Modularità e flessibilità
Denis Darii
16. configuriamo
FAGUNGIS
Creiamo un file chiamato fabfile.py dove settare tutti I parametri del
nostro progetto.
$ touch fabfile.py
Meglio ancora! Copiare il file example_fabfile.py collocato nella
cartella “fagungis” dentro al PYTHONPATH:
$ cp /path/to/fagungis/example_fabfile.py fabfile.py
Oppure direttamente dal repository di FAGUNGIS:
$ wget -O fabfile.py https://bitbucket.org/DNX/django-fagungis/raw/tip/fagungis/example_fabfile.py fabfile.py
Questo file è meglio tenerlo nella root del vostro progetto django, sotto controllo versione,
in quanto le modifiche a questo andranno a rispecchiare le modifiche al vostro progetto.
Denis Darii
17. configuriamo
FAGUNGIS
Apriamo il file appena creato e apportiamo delle modifiche in base alle
nostre esigenze.
Ogni parametro è anticipato da una o più righe di commento che
spiegano lo scopo di questo.
Si possono tenere i valori di default, cambiando solo:
● Nome del progetto, esempio “djangoday”
● Repository
● Host del server
● Dominio, esempio “djangoday.it”
Denis Darii
18. configuriamo
FAGUNGIS
Salvare il file e la configurazione di FAGUNGIS è finità!
Ora siamo pronti a lanciare il primo SETUP.
Denis Darii
19. usare
FAGUNGIS
Per avviare il setup, basta lanciare un semplice:
$ fab djangoday setup
Per prima cosa, in un qualsiasi task FAGUNGIS, viene testata la vostra
configurazione. In caso di errori, FAGUNGIS si ferma e li mostra a
video.
Denis Darii
20. usare
FAGUNGIS
Se il test della configurazione è passato, osserverete sul monitor un
elenco contenente i nomi dei parametri e i rispettivi valori.
Verificate e confermate di voler andare avanti con una “Y” e INVIO.
A questo punto sul monitor si vedranno scorrere tutti i comandi che
FAGUNGIS lancia sul server remoto e il loro output.
Denis Darii
21. usare
FAGUNGIS
Alla fine dell'esecuzione:
...
djangoday correctly started!
[13:48:44] Setup finished in 188 seconds
Done.
Denis Darii
22. usare
FAGUNGIS
Da adesso in poi, per portare in produzione le modifiche al
vostro progetto, basterà un semplice:
$ fab djangoday deploy
Denis Darii
23. usare
FAGUNGIS
Ora aprire un browser e accedere a http://djangoday.it
A questo punto, il nostro sito è on line!
Denis Darii
25. capire
FAGUNGIS
SETUP ha fatto per noi:
● installato le dipendenze di sistema(pacchetti Debian/Ubuntu)
● creato l'utente django
● creato la struttura delle cartelle(/opt/django/, logs/ scripts/ ...)
● clonato il repository del progetto
● creato il virtualenv
● installato Gunicorn
● installato le dipendenze del progetto(con pip -r requirements.txt)
● caricato le configurazioni per nginx e supervisor
● caricato lo script per far partire gunicorn
Denis Darii
26. capire
FAGUNGIS
DEPLOY fa per noi:
● aggiorna il codice del progetto
● installa le dipendenze (con pip -r requirements.txt)
● carica le configurazioni per nginx e supervisor
● carica lo script per far partire gunicorn
● prepara il progetto django (syncdb, migrate, collectstatic)
● prepara la cartella media (la crea e verifica i permessi)
● riavvia supervisor
Denis Darii
27. capire
FAGUNGIS
Recapitolando cosa abbiamo adesso?
Denis Darii
30. capire
FAGUNGIS
visitatore
http://djangoday.it
Porta 80 ^/media/
non ^/static/
Risponde media
media favicon.ico
NGINX
Denis Darii
31. capire
FAGUNGIS
visitatore
http://djangoday.it
Porta 80 ^/media/
non ^/static/
Risponde media
media favicon.ico
NGINX
progetto
djangoday
Denis Darii
32. capire
FAGUNGIS
visitatore
http://djangoday.it
Porta 80 ^/media/
non ^/static/
Risponde media
media favicon.ico
NGINX
progetto
djangoday
Denis Darii
33. capire
FAGUNGIS
visitatore
http://djangoday.it
Porta 80 ^/media/
non ^/static/
Risponde media
media favicon.ico
NGINX
proxy_pass
Forward della richiesta
porta 8100
GUNICORN progetto
workers djangoday
Denis Darii
34. capire
FAGUNGIS
visitatore
http://djangoday.it
Porta 80 ^/media/
non ^/static/
Risponde media
media favicon.ico
NGINX
proxy_pass
Forward della richiesta
SUPERVISOR
porta 8100
GUNICORN progetto
workers djangoday
Denis Darii
36. testare
FAGUNGIS
Fagungis Testproject
https://bitbucket.org/DNX/django_fagungis_testproject
Un seplice progetto Pinax
Denis Darii
37. FAGUNGIS TESTPROJECT
$ hg clone https://bitbucket.org/DNX/django_fagungis_testproject
$ cd django_fagungis_testproject
# fabfile.py presente
$ virtualenv /tmp/testenv
$ source /tmp/testenv/bin/activate
(testenv)$ pip install -r requirements/project.txt
# cambiare env.nginx_server_name
# oppure aggiungere in /etc/hosts <server-ip> fagungis.test
$ fab fagungis_test setup
Ora aprite il vostro browser e navigate fino a http://fagungis.test
Denis Darii
38. FAGUNGIS
Futuri Sviluppi
● Supporto https (SSL NGINX)
● Configurare sottodomini
● Scaricare i log + visualizzazione
● Monitoraggio remoto(real time, status, meminfo...)
● Migliorare il feedback
● Consigli su come risolvere eventuali errori
● Configurare il numero di worker_connections per gunicorn
● Supporto per Git-SVN-bzr
● Caricamento diretto dal vostro workspace (senza hg)
● Molto altro ancora...
Denis Darii
39. FAGUNGIS
Per rimanere in contatto,
seguiteci su:
https://bitbucket.org/DNX/django-fagungis/
o
https://github.com/DNX/django-fagungis/
Il vostro contributo sarà sempre gradito!
Denis Darii
40. FAGUNGIS
Vorrei ringraziare in modo particolare:
Massimiliano Ravelli e Marco Cellarosi
Denis Darii