written on Thursday, August 14, 2014
Вот наприклад у нас зараз є такий сайт eusign.org. Про сайт я звісно теж нагадаю, щоб всі знали, яку круту штуку ми зараз робимо.
Робимо ми веб-додаток, щоб створювати, підписувати і пересилати електронні документи. ДСТУ 4145-2002, ГОСТові шифри, OAuth2, PKCS#7 і маркдаун. Хардкор загалом.
Щоб весь цей хардкор працював, потрібен мішок серверних залежностей, сішні модулі до них, якийсь жаваскрипт, що збирається браузерифайлом, статичні файли, якими керує бовер, переклади ще. Треба ж якось суржик підтримувати і інгліш.
Сам по собі пайтон код деплоїться дуже просто. Закинув у каталог, дав пінка через сигнал контейнеру-демону і все — новий код вже сервіситься. Заливати можна хоч через rsync, хоч через git, хоч тарболи по scp ганяти.
Але от у коду є купа залежностей, у залежностей — сішні розширення і вже на сервер притягнули gcc, девелопмент пакети від пайтона і постргреса. Мені таке не подобається звісно, але поки весь цей треш і свято рубізму відбувається у virtualenv — це ще нормально.
Але тут приходить Мойша і от на сервері вже треба одразу мішок всього — рубі, ноду, бовер, лесс, процесити файли локалізації. НІ, НЕМОЖЛИВО.
Довелося сідати і робити красиво. Репозиторій підключається до кодшипу, там запускається make setup і всі скомпілені статичні файли в готовому вигляді летять на сервер рсинком.
Але не тут-то було. Віртуаленв, на відміну від статичних файлів, не можна просто взяти і перетягнути з одної машини на іншу. Все ламалося, шляхи не співпадають, версії бібліотек, архітектура.
А щастя було так близько.
В результаті проблему довелося вирішувати по хардкору — поставити всі пайтонові залежності у 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. Мого рівня правда не вистачило на метапакет, але вже непогано.
В результаті процедура вийшла така: