Manual:
$ ssh user@servidor
$ (password)
$ cd path
$ svn update
$ workon env
$ python manage.py syncdb
$ ...
Automático:
$ fab server deploy
Ejemplo muy simple, ejecutar un comando en remoto:
1 from fabric.api import run 2 3 def production(): 4 env.hosts = ['rambo.elmejor.es'] 5 env.user = 'user' 6 env.password = 'password' 7 8 def host_type(): 9 run('uname -s')
ejecución:
$ fab production host_type
Los comandos más útiles son:
local ejecuta un comando en local:
1 local("rm -f file")
run ejecuta un comando en la máquina remota:
1 run("cp f1 f2")
sudo ejecuta un comando en remoto con permisos de root
1 sudo("ifconfig eth0 1.0.0.1")
put y get para subir y bajar ficheros:
1 put("/home/rambo/custom_settings.py", "/home/deploy/settings.py") 2 get("/tmp/database_dump.tar.gz", "database_dump.tar.gz") 3 local("gzip -d database_dump.tar.gz")
upload_template sube un fichero de texto pero previamente lo genera usando las variables que hay en la variable 'env', por ejemplo:
welcome.txt:
1 Hola, bienvenido a %(host_name)s!
fabfile.py:
1 env.host_name = 'john rambo server' 2 upload_template("welcome.txt", "/var/www/index.html")
Este es un ejemplo de un deploy semiautomático, previamente hay que hacer checkout del código y haber puesto el app.wsgi donde corresponda.
fabfile.py:
1 from fabric.api import env, run, local, sudo 2 3 def production(): 4 env.hosts = ['server.es'] 5 env.user = 'rambo' 6 env.password = 'password' 7 env.deploy_folder = '/var/www/infoserver' 8 9 def deploy(): 10 # deploy task need previous svn co into deploy_folder/srv 11 # and app.wsgi 12 run("cd %(deploy_folder)s/srv/ && svn up" % env) 13 run("cd %(deploy_folder)s && touch app.wsgi" % env)