Upload
dataart
View
134
Download
10
Embed Size (px)
DESCRIPTION
Спикер: Дима Милых, Developer в Ivelum. Тема: «Деплой Django-проекта с помощью Fabric». «Поговорим, как автоматизировать настройку сервера и развертывание Django-проекта бесплатно и без СМС.» О спикере: программист, 23 года. В свободное время изучает Python, пишет скрипты для Hubot. Видео: https://www.youtube.com/watch?v=RkcX6ZWU56s#t=2207 __ Сайт: http://www.dataart.ru/ Facebook: https://www.facebook.com/DataArt.Enjoy Vkontakte: http://vk.com/dataart_enjoy Twitter: https://twitter.com/DataArt_Enjoy
Citation preview
Деплой Django–проекта с помощью Fabric
Автоматизация рутины или настройка сервера и развёртывание
Django–проекта бесплатно и без СМС
Дима Милых, Ivelum
Что такое fabric?Fabric — это библиотека для Python (2.5–2.7) и инструмент командной строки (fab) для использования SSH при развёртывании приложений или выполнении административных задач.
Что он могёт?• позволяет выполнять команды через SSH легко и по–питонски
• возможность передачи параметров в команды
• указание удалённого хоста или несколько хостов
• проверка результата выполнения команды
• возможность интерактивного запроса команд от пользователя
Как установить?pip install fabric
Hello, World!#!/usr/bin/env python# -*- coding: utf-8 -*-
__author__ = 'Dima Milyh'
from fabric.api import run, env, cd
def hello():print 'Hello, World!'
Запуск фабрикиdima@barcelona:~/django$ fab hello
Запуск фабрикиdima@barcelona:~/django$ fab hello
Hello, World!
Done.
dima@barcelona:~/django$
Круто, но как выполнять команды?• sudo("supervisorctl restart my_task") # выполнение команд от
суперпользователя
• run("bin/hubot -a campfire") # запускает обычную shell команду
• put("/projects/my_app/manage.py", "/home/user/app/manage.py") # копирует локальный файл manage.py на сервер
• get("/var/log/my_log", "/home/user/logs/my_log") # копирует файл my_log с сервера на локальный хост
• local("python manage.py test") # выполняет shell–команду на локальном хосте
• value = prompt("Really?") # запрос ввода от пользователя
• reboot(), abort(), warn()
Здорово, но как мне выполнить команды на сервере?
• Способ джуниора:
env.hosts = ['usr1@host1:22', 'usr2@host2:22']
• Способ мидла:
@hosts('user1@host1', 'host2', 'user2@host3')
• Способ тимлида:
env.roledefs.update({
'live': ['user1@host1', 'host2'],
'stage': ['user2@host3']
})@roles('live', 'stage')
• Способ Чака Норриса:
fab -H localhost, host2 <task>
Передача параметровdef do_something(name, path, foo='something',remove=True):
pass
Выполнение:
$ fab do_something:'Dima','/Russia/Voronezh', foo=‘anything'
Передача параметров
Запрос данных у пользователяdef do_something(path, remove=True):
if remove in [True, '1' , 'true']:
response = prompt('You are sure? [y/n]')
if response == 'y':
response = prompt('Really???? [y/n]')
if response == 'y':
print 'OK'
sudo('rm {0}'.format(path))
Обработка ошибокdef some_method():
with settings(warn_only=True):
result = run(‘<command>')
if result.failed:
do_something()
Переменные окружения• env.password = 'password' # пароль для подключения к серверу
• env.user = 'user_name‘ # имя пользователя
• env.key_filename = '/path_to/keyfile.pem‘ # путь к SSH ключу
• env.warn_only = True # продолжать выполнение, если метод вернул ошибку
• env.parallel = True # параллельное выполнение команд
• env.timeout = 20
• …
Спасибо за внимание!
http://docs.fabfile.org/ # fabric документация
https://twitter.com/dimamilyh # мой твиттер
[email protected] # моя почта