SlideShare uma empresa Scribd logo
1 de 33
Baixar para ler offline
Je configure mes serveurs
  avec fabric et fabtools
              Ronan Amicel
                 @amicel

    PyCon FR – Paris – 15 septembre 2012
Ronan Amicel

• Entrepreneur
• Startup advisor
• Python !
Du serveur au service

                   - +                                                  Apirak.com                                                                         +
                                                                                                                       Home | Login | Register | Contact




                                                                                                   Buy content
                                My Website



                         Blog                                  Forun
                         “RDX Wall Art: The Making Of” is a    - “RDX Wall Art: The Making Of” iand new short
                         new short documentary highlighting    documentary iand new short isa new short
                                                               - isa new short documentary
                                                               - highlighting iand new sho documentary
                         some of the pioneers highlighting     - some of the pioneers highlighting iand new sho
                         more ...                              more ...




    +          =
                         Media Archive
                                                                                                                     Ads
                                                                                                                  by Google




                                                                             Note here


                                                Pages 1 2 3 4 5 6 7 . . . 120 121 122
Configuration du serveur
• Installer des packages       • Créer des répertoires
• Configurer le noyau           • Créer des groupes
• Configurer le firewall         • Créer des utilisateurs
• Configurer un serveur web     • Modifier des permissions
• Configurer un serveur SMTP    • Activer/désactiver des services
• Créer des bases de données   • Créer des tâches périodiques
Déployer une appli
Déployer une appli
• Déploiement initial
  – Installer le code

  – Installer les dépendances

  – Créer la base de données

  – Configurer le serveur web

  – Lancer l'appli
Déployer une appli
• Déploiement initial           • Déploiements ultérieurs
  – Installer le code             – Mettre à jour le code

  – Installer les dépendances     – Mettre à jour les dépendances

  – Créer la base de données      – Migrer le schéma de données

  – Configurer le serveur web      – Relancer l'appli

  – Lancer l'appli
Approches et outils
                               Automatisé
Manuel                         Répétable
                                Scalable
Approches et outils
                               Automatisé
Manuel                         Répétable
                                Scalable




 ssh
Approches et outils
                               Automatisé
Manuel                         Répétable
                                Scalable




 ssh      scripts
           shell
Approches et outils
                               Automatisé
Manuel                         Répétable
                                Scalable




 ssh      scripts   fabric
           shell
C’est quoi fabric ?
    « Une bibliothèque Python (2.5+)
   et un outil en ligne de commande
     qui simplifie l’utilisation de SSH
  pour le déploiement d’applications
et les tâches d’administration système. »
Concrètement
•   Un outil en ligne de commande

         $ fab


•   Une bibliothèque pour aider à écrire son « fabfile.py »

         from fabric.api import run

         def hello():
             run('echo hello')
fabfile.py
from fabric.api import *

def hello(name):
    run('echo Hello %s' % name)

def toto():
    with cd('/tmp'):
        run('touch toto.txt')

def setup():
    sudo('apt-get install python')
fab
$ fab -l
Available commands:

    hello
    uptime
    setup

$ fab -H ronan@server1 hello:name=Ronan
[server1] run: echo Hello Ronan
[server1] out: Hello Ronan

Done.
Disconnecting from server1... done.
Définir les hôtes cibles (1)
from fabric.api import *

def deploy():
    # ...


$ fab -H server1 deploy


$ fab -H server1,server2 deploy
Définir les hôtes cibles (2)
from fabric.api import *

env.hosts = ['server1', 'server2']

def deploy():
    # ...



$ fab deploy
Définir les hôtes cibles (3)
from fabric.api import *

def staging():
    env.hosts = ['staging']

def production():
    env.hosts = ['prod1', 'prod2']


$ fab staging deploy
$ fab production deploy
fabric core
• Opérations              • Context managers
  – run(), sudo()           – cd(), lcd()

  – local()                 – path()

  – get(), put()            – prefix()

  – local()                 – settings()

  – reboot()                – hide(), show()
