Fabric 和 Django 部署场景

Posted

技术标签:

【中文标题】Fabric 和 Django 部署场景【英文标题】:Fabric and Django deployment scenario 【发布时间】:2014-07-21 14:51:07 【问题描述】:

我的部署方案涉及典型的 Django 设置,但在多个服务器上运行。基本上,我上传源代码,执行几个构建步骤(编译 .pyc 文件,collectstatic 等),然后运行syncdbmigrate,最后重新加载 apache2。

我的问题是我将代码部署到 4-5 台服务器上,并且计划在未来部署更多,并且部署需要很长时间(每台服务器超过一分钟)。部署过程中的几乎所有步骤都可以并行完成,除了 syncdb/migrate。有没有办法使用 Fabric 只在其中一台机器上运行那些任务(数据库服务器与其他服务器是分开的),并并行运行其余任务?

【问题讨论】:

fabric.readthedocs.org/en/1.3.0/usage/parallel.html#decorators 该示例是否解决了您要执行的操作? 有点。理想情况下,我想要 singleonce 装饰器之类的东西。基本上,多次运行某些任务是没有意义的。我只需要它们在任何主机上每次部署运行一次。 【参考方案1】:

您是否尝试过为每个任务和另一个任务创建一个函数来调用它们?

例子:

@task
@parallel
copy_files():
    run('cp *')
    ...

@task
@parallel
restart_apache():
    run('/etc/init.d/httpd restart')
    ...

@task
syncdb_app():
    run('python manage.py syncdb')
    ...

@task
deploy():
    copy_files()
    restart_apache()
    syncdb_app()
    ...

【讨论】:

以上是关于Fabric 和 Django 部署场景的主要内容,如果未能解决你的问题,请参考以下文章

Django 博客开发教程 15 - 使用 Fabric 自动化部署

使用Fabric 和 Ansible自动化部署Django

什么时候使用fabric或ansible?

使用结构的 Django 部署

[Django]部署(一)

Python3+django+nginx+uwsgi使用场景部署