33
Дистрибьюция python приложений и не только

PyClub VRN дистрибьюция python приложений

Embed Size (px)

DESCRIPTION

дистрибьюция python приложений

Citation preview

Page 1: PyClub VRN дистрибьюция python приложений

Дистрибьюция python приложений

и не только

Page 2: PyClub VRN дистрибьюция python приложений

о чем этот доклад?

● о пакетных менеджерах (debian?)● о привычках● о деплойменте в на сервер● немного о python

Page 3: PyClub VRN дистрибьюция python приложений

кто я такой?

● сторонник свободного рынка● сторонник легализации биткоинов● читал про функциональные языки

(nodejs?)● любитель порефакторить

Page 4: PyClub VRN дистрибьюция python приложений

кому это может быть интересно?

● свободных духом● разработчикам, эксплуатационщикам● кому надоел CVS на продакшен серверах● велосипедистам (картинка про

конкурирующие форматы)● всем остальным

Page 5: PyClub VRN дистрибьюция python приложений

определим проблемы

1. пишем код (ваш вариант в комментах)2. собираем (tar?)3. деплоим (svn checkout/scp/wget?) 4. настраиваем (vim?)5. запускаем (do some shell?)6. ... ???7. profit! (скилы: ловкость, удача)

Page 6: PyClub VRN дистрибьюция python приложений

определим проблемы

крупный проект, много серверов, много кода● разработка

○ управление зависимостями○ общий код для приложений ○ тестирование

● сборка○ зависимости

Page 7: PyClub VRN дистрибьюция python приложений

определим проблемы

● установка приложений○ распространение○ конфигурация приложения○ конфигурация среды

● запуск приложений○ контроль статуса зависимостей○ жизненный цикл приложения

Page 8: PyClub VRN дистрибьюция python приложений

разработка приложений

храним отдельно● зависимости приложений

○ системные (db, webserver)○ python (requests, lxml)

● зависимости тестов○ системные (sqlite)○ python (nose, coverage)

Page 9: PyClub VRN дистрибьюция python приложений

● билд зависимости○ compiler, libs○ cvs

● конфигурация○ общая○ среды ○ тестирования

разработка приложений

Page 10: PyClub VRN дистрибьюция python приложений

разработка приложений

● общий код○ выносим в отдельные либы○ python пакеты (со своими тестами)○ зависимые приложения строго ссылаются на

версию

Page 11: PyClub VRN дистрибьюция python приложений

сборка приложений

● билд сервера○ корреляция с продакшен системой

■ chroot■ свой сервер для разных версий

○ контроль версий○ актуальный и своевременный бэкап○ виртуализация (контейнеры, vm)

Page 12: PyClub VRN дистрибьюция python приложений

установка приложений

общее● установка новых файлов● перенастройка конфигурации● рестарт/запуск сервисов● установка зависимостей● откат на предыдущую версию● воспроизводимость

Page 13: PyClub VRN дистрибьюция python приложений

установка приложений

python специфичное● правильная версия интерпретатора

○ как этим управлять?● python зависимости

○ как ими управлять?○ как их установить?

Page 14: PyClub VRN дистрибьюция python приложений

native package manager

● зависимости● версионирование● знание о сервисах● управление конфигурацией (базовое)● воспроизводимость● репозитории (проблема доставки и

распространения)

Page 15: PyClub VRN дистрибьюция python приложений

native package

● манифест (версия, зависимости)● файлы приложения● конфигурация● скрипты установки (pre,post install, ...)● единственная версия на сервере

Page 16: PyClub VRN дистрибьюция python приложений

pip package

● можно ставить в virtualenv● удобен для тестов● не пригоден для контроля за ОС

Page 17: PyClub VRN дистрибьюция python приложений

python зависимости (native)

+ правильные зависимости от ОС+ собраны за вас - не самые свежие (это еще мягко сказано)

- может паковать самостоятельно?- выбор мал (пакуют только мейнстрим)

- может паковать самостоятельно?

Page 18: PyClub VRN дистрибьюция python приложений

python зависимости (pip)

+ широкий выбор (это правда)- зависимости (а какие libdev нужны?)

- засоряет сервер (gcc, libwtf, ...)- воспроизводимость (pip install 10 раз?)- контроль версий (github, tar.gz)

- ссылки на master- битые линки

Page 19: PyClub VRN дистрибьюция python приложений

python зависимости (virtualenv)

+ собираются внутрь пакета (да, прям так)+ учитывают зависимости от ОС (по опыту)+ воспроизводимость (собираем на билд сервере) + контроль версий (знаем что внутри на момент сборки)

Page 20: PyClub VRN дистрибьюция python приложений

python зависимости (virtualenv)

- билд сервер <=> продакшен сервер (всегда должны быть синхронизированы)- старые версии pip/virtualenv (хаки, хаки повсюду)

(virtualenv --relocatable)(pip install --upgrade pip)

Page 21: PyClub VRN дистрибьюция python приложений

что получилось

Page 22: PyClub VRN дистрибьюция python приложений

что есть на рынке?

● dpkg-deb/rpmbuild○ from scratch

● setup.py (easy-deb)○ глобальные пакеты○ нет управления virtualenv

Page 23: PyClub VRN дистрибьюция python приложений

что есть на рынке?

● scons ○ помогает собирать бинарники ○ все еще нужна обвязка для python

● debhelper○ это канонiчно○ этим пользуются ребята из debian○ это удобно○ все еще не понятно как допилить под наши

нужды

Page 24: PyClub VRN дистрибьюция python приложений

что есть на рынке?

● dh-virtualenv○ https://github.com/spotify/dh-virtualenv (привет

злым уткам)○ надстройка над debhelper○ сделано специально для python ○ все уже написано○ легка в использовании

Page 25: PyClub VRN дистрибьюция python приложений

пример dh_virtualenv

Page 26: PyClub VRN дистрибьюция python приложений

пример dh_virtualenv весь пакет

python код

virtualenv

входная точка

Page 27: PyClub VRN дистрибьюция python приложений

best practices

● зависимости○ постоянный мониторинг (maillist, rss, twitter)○ своевременное обновление (каждый релиз)○ слабоумие и отвага прогресс и эволюция

Page 28: PyClub VRN дистрибьюция python приложений

best practices

● установка○ тестирование апгрейда○ тестирование даунгрейда○ бекап всех конфигов (puppet & friends?)○ тестирование миграций баз

Page 29: PyClub VRN дистрибьюция python приложений

best practices

● свои репозиторий○ deb/rpm/pip○ контроль доступа (ssl + credentials)○ масштабирование сети○ минимизация проблем сети○ скорость установки

Page 30: PyClub VRN дистрибьюция python приложений

best practices

● хранение конфигурации ○ общая конфигурация в репозитории (в пакетах)○ конфигурация среды отдельно (puppet и прочее)○ хранение примеров конфигурации среды○ никаких hardcoded values

Page 31: PyClub VRN дистрибьюция python приложений

best practices

● сборка○ хранение копии всех актуальных билдеров○ чистка системы (все ненужные либы не нужны)○ сборка пакетов только на билдерах (никаких

локальных сборок)○ хранение актуальных пакетов○ ведение лога установленных на продакшене

версий

Page 32: PyClub VRN дистрибьюция python приложений

пример топологии сети

● pip только для билдера● продакшен использует

только deb/rpm