Fagungis
-
date post
21-Oct-2014 -
Category
Technology
-
view
965 -
download
0
description
Transcript of Fagungis
Denis Darii
¿ 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
FAGUNGISDiversi 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à
perché ho creato
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
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.
configuriamo
Denis Darii
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”
configuriamo
Denis Darii
FAGUNGIS
Salvare il file e la configurazione di FAGUNGIS è finità!
configuriamo
Ora siamo pronti a lanciare il primo SETUP.
Denis Darii
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.
usare
Denis Darii
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.
usare
Denis Darii
FAGUNGIS
Alla fine dell'esecuzione:
...djangoday correctly started![13:48:44] Setup finished in 188 seconds
Done.
usare
Denis Darii
FAGUNGIS
Da adesso in poi, per portare in produzione le modifiche al vostro progetto, basterà un semplice:
$ fab djangoday deploy
usare
Denis Darii
FAGUNGIS
Ora aprire un browser e accedere a http://djangoday.it
A questo punto, il nostro sito è on line!
usare
Denis Darii
FAGUNGIS
Si, bello!Ma cos'ha fatto?
capire
Denis Darii
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
capire
Denis Darii
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
capire
Denis Darii
FAGUNGIS
Recapitolando cosa abbiamo adesso?
capire
Denis Darii
FAGUNGIScapire
visitatore
http://djangoday.it
Denis Darii
FAGUNGIScapire
visitatore
http://djangoday.it
Porta 80
Risponde
NGINX
Denis Darii
FAGUNGIScapire
visitatore
http://djangoday.it
media
Porta 80
Risponde
NGINX
non media
^/media/^/static/favicon.ico
Denis Darii
FAGUNGIScapire
visitatore
http://djangoday.it
media
Porta 80
Risponde
NGINX
non media
^/media/^/static/favicon.ico
progettodjangoday
Denis Darii
FAGUNGIScapire
visitatore
http://djangoday.it
media
Porta 80
Risponde
NGINX
non media
^/media/^/static/favicon.ico
progettodjangoday
Denis Darii
FAGUNGIScapire
visitatore
http://djangoday.it
media
Porta 80
Risponde
NGINX
non media
^/media/^/static/favicon.ico
progettodjangoday
porta 8100GUNICORN
workers
proxy_passForward della richiesta
Denis Darii
FAGUNGIScapire
visitatore
http://djangoday.it
media
Porta 80
Risponde
NGINX
non media
^/media/^/static/favicon.ico
progettodjangoday
porta 8100GUNICORN
workers
proxy_passForward della richiesta
SUPERVISOR
Denis Darii
FAGUNGIS
Testare tutto!
Denis Darii
FAGUNGIStestare
Fagungis Testprojecthttps://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
FAGUNGISFuturi 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
FAGUNGISPer 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
FAGUNGISVorrei 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!