Abychom ti dokazali spravne poradit, museli bychom vedet, jak velike jsou rozdily v tech jednotlivych "instalacich" pro ruzne klienty.
Za me je urcite "spravne" mit: * jednu spolecnou knihovnu v niz je vetsina funkcionality (vetsina django apps) * virtualenv per klient * v kazdem virtualenvu pro kazdeho klienta jejich vlastni django projekt (cili django settings, INSTALLED_APPS) * nejspis i v tom vlastnim projektu jednu django appku, kterou mohu customizovat sablony, pridavat nejakou funkcionalitu, ktera je unikatni pro daneho klienta Vsechno bych instaloval pomoci pipu - i kdyz to bude z nekolika vlastnich repositaru - to neni zas takovy problem. A urcite mel minimalne na upgrade nejaky skript, at to volam vzdycky stejne. Ansible je urcite super, ale muze byt pro tebe prekazka na nauceni se. Stejne tak mozna v tvem pripade by moje navrhovane oddeleni bylo zbytecne silne. Ale ja bych to videla do budoucna nejspolehlivejsi. Drzim palce! On Sat, Sep 12, 2020 at 2:11 AM Vladimír Macek <ma...@sandbox.cz> wrote: > Ahoj, > > a) jedna z cest na začátku vývoje byla, že bys měl projekt koncipovaný > jako multi-tenant, tzn. databáze a globální objekty (glob. objekty, cache, > fajly, ...) by s izolací klientů počítaly. Pak bys to měl na jednu stranu > jednoduché s údržbou. Bylo by ale neustále nutné hlídat tu izolaci a > udržovat rozdíly ve funkčnostech. > > b1) Když by funkčních rozdílů mezi doménami bylo míň, můžeš vyvíjet JEDEN > projekt pro všechny, provozovat pro každého klienta extra instanci, ale z > JEDNOHO branche. Funkční rozdíly mezi doménami by se rešily výhybkami v > kódu. > > Zdrojáky na serveru můžou být jen jednou, dokonce i virtualenv jen jeden, > jen různé settings, databáze a file storage. > > b2) Větší funkční oddělený celek, by se dal uzavřít do apky, kterou by v > INSTALLED_APPS měli jen příslušní klienti. Pozor, stále se z ní dá > importovat. > > c) Silnější varianta je udržovat takovou per-instance apku jako separátně > instalovanou jen do virtualenvu příslušného klienta. Pak by importovatelná > nebyla, ale pro klienty bys již musel udržovat oddělené virtualenvy. > > Zde bych jit doporučil nástroj na automatický deployment, například > Ansible. Nedávno jsem ho zavedl do svého toolsetu a je opravdu fajn. > Deployneš novou verzi všem najednou, klidně s customizacemi. > > d) Může tě zaujmout ještě další varianta: Společnou část projektu bys > udržoval v hlavním git branchi, třeba 'prod' (jako produkční). A pak bys > pro klienta požadujícího změnu vytvořil branch 'prod-klient1', ve které by > oproti 'prod' byly změny, které tento klient chtěl. > > Vývoj a bugfixy společných částí bys pushoval do 'prod' a hned mergnul do > všech 'prod-*' branchů. Abys nezapomněl, můžeš si nastavit různé git hooky > -- jen varovací nebo i blokující, že třeba nepushneš 'prod-*', pokud jsi do > něj zapomněl mergnout 'prod'. > > Chce to jenom větší sebekázeň, ale git je na souběžný vývoj přímo dělaný. > Výhody jsou, že git ti vždycky krásně zobrazí diffy mezi společnou verzí a > klienty i mezi klienty navzájem. U žádného klienta není kód navíc. > Nespolečné commity si navždy ponesou své messages, kde svému budoucímu já > podrobně vysvětlíš, proč existují. To se u výhybek ne vždy daří. Viděl bych > i omezený dosah chyb v 'prod-*' brenčích. Další výhoda mě napada, že když > při mergi do 'prod-*' dojde někde k průniku změn (nechci říkat přímo > kolizi), přiměje tě to k úvaze, jestli dělení funkčností koncipuješ dobře. > > Ansible ti opět na jediný příkaz deployne do virtualenvů všech klientů, > každého z příslušného branche gitu. > > V každém případě si veď dokumentaci kdy, kdo, chtěl jakou změnu, proč ji > chtěl, jak jsi s ním o úpravě diskutoval. Tvým zájmem je mít rozdíly v kódu > mezi klienty co nejmenší. > > Měj se, ať to jde, > > Vláďa > tel. 608 978 164 > > On 12. 09. 20 0:25, stanisl...@gmail.com wrote: > > Zdravím, > > potřeboval bych poradit či navést na best-practice v Django, jak jeden > projekt nasadit pro více firem, ale tak, abych v čase mohl dělat klientské > modifikace. Aktuálně jsem vymyslel aplikaci a používají ji 2 moji klienti. > Django aplikace běží na nGinx a abych mohl obě aplikace aktualizovat > současně, na serveru jsem nalinkoval společné zdrojové kódy (virtuál > linkuje společné adresáře/aplikace). Vše běží, protože každá aplikace má > svou konfiguraci a svou databázi. Pokud aplikaci vylepším, nahraju ji na 1 > místo, restartuji server či oba virtuály a oba klienti frčí na > aktualizacích. > > Nicméně: jak nejlépe postupovat, pokud např. 1. firma bude chtít nějakou > změnu v šabloně, 2. firma například upravit či přidat celou funkčnost. Rád > bych udržel zdrojový kód jednotný s nějakými "odbočkami" pro konkrétního > klienta, ale nemohu najít jak nejlépe a nejsystémověji se tomu postavit, > aby projekt byl dlouhodobě spravovatelný, zvlášť pokud by přibylo klientů. > > Věřím, že existuje nějaké systémové řešení, budu rád i za navedení či > odkaz na nějaký tutorial. Předem díky! > -- > -- > E-mailová skupina django-cs@googlegroups.com > Správa: http://groups.google.cz/group/django-cs > --- > Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny > „django-cs“ ve Skupinách Google. > Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, > zašlete e-mail na adresu django-cs+unsubscr...@googlegroups.com. > Chcete-li tuto diskusi zobrazit na webu, navštivte > https://groups.google.com/d/msgid/django-cs/f508f99c-c9d9-46c4-9ce3-102506cd4634n%40googlegroups.com > <https://groups.google.com/d/msgid/django-cs/f508f99c-c9d9-46c4-9ce3-102506cd4634n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- > -- > E-mailová skupina django-cs@googlegroups.com > Správa: http://groups.google.cz/group/django-cs > --- > Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny > „django-cs“ ve Skupinách Google. > Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, > zašlete e-mail na adresu django-cs+unsubscr...@googlegroups.com. > Chcete-li tuto diskusi zobrazit na webu, navštivte > https://groups.google.com/d/msgid/django-cs/afec4bde-39ed-1d99-f88c-a276e5921ff8%40sandbox.cz > <https://groups.google.com/d/msgid/django-cs/afec4bde-39ed-1d99-f88c-a276e5921ff8%40sandbox.cz?utm_medium=email&utm_source=footer> > . > -- Jakub Vysoky mob: +420 605 852 377 jab: jakub.vys...@gmail.com twit: https://twitter.com/kvbik -- -- E-mailová skupina django-cs@googlegroups.com Správa: http://groups.google.cz/group/django-cs --- Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google. Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu django-cs+unsubscr...@googlegroups.com. Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/CAEO8NYwACMW6Vqcw8W3ZS6mjDcLwNSQYZZzQqQHr-cXb5H%3D4Qw%40mail.gmail.com.