dploi-fabric is a set of reusable Fabric tasks. It uses the new-style task system of Fabric >= 1.2.
Usage
- Add dploi-fabric to your buildout environment (preferably in development_local.cfg, the servers have no use for it).
- Create a fabfile.py as normal.
- Pick and choose the modules and import them in the fabfile.py, e.g.:
from fabric.decorators import task
from dploi_fabric.db import pg # if project uses mysql, import "mysql" instead
from dploi_fabric import supervisor, nginx
from dploi_fabric import git, utils, buildout, south, django_utils, project
from dploi_fabric.conf import load_settings
@task
def dev():
load_settings('dev')
@task
def stage():
load_settings('stage')
@task
def live():
load_settings('live')
@task
def deploy():
pg.dump.run()
git.update()
buildout.run()
south.migrate.run()
django_utils.collectstatic()
supervisor.restart()
supervisor.status()
nginx.update_config_file()
- in the project root, create a file deployment.py following this template:
project_name = 'awesome_new_website'
settings = {
'dev': {
'hosts': ['yourserver.com'],
'path': '/home/awesome_new_website-dev/app/',
'user': 'awesome_new_website-dev',
'buildout_cfg': 'server_dev.cfg',
'repo': 'git@github.com:youruser/awesome_new_website.git',
'branch': 'master',
'backup_dir': '/home/awesome_new_website-dev/tmp/', # Used for mysql/psql dumps
'db_name': 'awesome_new_website-dev',
'db_username': 'awesome_new_website-dev',
'domains': ['sitename-dev.agency.com', 'www.sitename.com'],
'domains_redirect': [
{'domain': 'sitename.com', 'destination_domain': 'www.sitename.com'},
],
'ssl': True,
'ssl_key_path': '../config/ssl.key', # This must be uploaded manually, possibly by a task in the future
'ssl_cert_path': '../config/ssl.crt', # This must be uploaded manually, possibly by a task in the future
'basic_auth': False,
'basic_auth_path': '../config/htpasswd', # This must be uploaded manually, possibly by a task in the future
},
}
add settings for stage/live as needed.
- call bin/fab --list for a list of commands
Note: when using these tasks, all project-specific tasks have to be decorated with the @task decorator from fabric.api.
Configuration file (config.ini)
Remember to add config.ini, example:
[static]
/media/ = py_src/project/media/
and/or
[static]
/static/ = %(static_files)s
Other options
[checkout]
tool = buildout (default)
tool = virtualenv
[celery] (if the section is present, celery is enabled)
[django]
base = .
base = project/
base = py_src/project (doesnt work with buildout yet, as it would try to access py_src/project/bin/django)
append_settings = true
append_settings = false
[static]
(see above)
/url-path/ = rel-path-filesystem/
Product's homepage
Requirements:
· Python
· Fabric