fabric contrib
• append()                 • upload_template()
• comment(), uncomment()   • upload_project()
• contains()               • rsync_project()
• exists()
• first()
• sed()
Les + et les -
• Les bons côtés
  – on écrit du Python, pas des scripts shell
  – modulable, simple et efficace

• Les manques
  – ça reste assez bas niveau
  – peu de primitives pour manipuler fichiers, utilisateurs...
fabtools
•   fabtools

    – ensemble de primitives pour les scripts fabric

    – tâches courantes : utilisateurs, fichiers, paquets, etc.

•   fabtools.require

    – configuration déclarative vs. impérative

    – inspiré par des outils comme Chef ou Puppet... en plus léger
Approches et outils
                               Automatisé
Manuel                         Répétable
                                Scalable




 ssh      scripts   fabric
           shell
Approches et outils
                                 Automatisé
Manuel                           Répétable
                                  Scalable




 ssh      scripts   fabric    Chef,
           shell             Puppet...
Approches et outils
                                              Automatisé
Manuel                                        Répétable
                                               Scalable




 ssh      scripts   fabric     fabric      Chef,
           shell             + fabtools   Puppet...
Paquets Debian / Ubuntu ?

from fabtools import require

def require_packages():

   # J'ai besoin de ces paquets Debian/Ubuntu
   require.deb.packages([
       'imagemagick',
       'libxml2-dev',
   ])
Paquets tiers ?

from fabtools import require

def require_mongo():

   # Dépôt MongoDB officiel
   require.deb.source('mongodb',
       'http://downloads-distro.mongodb.org/repo/ubuntu-upstart',
       'dist', '10gen')

   # Paquet MongoDB
   require.deb.package('mongodb')
Serveur SMTP ?


from fabtools import require

def require_smtp():

   # J'ai besoin d'un serveur SMTP
   require.postfix.server('example.com')
Base de données ?

from fabtools import require

def require_db():

   # J'ai besoin d'une base PostgreSQL
   require.postgres.server()
   require.postgres.user('myuser', 's3cr3tp4ssw0rd')
   require.postgres.database('myappsdb', 'myuser')
Paquets Python ?
from fabtools.python import virtualenv
from fabtools import require

def python_packages():

    # Je veux que ce paquet soit installé globalement
    require.python.package('lxml', use_sudo=True)

   # Je veux un virtualenv
   require.python.virtualenv('venv')

    # Je veux que ces paquets soient installés dans le virtualenv
    with virtualenv('venv'):
        require.python.packages(['pyramid', 'gunicorn'])
Lancer un processus ?

from fabtools import require

def process():

   # J'ai besoin d'un processus supervisor pour mon appli
   require.supervisor.process('myapp',
       command='/home/bob/venv/bin/gunicorn_paster production.ini',
       directory='/home/bob/myapp',
       user='bob'
   )
Un serveur web en frontal ?

from fabtools import require

def nginx_proxy():

   # J'ai besoin d'un serveur nginx en proxy devant mon appli
   require.nginx.proxied_site('example.com',
       docroot='/home/bob/myapp/public',
       proxy_url='http://127.0.0.1:8888'
   )
Ressources

•   Fabric :

    – http://fabfile.org/

•   Fabtools :

    – http://pypi.python.org/pypi/fabtools

    – https://github.com/ronnix/fabtools

Mais conteúdo relacionado

Mais procurados

Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en JavascriptBenoit Zohar
 
Ze cloud azure camp - 26 septembre
Ze cloud   azure camp - 26 septembreZe cloud   azure camp - 26 septembre
Ze cloud azure camp - 26 septembreAymeric Weinbach
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptKhalid Jebbari
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express jsAbdoulaye Dieng
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Geeks Anonymes
 
