Можно воспользоваться готовым приложением
www.fabfile.org/installing.html (
https://github.com/fabric/fabric)
Суть в том, что нужно написать скрипт с поочередным выполнением команд.
Вот как реализовано у меня.
На сервере стоит nginx + uwsgi. (установка тут
https://habrahabr.ru/post/226419/)
В файле uwsgi.ini добавлена строка (на хабре из ссылки выше этот файл называется mysite_uwsgi.ini)
# reload uwsgi
touch-reload=/opt/sitename/reload.txt
В директории с проектом лежит файл fabfile.py с содержимым
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from fabric.api import env, run, cd
env.hosts = ['user@host', ]
#Структура такая
# /
# + opt/
# + sitename/
# + env/ тут virtualenv
# + source/ тут лежит код
project_path = '/opt/sitename/'
source_path = '/opt/sitename/source/'
branch = ''
# Скрипт деплоя
def deploy():
# выполняются комманды для загрузки данных из репозитория
with cd(source_path):
run('mkdir -p tmp/')
run('hg pull')
run('hg update %s' % branch)
# после загрузки репозитория
# устанавливаются пакеты перечисленные в req.txt
# производятся миграции
# собирается статика
# теребим файл reload.txt, чтобы оповестить uwsgi об обновлении
with cd(project_path):
run('env/bin/pip install -r %sreq.txt' % source_path)
run('env/bin/python %smanage.py migrate' % source_path)
run('env/bin/python %smanage.py collectstatic --noinput' % source_path)
# run('env/bin/python %smanage.py compress' % source_path)
run('touch reload.txt')
запуск скрипта fab с параметром выполняемого таска из fabfile
fab deploy