11
Деплой Django–проекта с помощью Fabric Автоматизация рутины или настройка сервера и развёртывание Django–проекта бесплатно и без СМС Дима Милых, Ivelum

Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

  • 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

Page 1: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Деплой Django–проекта с помощью Fabric

Автоматизация рутины или настройка сервера и развёртывание

Django–проекта бесплатно и без СМС

Дима Милых, Ivelum

Page 2: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Что такое fabric?Fabric — это библиотека для Python (2.5–2.7) и инструмент командной строки (fab) для использования SSH при развёртывании приложений или выполнении административных задач.

Что он могёт?• позволяет выполнять команды через SSH легко и по–питонски

• возможность передачи параметров в команды

• указание удалённого хоста или несколько хостов

• проверка результата выполнения команды

• возможность интерактивного запроса команд от пользователя

Page 3: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Как установить?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!'

Page 4: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Запуск фабрикиdima@barcelona:~/django$ fab hello

Запуск фабрикиdima@barcelona:~/django$ fab hello

Hello, World!

Done.

dima@barcelona:~/django$

Page 5: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Круто, но как выполнять команды?• 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()

Page 6: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Здорово, но как мне выполнить команды на сервере?

• Способ джуниора:

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>

Page 7: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Передача параметровdef do_something(name, path, foo='something',remove=True):

pass

Выполнение:

$ fab do_something:'Dima','/Russia/Voronezh', foo=‘anything'

Передача параметров

Page 8: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Запрос данных у пользователя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))

Page 9: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Обработка ошибокdef some_method():

with settings(warn_only=True):

result = run(‘<command>')

if result.failed:

do_something()

Page 10: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Переменные окружения• 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

• …

Page 11: Дмитрий Милых «Деплой Django-проекта с помощью Fabric»

Спасибо за внимание!

http://docs.fabfile.org/ # fabric документация

https://twitter.com/dimamilyh # мой твиттер

[email protected] # моя почта