SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
Denis Darii
   (denis.darii@gmail.com)

          presenta




DJANGO FAGUNGIS
¿ FAGUNGIS ?

       Significato?

È un'altra parola africana?




                              Denis Darii
FA+GU+NGI+S
             è un acronimo

FAbric + GUnicorn + NGInx + Supervisor




                                Denis Darii
FABRIC

Una libreria Python che semplifica l'uso di SSH per il deploy
             di applicazioni o compiti di sistema.




                                                 Denis Darii
GUNICORN

'Green Unicorn' è un server WSGI/HTTP Python per UNIX.




                                            Denis Darii
NGINX

è un web server / proxy inverso leggero ad alte prestazioni




                                               Denis Darii
SUPERVISOR

Un sistema client/server che permette agli utenti di monitorare
    e controllare diversi processi su piattaforme UNIX-like




                                                 Denis Darii
Ok!

Ma cos'è FAGUNGIS?




                     Denis Darii
FAGUNGIS

  Un insieme di “task” FABRIC che hanno il
compito di installare e configurare un intero
ambiente per il vostro progetto DJANGO.




                                        Denis Darii
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
FAGUNGIS

Perché l'ho creato?




                      Denis Darii
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
installiamo
FAGUNGIS




               Denis Darii
FAGUNGIS

Basta un semplice:

$ pip install django-fagungis
* o consultate la documentazione per vie alternative




                                                       Denis Darii
configuriamo
FAGUNGIS




               Denis Darii
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
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
configuriamo
                    FAGUNGIS

Salvare il file e la configurazione di FAGUNGIS è finità!



           Ora siamo pronti a lanciare il primo SETUP.




                                                     Denis Darii
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
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
usare
                        FAGUNGIS

Alla fine dell'esecuzione:


...
djangoday correctly started!
[13:48:44] Setup finished in 188 seconds

Done.




                                           Denis Darii
usare
                   FAGUNGIS

Da adesso in poi, per portare in produzione le modifiche al
vostro progetto, basterà un semplice:

$ fab djangoday deploy




                                                    Denis Darii
usare
                 FAGUNGIS

Ora aprire un browser e accedere a http://djangoday.it

       A questo punto, il nostro sito è on line!




                                              Denis Darii
capire
FAGUNGIS

   Si, bello!
Ma cos'ha fatto?




                   Denis Darii
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
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
capire
          FAGUNGIS



Recapitolando cosa abbiamo adesso?




                             Denis Darii
capire
FAGUNGIS
      visitatore


 http://djangoday.it




                       Denis Darii
capire
FAGUNGIS
      visitatore


 http://djangoday.it


       Porta 80
      Risponde
        NGINX




                       Denis Darii
capire
        FAGUNGIS
              visitatore


         http://djangoday.it


               Porta 80                    ^/media/
non                                        ^/static/
              Risponde         media
media                                      favicon.ico
               NGINX




                                       Denis Darii
capire
        FAGUNGIS
              visitatore


         http://djangoday.it


               Porta 80                    ^/media/
non                                        ^/static/
              Risponde         media
media                                      favicon.ico
               NGINX




          progetto
         djangoday
                                       Denis Darii
capire
        FAGUNGIS
              visitatore


         http://djangoday.it


               Porta 80                    ^/media/
non                                        ^/static/
              Risponde         media
media                                      favicon.ico
               NGINX




          progetto
         djangoday
                                       Denis Darii
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
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
FAGUNGIS



Testare tutto!




                 Denis Darii
testare
           FAGUNGIS



        Fagungis Testproject
https://bitbucket.org/DNX/django_fagungis_testproject




      Un seplice progetto Pinax




                                                   Denis Darii
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
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
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
FAGUNGIS
    Vorrei ringraziare in modo particolare:

Massimiliano Ravelli e Marco Cellarosi




                                              Denis Darii
E un ringraziamento davvero speciale...




                                   Denis Darii
Marco Beri




 Grazie!
             Denis Darii
Grazie a tutti!


              Denis Darii

Más contenido relacionado

Más de WEBdeBS

Más de WEBdeBS (8)

Django mongodb -djangoday_
Django mongodb -djangoday_Django mongodb -djangoday_
Django mongodb -djangoday_
 
Virtualenv
VirtualenvVirtualenv
Virtualenv
 
Django e il Rap Elia Contini
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia Contini
 
Iga workflow
Iga workflowIga workflow
Iga workflow
 
PepperTweet - Project presentation Startup Weekend Brescia
PepperTweet - Project presentation Startup Weekend BresciaPepperTweet - Project presentation Startup Weekend Brescia
PepperTweet - Project presentation Startup Weekend Brescia
 
Peppertweet - Presentazione Startup Weekend Brescia
Peppertweet - Presentazione Startup Weekend BresciaPeppertweet - Presentazione Startup Weekend Brescia
Peppertweet - Presentazione Startup Weekend Brescia
 
NoSql Day - Chiusura
NoSql Day - ChiusuraNoSql Day - Chiusura
NoSql Day - Chiusura
 
NoSql Day - Apertura
NoSql Day - AperturaNoSql Day - Apertura
NoSql Day - Apertura
 

Fagungis

  • 1. Denis Darii (denis.darii@gmail.com) presenta DJANGO FAGUNGIS
  • 2. ¿ FAGUNGIS ? Significato? È un'altra parola africana? Denis Darii
  • 3. FA+GU+NGI+S è un acronimo FAbric + GUnicorn + NGInx + Supervisor Denis Darii
  • 4. FABRIC Una libreria Python che semplifica l'uso di SSH per il deploy di applicazioni o compiti di sistema. Denis Darii
  • 5. GUNICORN 'Green Unicorn' è un server WSGI/HTTP Python per UNIX. Denis Darii
  • 6. NGINX è un web server / proxy inverso leggero ad alte prestazioni Denis Darii
  • 7. SUPERVISOR Un sistema client/server che permette agli utenti di monitorare e controllare diversi processi su piattaforme UNIX-like Denis Darii
  • 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
  • 13. installiamo FAGUNGIS Denis Darii
  • 14. FAGUNGIS Basta un semplice: $ pip install django-fagungis * o consultate la documentazione per vie alternative Denis Darii
  • 15. configuriamo FAGUNGIS 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
  • 24. capire FAGUNGIS Si, bello! Ma cos'ha fatto? 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
  • 28. capire FAGUNGIS visitatore http://djangoday.it Denis Darii
  • 29. capire FAGUNGIS visitatore http://djangoday.it Porta 80 Risponde NGINX 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
  • 35. FAGUNGIS Testare tutto! 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
  • 41. E un ringraziamento davvero speciale... Denis Darii
  • 42. Marco Beri Grazie! Denis Darii
  • 43. Grazie a tutti! Denis Darii