Развертывание Django-проектов c помощью Fabric

В одном из проектов необходимо регулярно выкладывать код из ветки stage на staging сервер. Начали делать это вручную - входишь через ssh, делаешь git push origin stage, если нужно - обновляешь базу и затем перезапускаешь apache. К концу этой недели решили, что хорошо бы все эти действия выполнять одной командой. Я прошерстил блоги - сейчас очень активно пишут про использования для этих целей библиотеки Fabric (это аналог Capistrano из Ruby on Rails).

Как установить

Установите библиотеку fabric через pip или easy_install, затем создайте символическую ссылку для приложения fab, либо добавьте папку с bin файлами в вашем Python-дистрибутиве в PATH. Ниже - краткая инструкция для Mac OS X + ports.

sudo pip-2.6 install fabric
sudo ln -s /opt/local/Library/Frameworks/Python.framework/Versions/2.6/bin/fab /usr/local/bin/fab

Что делает Fabric

Fabric позволяет выполнять самые разнообразные действия по ssh на целой группе серверов. Действия описываются в файле fabfile.py и представляют собой обычные питоновские функции. Обычно fabfile.py кладут в корневую папку проекта (рядом с manage.py, settings.py, urls.py, ...).

from fabric.api import *
env.hosts = ['root@moodbox.com']

def deploy():
    local('hg push')
    with cd('hgreps/vorushin_ru'):
        run('hg update')
        run('/etc/init.d/apache2 reload')

Теперь если я запускаю fab deploy из папки с проектом vorushin_ru (код этого блога, написанного на Django), то сначала с моей локальной машины произойдет push, затем по ssh на сервере будет сделан update с последующим перезапуском апача.

Всякие тонкости

Популярные статьи

Про стэнфордские онлайн-классы

Django Dash 2011, мои впечатления

Лев Валкин про Силиконовую долину

OpenOffice + Python, pабота с файлами MS Word

Блоги программистов

Бывают ли такие дизайнеры?

Скорость

Жизнь и работа на море

Нужно больше творить

Pip, virtualenv и virtualenvwrapper

Об авторе

Меня зовут Роман Ворушин. Я отец двух дочерей и страстный программист.

С командой киборгов сделал Рисоваську, а потом еще много веб-проектов. Сейчас работаю в Grammarly.

roman.vorushin@gmail.com