Деплоймент

written on Thursday, August 14, 2014

Вот наприклад у нас зараз є такий сайт eusign.org. Про сайт я звісно теж нагадаю, щоб всі знали, яку круту штуку ми зараз робимо.

Робимо ми веб-додаток, щоб створювати, підписувати і пересилати електронні документи. ДСТУ 4145-2002, ГОСТові шифри, OAuth2, PKCS#7 і маркдаун. Хардкор загалом.

Щоб весь цей хардкор працював, потрібен мішок серверних залежностей, сішні модулі до них, якийсь жаваскрипт, що збирається браузерифайлом, статичні файли, якими керує бовер, переклади ще. Треба ж якось суржик підтримувати і інгліш.

Суть проблеми

Сам по собі пайтон код деплоїться дуже просто. Закинув у каталог, дав пінка через сигнал контейнеру-демону і все — новий код вже сервіситься. Заливати можна хоч через rsync, хоч через git, хоч тарболи по scp ганяти.

Але от у коду є купа залежностей, у залежностей — сішні розширення і вже на сервер притягнули gcc, девелопмент пакети від пайтона і постргреса. Мені таке не подобається звісно, але поки весь цей треш і свято рубізму відбувається у virtualenv — це ще нормально.

Але тут приходить Мойша і от на сервері вже треба одразу мішок всього — рубі, ноду, бовер, лесс, процесити файли локалізації. НІ, НЕМОЖЛИВО.

Codeship

Довелося сідати і робити красиво. Репозиторій підключається до кодшипу, там запускається make setup і всі скомпілені статичні файли в готовому вигляді летять на сервер рсинком.

Але не тут-то було. Віртуаленв, на відміну від статичних файлів, не можна просто взяти і перетягнути з одної машини на іншу. Все ламалося, шляхи не співпадають, версії бібліотек, архітектура.

А щастя було так близько.

Ubuntu PPA

В результаті проблему довелося вирішувати по хардкору — поставити всі пайтонові залежності у virtualenv, зафрізити список і по ньому скачати з чизішопа все що треба.

Далі по цьому пройтися шикарною утилітою stdeb і отримати пакети, придатні для аплоаду в PPA.

От якось так для кожного:

python setup.py --command-packages=stdeb.command sdist_dsc -z trusty debsign ./deb_dist/${fname}.changes -k$GPGKEY dput ppa:ilya-muromec/python ./deb_dist/${fname}.changes

Ну для деяких довелося підкрутити щось, щоб не було глітчів, типу python-python-social-auth, неспівпадінь з вже існуючими пакетами і всього такого.

Після кількох невдалих спроб необхідний набір залежностей з потрібними версіями висів на ланчпаді і красиво ставився на сервері через apt-get. Мого рівня правда не вистачило на метапакет, але вже непогано.

Результат

В результаті процедура вийшла така:

This entry was tagged