Je configure mes serveurs avec fabric et fabtools

download Je configure mes serveurs avec fabric et fabtools

If you can't read please download the document

Transcript of Je configure mes serveurs avec fabric et fabtools

  • 1.Je congure mes serveursavec fabric et fabtoolsRonan Amicel @amicelPyCon FR Paris 15 septembre 2012

2. Ronan Amicel Entrepreneur Startup advisor Python ! 3. Du serveur au service - +Apirak.com + Home | Login | Register | Contact Buy contentMy Website BlogForun RDX Wall Art: The Making Of is a- RDX Wall Art: The Making Of iand new short new short documentary highlightingdocumentary 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 Adsby Google Note herePages 1 2 3 4 5 6 7 . . . 120 121 122 4. Conguration du serveur Installer des packages Crer des rpertoires Congurer le noyau Crer des groupes Congurer le rewall Crer des utilisateurs Congurer un serveur web Modier des permissions Congurer un serveur SMTP Activer/dsactiver des services Crer des bases de donnes Crer des tches priodiques 5. Dployer une appli 6. Dployer une appli Dploiement initial Installer le code Installer les dpendances Crer la base de donnes Congurer le serveur web Lancer lappli 7. Dployer une appli Dploiement initial Dploiements ultrieurs Installer le code Mettre jour le code Installer les dpendances Mettre jour les dpendances Crer la base de donnes Migrer le schma de donnes Congurer le serveur web Relancer lappli Lancer lappli 8. Approches et outils AutomatisManuel RptableScalable 9. Approches et outils AutomatisManuel RptableScalable ssh 10. Approches et outils AutomatisManuel RptableScalable sshscripts shell 11. Approches et outils AutomatisManuel RptableScalable sshscripts fabric shell 12. Cest quoi fabric ? Une bibliothque Python (2.5+) et un outil en ligne de commande qui simplie lutilisation de SSHpour le dploiement dapplicationset les tches dadministration systme. 13. Concrtement Un outil en ligne de commande $ fab Une bibliothque pour aider crire son fable.py from fabric.api import run def hello(): run(echo hello) 14. fable.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. fab$ fab -lAvailable commands:hellouptimesetup$ fab -H ronan@server1 hello:name=Ronan[server1] run: echo Hello Ronan[server1] out: Hello RonanDone.Disconnecting from server1... done. 16. Dnir les htes cibles (1)from fabric.api import *def deploy():# ...$ fab -H server1 deploy$ fab -H server1,server2 deploy 17. Dnir les htes cibles (2)from fabric.api import *env.hosts = [server1, server2]def deploy():# ...$ fab deploy 18. Dnir les htes 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 Oprations Context managers run(), sudo() cd(), lcd() local() path() get(), put() prex() local() settings() reboot() hide(), show() 20. fabric contrib append() upload_template() comment(), uncomment() upload_project() contains() rsync_project() exists() rst() sed() 21. Les + et les - Les bons cts on crit du Python, pas des scripts shell modulable, simple et efcace Les manques a reste assez bas niveau peu de primitives pour manipuler chiers, utilisateurs... 22. fabtools fabtools ensemble de primitives pour les scripts fabric tches courantes : utilisateurs, chiers, paquets, etc. fabtools.require conguration dclarative vs. imprative inspir par des outils comme Chef ou Puppet... en plus lger 23. Approches et outils AutomatisManuel RptableScalable sshscripts fabric shell 24. Approches et outils AutomatisManuel RptableScalable sshscripts fabricChef, shell Puppet... 25. Approches et outilsAutomatisManuelRptable Scalable sshscripts fabric fabricChef, shell + fabtools Puppet... 26. Paquets Debian / Ubuntu ?from fabtools import requiredef require_packages(): # Jai besoin de ces paquets Debian/Ubuntu require.deb.packages([ imagemagick, libxml2-dev, ]) 27. Paquets tiers ?from fabtools import requiredef require_mongo(): # Dpt 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 requiredef require_smtp(): # Jai besoin dun serveur SMTP require.postfix.server(example.com) 29. Base de donnes ?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. Paquets Python ?from fabtools.python import virtualenvfrom fabtools import requiredef python_packages():# Je veux que ce paquet soit install globalementrequire.python.package(lxml, use_sudo=True) # Je veux un virtualenv require.python.virtualenv(venv)# Je veux que ces paquets soient installs dans le virtualenvwith virtualenv(venv):require.python.packages([pyramid, gunicorn]) 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. 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. Ressources Fabric : http://fable.org/ Fabtools : http://pypi.python.org/pypi/fabtools https://github.com/ronnix/fabtools