Je configure mes serveurs avec fabric et fabtools

3,672 views
3,449 views

Published on

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,672
On SlideShare
0
From Embeds
0
Number of Embeds
100
Actions
Shares
0
Downloads
42
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

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 lappli
  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 lappli – Lancer lappli
  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’applicationset 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.pyfrom 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 -lAvailable commands: hello uptime setup$ fab -H ronan@server1 hello:name=Ronan[server1] run: echo Hello Ronan[server1] out: Hello RonanDone.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 requiredef require_packages(): # Jai besoin de ces paquets Debian/Ubuntu require.deb.packages([ imagemagick, libxml2-dev, ])
  27. 27. Paquets tiers ?from fabtools import requiredef 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 requiredef require_smtp(): # Jai besoin dun serveur SMTP require.postfix.server(example.com)
  29. 29. Base de données ?from fabtools import requiredef require_db(): # Jai besoin dune base PostgreSQL require.postgres.server() require.postgres.user(myuser, s3cr3tp4ssw0rd) require.postgres.database(myappsdb, myuser)
  30. 30. Paquets Python ?from fabtools.python import virtualenvfrom fabtools import requiredef 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 requiredef process(): # Jai besoin dun 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 requiredef nginx_proxy(): # Jai besoin dun 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

×