Upload
yuri-khrustalev
View
240
Download
6
Embed Size (px)
DESCRIPTION
дистрибьюция python приложений
Citation preview
Дистрибьюция python приложений
и не только
о чем этот доклад?
● о пакетных менеджерах (debian?)● о привычках● о деплойменте в на сервер● немного о python
кто я такой?
● сторонник свободного рынка● сторонник легализации биткоинов● читал про функциональные языки
(nodejs?)● любитель порефакторить
кому это может быть интересно?
● свободных духом● разработчикам, эксплуатационщикам● кому надоел CVS на продакшен серверах● велосипедистам (картинка про
конкурирующие форматы)● всем остальным
определим проблемы
1. пишем код (ваш вариант в комментах)2. собираем (tar?)3. деплоим (svn checkout/scp/wget?) 4. настраиваем (vim?)5. запускаем (do some shell?)6. ... ???7. profit! (скилы: ловкость, удача)
определим проблемы
крупный проект, много серверов, много кода● разработка
○ управление зависимостями○ общий код для приложений ○ тестирование
● сборка○ зависимости
определим проблемы
● установка приложений○ распространение○ конфигурация приложения○ конфигурация среды
● запуск приложений○ контроль статуса зависимостей○ жизненный цикл приложения
разработка приложений
храним отдельно● зависимости приложений
○ системные (db, webserver)○ python (requests, lxml)
● зависимости тестов○ системные (sqlite)○ python (nose, coverage)
● билд зависимости○ compiler, libs○ cvs
● конфигурация○ общая○ среды ○ тестирования
разработка приложений
разработка приложений
● общий код○ выносим в отдельные либы○ python пакеты (со своими тестами)○ зависимые приложения строго ссылаются на
версию
сборка приложений
● билд сервера○ корреляция с продакшен системой
■ chroot■ свой сервер для разных версий
○ контроль версий○ актуальный и своевременный бэкап○ виртуализация (контейнеры, vm)
установка приложений
общее● установка новых файлов● перенастройка конфигурации● рестарт/запуск сервисов● установка зависимостей● откат на предыдущую версию● воспроизводимость
установка приложений
python специфичное● правильная версия интерпретатора
○ как этим управлять?● python зависимости
○ как ими управлять?○ как их установить?
native package manager
● зависимости● версионирование● знание о сервисах● управление конфигурацией (базовое)● воспроизводимость● репозитории (проблема доставки и
распространения)
native package
● манифест (версия, зависимости)● файлы приложения● конфигурация● скрипты установки (pre,post install, ...)● единственная версия на сервере
pip package
● можно ставить в virtualenv● удобен для тестов● не пригоден для контроля за ОС
python зависимости (native)
+ правильные зависимости от ОС+ собраны за вас - не самые свежие (это еще мягко сказано)
- может паковать самостоятельно?- выбор мал (пакуют только мейнстрим)
- может паковать самостоятельно?
python зависимости (pip)
+ широкий выбор (это правда)- зависимости (а какие libdev нужны?)
- засоряет сервер (gcc, libwtf, ...)- воспроизводимость (pip install 10 раз?)- контроль версий (github, tar.gz)
- ссылки на master- битые линки
python зависимости (virtualenv)
+ собираются внутрь пакета (да, прям так)+ учитывают зависимости от ОС (по опыту)+ воспроизводимость (собираем на билд сервере) + контроль версий (знаем что внутри на момент сборки)
python зависимости (virtualenv)
- билд сервер <=> продакшен сервер (всегда должны быть синхронизированы)- старые версии pip/virtualenv (хаки, хаки повсюду)
(virtualenv --relocatable)(pip install --upgrade pip)
что получилось
что есть на рынке?
● dpkg-deb/rpmbuild○ from scratch
● setup.py (easy-deb)○ глобальные пакеты○ нет управления virtualenv
что есть на рынке?
● scons ○ помогает собирать бинарники ○ все еще нужна обвязка для python
● debhelper○ это канонiчно○ этим пользуются ребята из debian○ это удобно○ все еще не понятно как допилить под наши
нужды
что есть на рынке?
● dh-virtualenv○ https://github.com/spotify/dh-virtualenv (привет
злым уткам)○ надстройка над debhelper○ сделано специально для python ○ все уже написано○ легка в использовании
пример dh_virtualenv
пример dh_virtualenv весь пакет
python код
virtualenv
входная точка
best practices
● зависимости○ постоянный мониторинг (maillist, rss, twitter)○ своевременное обновление (каждый релиз)○ слабоумие и отвага прогресс и эволюция
best practices
● установка○ тестирование апгрейда○ тестирование даунгрейда○ бекап всех конфигов (puppet & friends?)○ тестирование миграций баз
best practices
● свои репозиторий○ deb/rpm/pip○ контроль доступа (ssl + credentials)○ масштабирование сети○ минимизация проблем сети○ скорость установки
best practices
● хранение конфигурации ○ общая конфигурация в репозитории (в пакетах)○ конфигурация среды отдельно (puppet и прочее)○ хранение примеров конфигурации среды○ никаких hardcoded values
best practices
● сборка○ хранение копии всех актуальных билдеров○ чистка системы (все ненужные либы не нужны)○ сборка пакетов только на билдерах (никаких
локальных сборок)○ хранение актуальных пакетов○ ведение лога установленных на продакшене
версий
пример топологии сети
● pip только для билдера● продакшен использует
только deb/rpm
1. Спасибо2. Вопросы?
[email protected]://about.me/ykhrustalev