Enib cours c.a.i. web - séance #6 : introduction à node js
Enib   cours c.a.i. web - séance #6 : introduction à node jsEnib   cours c.a.i. web - séance #6 : introduction à node js
Enib cours c.a.i. web - séance #6 : introduction à node jsHoracio Gonzalez
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs13p
 
Présentation de Vagrant
Présentation de VagrantPrésentation de Vagrant
Présentation de Vagrantclmntlxndr
 
Wilfried woivré windows azure mobile services
Wilfried woivré   windows azure mobile servicesWilfried woivré   windows azure mobile services
Wilfried woivré windows azure mobile servicesAymeric Weinbach
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1Gilles Guirand
 

Mais procurados (15)

Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Les Promises en Javascript
Les Promises en JavascriptLes Promises en Javascript
Les Promises en Javascript
 
Ze cloud azure camp - 26 septembre
Ze cloud   azure camp - 26 septembreZe cloud   azure camp - 26 septembre
Ze cloud azure camp - 26 septembre
 
Présentation de Node.js
Présentation de Node.jsPrésentation de Node.js
Présentation de Node.js
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 
Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes Cappuccino - ou comment créer une application web en 5 minutes
Cappuccino - ou comment créer une application web en 5 minutes
 
Vagrant - Concept
Vagrant - ConceptVagrant - Concept
Vagrant - Concept
 
Enib cours c.a.i. web - séance #6 : introduction à node js
Enib   cours c.a.i. web - séance #6 : introduction à node jsEnib   cours c.a.i. web - séance #6 : introduction à node js
Enib cours c.a.i. web - séance #6 : introduction à node js
 
Bonnes pratiques développement android
Bonnes pratiques développement androidBonnes pratiques développement android
Bonnes pratiques développement android
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
 
Présentation de Vagrant
Présentation de VagrantPrésentation de Vagrant
Présentation de Vagrant
 
Wilfried woivré windows azure mobile services
Wilfried woivré   windows azure mobile servicesWilfried woivré   windows azure mobile services
Wilfried woivré windows azure mobile services
 
Rust my node
Rust my nodeRust my node
Rust my node
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
 

Destaque

Getting data into Rudder
Getting data into RudderGetting data into Rudder
Getting data into RudderRUDDER
 
Aiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblibAiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblibGael Varoquaux
 
Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal hammamiahlem1
 
Scikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonScikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonGael Varoquaux
 
Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016Gael Varoquaux
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLParis, France
 
OpenStack Overview: Deployments and the Big Tent, Toronto 2016
OpenStack Overview: Deployments and the Big Tent, Toronto 2016OpenStack Overview: Deployments and the Big Tent, Toronto 2016
OpenStack Overview: Deployments and the Big Tent, Toronto 2016Jonathan Le Lous
 
Presentation r markdown
Presentation r markdown Presentation r markdown
Presentation r markdown Cdiscount
 
Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Emeric Tapachès
 
Python et les bases de données non sql
Python et les bases de données non sqlPython et les bases de données non sql
Python et les bases de données non sqlbchesneau
 
pandas: a Foundational Python Library for Data Analysis and Statistics
pandas: a Foundational Python Library for Data Analysis and Statisticspandas: a Foundational Python Library for Data Analysis and Statistics
pandas: a Foundational Python Library for Data Analysis and StatisticsWes McKinney
 
pandas: Powerful data analysis tools for Python
pandas: Powerful data analysis tools for Pythonpandas: Powerful data analysis tools for Python
pandas: Powerful data analysis tools for PythonWes McKinney
 
Simple big data, in Python
Simple big data, in PythonSimple big data, in Python
Simple big data, in PythonGael Varoquaux
 
Scikit-learn: apprentissage statistique en Python. Créer des machines intelli...
Scikit-learn: apprentissage statistique en Python. Créer des machines intelli...Scikit-learn: apprentissage statistique en Python. Créer des machines intelli...
Scikit-learn: apprentissage statistique en Python. Créer des machines intelli...Gael Varoquaux
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonMohammed TAMALI
 
Chapitre4 Les sondages à probabilité inégales
Chapitre4 Les sondages à probabilité inégalesChapitre4 Les sondages à probabilité inégales
Chapitre4 Les sondages à probabilité inégalesMahamadou Haro
 
Aux frontières du "Do It Yourself" : des Fab Labs à la nouvelle industrie ?
Aux frontières du "Do It Yourself" : des Fab Labs à la nouvelle industrie ?Aux frontières du "Do It Yourself" : des Fab Labs à la nouvelle industrie ?
Aux frontières du "Do It Yourself" : des Fab Labs à la nouvelle industrie ?Fing
 

Destaque (20)

Getting data into Rudder
Getting data into RudderGetting data into Rudder
Getting data into Rudder
 
Aiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblibAiguille dans botte de foin: scikit-learn et joblib
Aiguille dans botte de foin: scikit-learn et joblib
 
Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal Sondage aléatoire simple ou a probabilité égal
Sondage aléatoire simple ou a probabilité égal
 
Python et NoSQL
Python et NoSQLPython et NoSQL
Python et NoSQL
 
Scikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en PythonScikit learn: apprentissage statistique en Python
Scikit learn: apprentissage statistique en Python
 
Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016Scikit-learn: the state of the union 2016
Scikit-learn: the state of the union 2016
 
Python packaging
Python packagingPython packaging
Python packaging
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQL
 
OpenStack Overview: Deployments and the Big Tent, Toronto 2016
OpenStack Overview: Deployments and the Big Tent, Toronto 2016OpenStack Overview: Deployments and the Big Tent, Toronto 2016
OpenStack Overview: Deployments and the Big Tent, Toronto 2016
 
Presentation r markdown
Presentation r markdown Presentation r markdown
Presentation r markdown
 
Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2Algorithmique_et_programmation_part2
Algorithmique_et_programmation_part2
 
R versur Python
R versur PythonR versur Python
R versur Python
 
Python et les bases de données non sql
Python et les bases de données non sqlPython et les bases de données non sql
Python et les bases de données non sql
 
pandas: a Foundational Python Library for Data Analysis and Statistics
pandas: a Foundational Python Library for Data Analysis and Statisticspandas: a Foundational Python Library for Data Analysis and Statistics
pandas: a Foundational Python Library for Data Analysis and Statistics
 
pandas: Powerful data analysis tools for Python
pandas: Powerful data analysis tools for Pythonpandas: Powerful data analysis tools for Python
pandas: Powerful data analysis tools for Python
 
Simple big data, in Python
Simple big data, in PythonSimple big data, in Python
Simple big data, in Python
 
Scikit-learn: apprentissage statistique en Python. Créer des machines intelli...
Scikit-learn: apprentissage statistique en Python. Créer des machines intelli...Scikit-learn: apprentissage statistique en Python. Créer des machines intelli...
Scikit-learn: apprentissage statistique en Python. Créer des machines intelli...
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec python
 
Chapitre4 Les sondages à probabilité inégales
Chapitre4 Les sondages à probabilité inégalesChapitre4 Les sondages à probabilité inégales
Chapitre4 Les sondages à probabilité inégales
 
Aux frontières du "Do It Yourself" : des Fab Labs à la nouvelle industrie ?
Aux frontières du "Do It Yourself" : des Fab Labs à la nouvelle industrie ?Aux frontières du "Do It Yourself" : des Fab Labs à la nouvelle industrie ?
Aux frontières du "Do It Yourself" : des Fab Labs à la nouvelle industrie ?
 

Semelhante a Je configure mes serveurs avec fabric et fabtools

Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOlivier DASINI
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...Normandie Web Xperts
 
DevOps, freedom to get stuff done
DevOps, freedom to get stuff doneDevOps, freedom to get stuff done
DevOps, freedom to get stuff doneAhmed Bessifi
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOpsJeoffrey Bauvin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesChristophe Furmaniak
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Smile I.T is open
 
symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...Fabien Potencier
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpGabriele Santini
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Nicolas Silberman
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)hibnico
 
Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Olivier Gutknecht
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natifHenri Gomez
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natifHenri Gomez
 
Zabbix, garder un oeil toujours ouvert
Zabbix, garder un oeil toujours ouvertZabbix, garder un oeil toujours ouvert
Zabbix, garder un oeil toujours ouvertLook a box
 

Semelhante a Je configure mes serveurs avec fabric et fabtools (20)

Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
 
DevOps, freedom to get stuff done
DevOps, freedom to get stuff doneDevOps, freedom to get stuff done
DevOps, freedom to get stuff done
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOps
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Power Shell V2 Full
Power Shell V2 FullPower Shell V2 Full
Power Shell V2 Full
 
symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...symfony : Simplifier le développement des interfaces bases de données (PHP ...
symfony : Simplifier le développement des interfaces bases de données (PHP ...
 
Suivi qualité avec sonar pour php
Suivi qualité avec sonar pour phpSuivi qualité avec sonar pour php
Suivi qualité avec sonar pour php
 
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
Industrialisation des environnements de dev avec Puppet et Amazon (mais en fa...
 
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
Maven/Ivy vs OSGi (Toulouse Jug 26-05-2011)
 
Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09
 
20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif20120110 paris jug-packaging-natif
20120110 paris jug-packaging-natif
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif
 
Zabbix, garder un oeil toujours ouvert
Zabbix, garder un oeil toujours ouvertZabbix, garder un oeil toujours ouvert
Zabbix, garder un oeil toujours ouvert
 

Je configure mes serveurs avec fabric et fabtools

  • 1. Je configure mes serveurs avec fabric et fabtools Ronan Amicel @amicel PyCon FR – Paris – 15 septembre 2012
  • 2. Ronan Amicel • Entrepreneur • Startup advisor • Python !
  • 3. Du serveur au service - + Apirak.com + Home | Login | Register | Contact Buy content My Website Blog Forun “RDX Wall Art: The Making Of” is a - “RDX Wall Art: The Making Of” iand new short new short documentary highlighting documentary iand new short isa new short - isa new short documentary - highlighting iand new sho documentary some of the pioneers highlighting - some of the pioneers highlighting iand new sho more ... more ... + = Media Archive Ads by Google Note here Pages 1 2 3 4 5 6 7 . . . 120 121 122
  • 4. Configuration du serveur • Installer des packages • Créer des répertoires • Configurer le noyau • Créer des groupes • Configurer le firewall • Créer des utilisateurs • Configurer un serveur web • Modifier des permissions • Configurer un serveur SMTP • Activer/désactiver des services • Créer des bases de données • Créer des tâches périodiques
  • 6. Déployer une appli • Déploiement initial – Installer le code – Installer les dépendances – Créer la base de données – Configurer le serveur web – Lancer l'appli
  • 7. Déployer une appli • Déploiement initial • Déploiements ultérieurs – Installer le code – Mettre à jour le code – Installer les dépendances – Mettre à jour les dépendances – Créer la base de données – Migrer le schéma de données – Configurer le serveur web – Relancer l'appli – Lancer l'appli
  • 8. Approches et outils Automatisé Manuel Répétable Scalable
  • 9. Approches et outils Automatisé Manuel Répétable Scalable ssh
  • 10. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts shell
  • 11. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts fabric shell
  • 12. C’est quoi fabric ? « Une bibliothèque Python (2.5+) et un outil en ligne de commande qui simplifie l’utilisation de SSH pour le déploiement d’applications et les tâches d’administration système. »
  • 13. Concrètement • Un outil en ligne de commande $ fab • Une bibliothèque pour aider à écrire son « fabfile.py » from fabric.api import run def hello(): run('echo hello')
  • 14. fabfile.py from fabric.api import * def hello(name): run('echo Hello %s' % name) def toto(): with cd('/tmp'): run('touch toto.txt') def setup(): sudo('apt-get install python')
  • 15. fab $ fab -l Available commands: hello uptime setup $ fab -H ronan@server1 hello:name=Ronan [server1] run: echo Hello Ronan [server1] out: Hello Ronan Done. Disconnecting from server1... done.
  • 16. Définir les hôtes cibles (1) from fabric.api import * def deploy(): # ... $ fab -H server1 deploy $ fab -H server1,server2 deploy
  • 17. Définir les hôtes cibles (2) from fabric.api import * env.hosts = ['server1', 'server2'] def deploy(): # ... $ fab deploy
  • 18. Définir les hôtes cibles (3) from fabric.api import * def staging(): env.hosts = ['staging'] def production(): env.hosts = ['prod1', 'prod2'] $ fab staging deploy $ fab production deploy
  • 19. fabric core • Opérations • Context managers – run(), sudo() – cd(), lcd() – local() – path() – get(), put() – prefix() – local() – settings() – reboot() – hide(), show()
  • 20. fabric contrib • append() • upload_template() • comment(), uncomment() • upload_project() • contains() • rsync_project() • exists() • first() • sed()
  • 21. Les + et les - • Les bons côtés – on écrit du Python, pas des scripts shell – modulable, simple et efficace • Les manques – ça reste assez bas niveau – peu de primitives pour manipuler fichiers, utilisateurs...
  • 22. fabtools • fabtools – ensemble de primitives pour les scripts fabric – tâches courantes : utilisateurs, fichiers, paquets, etc. • fabtools.require – configuration déclarative vs. impérative – inspiré par des outils comme Chef ou Puppet... en plus léger
  • 23. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts fabric shell
  • 24. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts fabric Chef, shell Puppet...
  • 25. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts fabric fabric Chef, shell + fabtools Puppet...
  • 26. Paquets Debian / Ubuntu ? from fabtools import require def require_packages(): # J'ai besoin de ces paquets Debian/Ubuntu require.deb.packages([ 'imagemagick', 'libxml2-dev', ])
  • 27. Paquets tiers ? from fabtools import require def require_mongo(): # Dépôt MongoDB officiel require.deb.source('mongodb', 'http://downloads-distro.mongodb.org/repo/ubuntu-upstart', 'dist', '10gen') # Paquet MongoDB require.deb.package('mongodb')
  • 28. Serveur SMTP ? from fabtools import require def require_smtp(): # J'ai besoin d'un serveur SMTP require.postfix.server('example.com')
  • 29. Base de données ? from fabtools import require def require_db(): # J'ai besoin d'une base PostgreSQL require.postgres.server() require.postgres.user('myuser', 's3cr3tp4ssw0rd') require.postgres.database('myappsdb', 'myuser')
  • 30. Paquets Python ? from fabtools.python import virtualenv from fabtools import require def python_packages(): # Je veux que ce paquet soit installé globalement require.python.package('lxml', use_sudo=True) # Je veux un virtualenv require.python.virtualenv('venv') # Je veux que ces paquets soient installés dans le virtualenv with virtualenv('venv'): require.python.packages(['pyramid', 'gunicorn'])
  • 31. Lancer un processus ? from fabtools import require def process(): # J'ai besoin d'un processus supervisor pour mon appli require.supervisor.process('myapp', command='/home/bob/venv/bin/gunicorn_paster production.ini', directory='/home/bob/myapp', user='bob' )
  • 32. Un serveur web en frontal ? from fabtools import require def nginx_proxy(): # J'ai besoin d'un serveur nginx en proxy devant mon appli require.nginx.proxied_site('example.com', docroot='/home/bob/myapp/public', proxy_url='http://127.0.0.1:8888' )
  • 33. Ressources • Fabric : – http://fabfile.org/ • Fabtools : – http://pypi.python.org/pypi/fabtools – https://github.com/ronnix/fabtools