Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Je configure mes serveurs avec fabric et fabtools

Ronan Amicel
September 15, 2012

Je configure mes serveurs avec fabric et fabtools

Ronan Amicel

September 15, 2012
Tweet

More Decks by Ronan Amicel

Other Decks in Programming

Transcript

  1. Je configure mes serveurs avec fabric et fabtools Ronan Amicel

    @amicel PyCon FR – Paris – 15 septembre 2012
  2. Du serveur au service + = + - + Apirak.com

    Ads by Google Pages 1 2 3 4 5 6 7 . . . 120 121 122 Blog “RDX Wall Art: The Making Of” is a new short documentary highlighting some of the pioneers highlighting more ... - “RDX Wall Art: The Making Of” iand new short documentary iand new short isa new short - isa new short documentary - highlighting iand new sho documentary - some of the pioneers highlighting iand new sho more ... Forun Media Archive Home | Login | Register | Contact My Website Buy content Note here
  3. Configuration du serveur • Installer des packages • Configurer le

    noyau • Configurer le firewall • Configurer un serveur web • Configurer un serveur SMTP • Créer des bases de données • Créer des répertoires • Créer des groupes • Créer des utilisateurs • Modifier des permissions • Activer/désactiver des services • Créer des tâches périodiques
  4. 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
  5. 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éploiements ultérieurs – Mettre à jour le code – Mettre à jour les dépendances – Migrer le schéma de données – Relancer l'appli
  6. 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. »
  7. Concrètement • Un outil en ligne de commande • Une

    bibliothèque pour aider à écrire son « fabfile.py » $ fab from fabric.api import run def hello(): run('echo hello')
  8. 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')
  9. 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.
  10. Définir les hôtes cibles (1) $ fab -H server1 deploy

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

    import * env.hosts = ['server1', 'server2'] def deploy(): # ...
  12. Définir les hôtes cibles (3) $ fab staging deploy $

    fab production deploy from fabric.api import * def staging(): env.hosts = ['staging'] def production(): env.hosts = ['prod1', 'prod2']
  13. fabric core • Opérations – run(), sudo() – local() –

    get(), put() – local() – reboot() • Context managers – cd(), lcd() – path() – prefix() – settings() – hide(), show()
  14. fabric contrib • append() • comment(), uncomment() • contains() •

    exists() • first() • sed() • upload_template() • upload_project() • rsync_project()
  15. 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...
  16. 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
  17. Approches et outils Manuel scripts shell fabric + fabtools Chef,

    Puppet... ssh Automatisé Répétable Scalable fabric
  18. Paquets Debian / Ubuntu ? from fabtools import require def

    require_packages(): # J'ai besoin de ces paquets Debian/Ubuntu require.deb.packages([ 'imagemagick', 'libxml2-dev', ])
  19. 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')
  20. Serveur SMTP ? from fabtools import require def require_smtp(): #

    J'ai besoin d'un serveur SMTP require.postfix.server('example.com')
  21. 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')
  22. 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'])
  23. 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' )
  24. 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' )
  25. Ressources • Fabric : – http://fabfile.org/ • Fabtools : –

    http://pypi.python.org/pypi/fabtools – https://github.com/ronnix/fabtools