Successfully reported this slideshow.
Your SlideShare is downloading. ×

Je configure mes serveurs avec fabric et fabtools

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Je configure mes serveurs avec fabric et fabtools

  1. 1. Je configure mes serveurs avec fabric et fabtools Ronan Amicel @amicel PyCon FR – Paris – 15 septembre 2012
  2. 2. Ronan Amicel • Entrepreneur • Startup advisor • Python !
  3. 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. 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
  5. 5. Déployer une appli
  6. 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. 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. 8. Approches et outils Automatisé Manuel Répétable Scalable
  9. 9. Approches et outils Automatisé Manuel Répétable Scalable ssh
  10. 10. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts shell
  11. 11. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts fabric shell
  12. 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. 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. 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. 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. 16. Définir les hôtes cibles (1) from fabric.api import * def deploy(): # ... $ fab -H server1 deploy $ fab -H server1,server2 deploy
  17. 17. Définir les hôtes cibles (2) from fabric.api import * env.hosts = ['server1', 'server2'] def deploy(): # ... $ fab deploy
  18. 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. 19. fabric core • Opérations • Context managers – run(), sudo() – cd(), lcd() – local() – path() – get(), put() – prefix() – local() – settings() – reboot() – hide(), show()
  20. 20. fabric contrib • append() • upload_template() • comment(), uncomment() • upload_project() • contains() • rsync_project() • exists() • first() • sed()
  21. 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. 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. 23. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts fabric shell
  24. 24. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts fabric Chef, shell Puppet...
  25. 25. Approches et outils Automatisé Manuel Répétable Scalable ssh scripts fabric fabric Chef, shell + fabtools Puppet...
  26. 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. 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. 28. Serveur SMTP ? from fabtools import require def require_smtp(): # J'ai besoin d'un serveur SMTP require.postfix.server('example.com')
  29. 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. 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. 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. 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. 33. Ressources • Fabric : – http://fabfile.org/ • Fabtools : – http://pypi.python.org/pypi/fabtools – https://github.com/ronnix/fabtools

×