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)