Z vlastních zkušeností bych doporučil:
- Mít vše v 1 repositáři - tzv. monorepo. Balíčky, knihovny, verzování,
kompatibilita, je to hrozně administrativy navíc, základem monorepa jsou
dobrý testy i na ty klientsky specifický funkčnosti.
- Neodlišovat klientské verze větvemi, je to akorát další příležitost se v
tom utopit. Udržoval bych jednotnou hlavní vývojovou linii (dev, stage,
prod, nebo jak je libo/potřeba) a tam aktuální zdrojáky všeho a pro všechny.

Klíčem bude vždy dobře předem zvážit, která funkcionalita je specifická a
která obecná. Ale monorepo přecejen dává větší flexibilitu věci přesouvat.
Společné funkce bych držel za každou cenu stejné (zejm. na úrovni modelů).
I specifické funkce lze často zavádět na základě obecných mechanismů
(jednotné rozhraní).

Další otázkou je, jak se verze budou provozovat - 1 instance pro všechny
(zde jsi již udělal rozhodnutí s různými db, ale úvaha o společné db je
určitě validní), nebo na druhé straně spektra on-site u/pro konkrétního
klienta. Potřeby se můžou v čase významně měnit. Ale i tady poskytuje
monorepo větší flexibilitu z hlediska experimentů a změn dle potřeb.

Hodně štěstí,
John

On Sat, 12 Sep 2020, 09:39 Jakub Vysoky, <jakub.vys...@gmail.com> wrote:

> 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 tuto diskusi zobrazit na webu, navštivte
> https://groups.google.com/d/msgid/django-cs/CAEO8NYwACMW6Vqcw8W3ZS6mjDcLwNSQYZZzQqQHr-cXb5H%3D4Qw%40mail.gmail.com
> <https://groups.google.com/d/msgid/django-cs/CAEO8NYwACMW6Vqcw8W3ZS6mjDcLwNSQYZZzQqQHr-cXb5H%3D4Qw%40mail.gmail.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 zobrazit tuto diskusi na webu, navštivte 
https://groups.google.com/d/msgid/django-cs/CAK-vJU%3D0ZgAcvNgkS%2BvqNVgPESnkSA%2Bc2a5t1qPXCbEwhuW%3Drg%40mail.gmail.com.

Reply via email to