Implementovat rozhraní pro uživatelsky nastavenitelné subdomény a certifikáty #8

Closed
opened 2020-06-06 02:31:14 +02:00 by Podhorecky · 8 comments
Podhorecky commented 2020-06-06 02:31:14 +02:00 (Migrated from git.spotter.cz)

V setupu Decidimu je možné vyrobit více než jednu site.

Vyrobil jsem tedy na svém hostingu další, která by měla doménu https://demon.spotter.cz

to se sice uloží, ale při přístupu na URL mne to upozorní že je neplatný certifikát, který u Decidim platí na jednu doménu.

pak mne to přesměruje na Nextcloud, kde je napsáno: Přístup prostřednictvím nedůvěryhodné domény

Chápu, že z bezpečnostních důvodů svévolné tvoření domén u certifikátu neprojde, tak se chci jen zeptat jestli pro tento případ vidíte nějaký workaround.

Pokud ano, lze ho nějak doplnit?

Pokud ne, lze alespoň zmínit v dokumentaci, že to má toto chování?

Druhá věc je, že jsem se pokoušel ověřit, jak říkáte u issue k dokumentaci:

Verzované jsou v podstatě jen aplikace, u kterých se vždy instaluje poslední dostupná verze.

Je to případ Decidim? Nevím, ale zjistím přeinstalací. Tak jsem na demo site https://spotter.dasm.cz:8443/ odinstaloval a smazal Decidim a znovu ho stáhnul a nainstaloval. Z vypisované hlášky o verzi software mi připadalo, že verze je pořád stejná. Přitom vývoj v Decidim na githubu probíhá, tak jsem čekal že bude verze SW vyšší.

Jelikož jsem se dál než do admin setupu nedostal, tak už jsem nemohl ověřit, zda je aplikace v nové verzi.

V setupu Decidimu je možné vyrobit více než jednu site. Vyrobil jsem tedy na svém hostingu další, která by měla doménu https://demon.spotter.cz to se sice uloží, ale při přístupu na URL mne to upozorní že je neplatný certifikát, který u Decidim platí na jednu doménu. pak mne to přesměruje na Nextcloud, kde je napsáno: *Přístup prostřednictvím nedůvěryhodné domény* Chápu, že z bezpečnostních důvodů svévolné tvoření domén u certifikátu neprojde, tak se chci jen zeptat jestli pro tento případ vidíte nějaký workaround. **Pokud ano, lze ho nějak doplnit?** **Pokud ne, lze alespoň zmínit v dokumentaci, že to má toto chování?** Druhá věc je, že jsem se pokoušel ověřit, jak říkáte u issue k dokumentaci: > Verzované jsou v podstatě jen aplikace, u kterých se vždy instaluje poslední dostupná verze. Je to případ Decidim? Nevím, ale zjistím přeinstalací. Tak jsem na demo site https://spotter.dasm.cz:8443/ odinstaloval a smazal Decidim a znovu ho stáhnul a nainstaloval. Z vypisované hlášky o verzi software mi připadalo, že verze je pořád stejná. Přitom vývoj v Decidim na githubu probíhá, tak jsem čekal že bude verze SW vyšší. Jelikož jsem se dál než do admin setupu nedostal, tak už jsem nemohl ověřit, zda je aplikace v nové verzi.
Disassembler commented 2020-06-06 08:18:34 +02:00 (Migrated from git.spotter.cz)

pak mne to přesměruje na Nextcloud...

Protože ta doména není nastavena ani v konfiguraci Apache, takže Apache neví, co s ní má dělat a fallbackne na výchozího virtualhosta, kterým je NextCloud.

Pokud ano, lze ho nějak doplnit?

Na hostingu samozřejmě ano. Na VM taky, ale ale vyžadovalo by to komplet přepsání logiky pro nastavení proxy pravidel, což, když tak nad tím uvažuji, není vlastně vůbec blbý nápad. Teď to funguje tak, že aplikace se při instalaci registruje ve VMMgr a ten jí dle předaných parametrů automaticky nastaví subdoménu, na které je přístupná. Ale mohlo by to fungovat tak, že proxy bude moct kompletně ovládat i člověk. Bylo by to tak lepší, protože by to umožnilo třeba i podrobnější správu TLS certifikátů. Možnost změny subdomény je v backendu již implementována, akorát to nemáme vytažené do frontendu, protože to v téhle fázi vývoje není vůbec důležité. Představuji si to nějak takhle:

image

Aplikace by si po instalací stále sama vlezla na nějakou výchozí subdoménu, takže nebude bezpodmínečně nutné, aby uživatel něco nastavoval, ale bylo by plně v jeho moci nastavení proxy serveru zrušit nebo upravit dle libosti.

Pokud ne, lze alespoň zmínit v dokumentaci, že to má toto chování?

Tak zmínit to určitě lze, ale jednak je tohle spíš do uživatelské dokumentace než do technické a jednak mi to připadá poněkud tautologické. "Pokud nastavíte, aby nová site Decidimu byla na samostatné doméně, bude na samostatné doméně." To pole, do kterého se ta hodnota zadává se totiž jmenuje "Host" a "Secondary host".

Verzované jsou v podstatě jen aplikace, u kterých se vždy instaluje poslední dostupná verze.

Instaluje se poslední dostupná verze v našem repozitáři. Co je na GitHubu nehraje roli, protože by to musel někdo vzít, sestavit z toho image a publikovat je, což jste mi explicitně řekl, že nemám dělat, pokud k tomu nebudu donucen okolnostmi nebo Vámi. Pokud by byl ke kterékoliv aplikaci nějaký update, bude to na Vás svítit v rozhraní VMMgr.

> pak mne to přesměruje na Nextcloud... Protože ta doména není nastavena ani v konfiguraci Apache, takže Apache neví, co s ní má dělat a *fallbackne* na výchozího virtualhosta, kterým je NextCloud. > Pokud ano, lze ho nějak doplnit? Na hostingu samozřejmě ano. Na VM taky, ale ale vyžadovalo by to komplet přepsání logiky pro nastavení proxy pravidel, což, když tak nad tím uvažuji, není vlastně vůbec blbý nápad. Teď to funguje tak, že aplikace se při instalaci registruje ve VMMgr a ten jí dle předaných parametrů automaticky nastaví subdoménu, na které je přístupná. Ale mohlo by to fungovat tak, že proxy bude moct kompletně ovládat i člověk. Bylo by to tak lepší, protože by to umožnilo třeba i podrobnější správu TLS certifikátů. Možnost změny subdomény je v backendu již implementována, akorát to nemáme vytažené do frontendu, protože to v téhle fázi vývoje není vůbec důležité. Představuji si to nějak takhle: ![image](/uploads/e5ae0f9f2c35eea4e322c2ac0b13746a/image.png) Aplikace by si po instalací stále sama vlezla na nějakou výchozí subdoménu, takže nebude bezpodmínečně nutné, aby uživatel něco nastavoval, ale bylo by plně v jeho moci nastavení proxy serveru zrušit nebo upravit dle libosti. > Pokud ne, lze alespoň zmínit v dokumentaci, že to má toto chování? Tak zmínit to určitě lze, ale jednak je tohle spíš do uživatelské dokumentace než do technické a jednak mi to připadá poněkud tautologické. "Pokud nastavíte, aby nová site Decidimu byla na samostatné doméně, bude na samostatné doméně." To pole, do kterého se ta hodnota zadává se totiž jmenuje "Host" a "Secondary host". > Verzované jsou v podstatě jen aplikace, u kterých se vždy instaluje poslední dostupná verze. Instaluje se poslední dostupná verze **v našem repozitáři**. Co je na GitHubu nehraje roli, protože by to musel někdo vzít, sestavit z toho image a publikovat je, což jste mi explicitně řekl, že nemám dělat, pokud k tomu nebudu donucen okolnostmi nebo Vámi. Pokud by byl ke kterékoliv aplikaci nějaký update, bude to na Vás svítit v rozhraní VMMgr.
Podhorecky commented 2020-06-06 10:35:30 +02:00 (Migrated from git.spotter.cz)

není nastavena ani v konfiguraci Apache

jojo, to mi došlo, jen jsem to popsal :)

vyžadovalo by to komplet přepsání logiky pro nastavení proxy pravidel

ano, to by bylo fajn.
obrázek: ano, to by bylo super. Tedy že název subdomény bude nastavitelný uživatelsky. Uvažuji totiž, že mohou vzniknout situace, kdy si někdo bude chtít nastavit konkrétní subdoménu + certifikát. Nebo ho to jeho dispozice v jeho IT prostředí přímo nutí.

zmínit to určitě lze, ale jednak je tohle spíš do uživatelské dokumentace než do technické

jasně :) cílem je, aby to bylo buď jako srozumitelná funkce, nebo když funkce neexistuje, tak aby v dokumentaci byla zmínka typu: Víme že to tam není, tak to ani nehledejte. Bude to tam ANO / NE / ZA PODMÏNEK....

což jste mi explicitně řekl, že nemám dělat, pokud k tomu nebudu donucen okolnostmi nebo Vámi.

aha :) tady asi došlo k nedorozumnění. Moje přikázání bylo ve smyslu, že nemáte dělat nekonečnou činnost neustálého updatování balíků z githubu. Což je ok, jak ve fázi vývoje, tak ve fázi provozu.

Nicméně ve věci dokumentace je asi vhodné vysvětlit čerstvému adminovi, jakým procesem se tedy získá aktuální verze SW. Že to je vymyšleno jako:

Cizí Github (nebo jiné orig. repo) ----> Vlastní repo (zde konkrétně na hostingu Spotter) ---> instalace ve VM.

Z toho co jsem četl jsem mylně nabyl dojmu, že sestavovací skript je tak advanced, že udělá:

Zkontroluje, zda na Github.com je něco nového a pak:

Cizí Github ---> pošle tyto data do vlastní repo, kde je nějaký démon na serveru zabalí do balíčku a vzápětí plynnule pošle k downloadu do VM, kde ho rozbalí a nainstaluje. Zde by pochopitelně bylo nepopsatelné riziko při změnách verzí a podmínek instalace, což by hrozilo neúspěchem instalace.

Prosím nefacepalmujte :) snažím se simulovat čerstvého člověka, který něco očekává. A v dokumentaci neměl napsáno, že pokud si chce něco do své VM stáhnout, tak si to na svou repo taky musí nejdřív zkopírovat. Protože rovnou z originálních zdrojů to nebude.

Důvod je právě ten, že tím chráníme VM před divokou instalací, protože žádná serverová aplikace co máme, se neinstaluje zcela bez admin-fu. Benefitem je pak rychlá a okamžitá instalace té prozkoumané verze.

by byl ke kterékoliv aplikaci nějaký update, bude to na Vás svítit v rozhraní VMMgr.

Aha, to je pro mne novinka. Což jsem vlastně asi zatím neměl šanci vidět,

> není nastavena ani v konfiguraci Apache jojo, to mi došlo, jen jsem to popsal :) > vyžadovalo by to komplet přepsání logiky pro nastavení proxy pravidel ano, to by bylo fajn. obrázek: **ano, to by bylo super.** Tedy že název subdomény bude nastavitelný uživatelsky. Uvažuji totiž, že mohou vzniknout situace, kdy si někdo bude chtít nastavit konkrétní subdoménu + certifikát. Nebo ho to jeho dispozice v jeho IT prostředí přímo nutí. > zmínit to určitě lze, ale jednak je tohle spíš do uživatelské dokumentace než do technické jasně :) cílem je, aby to bylo buď jako srozumitelná funkce, nebo když funkce neexistuje, tak aby v dokumentaci byla zmínka typu: Víme že to tam není, tak to ani nehledejte. Bude to tam ANO / NE / ZA PODMÏNEK.... > což jste mi explicitně řekl, že nemám dělat, pokud k tomu nebudu donucen okolnostmi nebo Vámi. aha :) tady asi došlo k nedorozumnění. Moje přikázání bylo ve smyslu, že nemáte dělat nekonečnou činnost neustálého updatování balíků z githubu. Což je ok, jak ve fázi vývoje, tak ve fázi provozu. Nicméně ve věci dokumentace je asi vhodné vysvětlit čerstvému adminovi, jakým procesem se tedy získá aktuální verze SW. Že to je vymyšleno jako: Cizí Github (nebo jiné orig. repo) ----> Vlastní repo (zde konkrétně na hostingu Spotter) ---> instalace ve VM. Z toho co jsem četl jsem mylně nabyl dojmu, že sestavovací skript je tak advanced, že udělá: Zkontroluje, zda na Github.com je něco nového a pak: Cizí Github ---> pošle tyto data do vlastní repo, kde je nějaký démon na serveru zabalí do balíčku a vzápětí plynnule pošle k downloadu do VM, kde ho rozbalí a nainstaluje. Zde by pochopitelně bylo nepopsatelné riziko při změnách verzí a podmínek instalace, což by hrozilo neúspěchem instalace. Prosím nefacepalmujte :) snažím se simulovat čerstvého člověka, který něco očekává. A v dokumentaci neměl napsáno, že pokud si chce něco do své VM stáhnout, tak si to na svou repo taky musí nejdřív zkopírovat. Protože rovnou z originálních zdrojů to nebude. Důvod je právě ten, že tím chráníme VM před divokou instalací, protože žádná serverová aplikace co máme, se neinstaluje zcela bez admin-fu. Benefitem je pak rychlá a okamžitá instalace té prozkoumané verze. > by byl ke kterékoliv aplikaci nějaký update, bude to na Vás svítit v rozhraní VMMgr. Aha, to je pro mne novinka. Což jsem vlastně asi zatím neměl šanci vidět,
Disassembler commented 2020-06-06 11:38:32 +02:00 (Migrated from git.spotter.cz)

A v dokumentaci neměl napsáno, že pokud si chce něco do své VM stáhnout, tak si to na svou repo taky musí nejdřív zkopírovat.

Ale to nemusí. Od toho je tu to naše repo. Pokud si chce uživatel něco stáhnout, tak jen musí říct odkud (protože jste chtěl mít repo chráněné individuálními přístupy, jinak by ani tohle nebylo úplně nutné) a pak si to prostě stáhne. Své repo potřebuje jen na své image a aplikace, které si sám vybuildil. Tohle je právě něco, k čemu by se asi hodil nějaký diagram z .

Mějme tři role. Administrátor distribučního serveru, buildera a uživatele. Můžou to být úplně rozdílní lidé.

Administátor:

  • Nastaví libovolný webový server dostupný lokálně nebo z internetu.
  • Vytvoří read/write (FTP/SFTP) přístup k adresáři, kam se budou ukládat distribuční data a předá jej builderovi.
  • Vytvoří read-only (HTTP) přístup k témuž adresáři a předá jej uživateli (prostředníky po cestě zanedbejme).

Builder (zjednodušeno):

  • Vybere aplikaci, kterou chce uživateli zprostředkovat a zjistí, jaké závislosti a postupy aplikace vyžaduje.
  • Pro vybranou aplikaci vytvoří "recept", pomocí kterého se vytvoří image (není podmínkou, ale pak musí pokaždé kontejner stavět a ručně). Jakým způsobem se do něj ta aplikace dostane si definuje builder. Tady právě dochází k tomu stažení, patchování a kompilace zdrojů z upstream z GitHubu nebo jiného SourceForge, stažení hotového archivu z libovolného umístění, instalace pomocí balíčkovacícho systému dané distribuce atd a to i včetně všech potřebných závislostí. Výstupem je image ve kterém jsou všechny soubory potřebné pro deployment kontejneru u uživatele. Odděleně od image pak vytvoří instalační skript, který u uživatele jednotlivé kontejnery prováže mezi sebou, nastaví persistentní umístění pro data a vůbec obecně nastaví pro okamžité použití.
  • Publikuje archivy image a instalačních skriptů do svého lokálního repozitáře.
  • Až je hotov se všemi imagi, které chce uveřejnit, zkopíruje obsah svého lokálního repozitáře na distribuční server.

Uživatel:

  • Nastaví ve VMMgr přístup k repozitáři, který dostal.
  • Klikne na čudlik "instalovat" u vybrané aplikace.

Kliknutí na čudlik způsobí:

  • Stáhnou a rozbalí se builderem publikované image a instalační skript.
  • Ze stažených imagí se vytvoří instance kontejnerů.
  • Spustí se instalační skript, který provede sérii kroků, které z jednotlivých nesouvisejících kontejneru učiní ucelené aplikační prostředí, tj. zkopíruje konfigurační soubory relevantní pro příslušnou aplikaci, naplní databázi iniciálními daty, vygeneruje administrátorské jméno a heslo atd.

Prostě to funguje úplně stejně jako tisíce již existujících distribučních systémů. Takové RPM nebo DEB balíky se principiálně vytváří úplně stejně - builder stáhne a zkompiluje zdrojáky, nadefinuje závislosti, přiohne pár souborů pro danou distribuci a vyrobí instalační balík. Je pravděpodobné, že to za něj dělá nějaký skript, aby to nemusel dělat pokaždé ručně. Balík se umístí do nějakého repozitáře a kdo jej chce stáhnout, musí si na straně klienta repozitář nastavit. Stažení balíku rozbalí soubory, pustí nějaký post-install skript a existenci instalovaného balíku zapíše do nějaké lokální databáze. Nevymyslel jsem nic unikátního a inovativního, jen jsem postopáté znovuvynalezl kolo v takové velikosti, tloušťce a materiálu, který je žádoucí pro naše použití.

> A v dokumentaci neměl napsáno, že pokud si chce něco do své VM stáhnout, tak si to na svou repo taky musí nejdřív zkopírovat. Ale to nemusí. Od toho je tu to naše repo. Pokud si chce uživatel něco stáhnout, tak jen musí říct odkud (protože jste chtěl mít repo chráněné individuálními přístupy, jinak by ani tohle nebylo úplně nutné) a pak si to prostě stáhne. Své repo potřebuje jen na své image a aplikace, které si sám vybuildil. Tohle je právě něco, k čemu by se asi hodil nějaký diagram z https://git.spotter.cz/Spotter-Cluster/Spotter-Cluster/-/issues/316. Mějme tři role. Administrátor distribučního serveru, buildera a uživatele. Můžou to být úplně rozdílní lidé. Administátor: - Nastaví libovolný webový server dostupný lokálně nebo z internetu. - Vytvoří read/write (FTP/SFTP) přístup k adresáři, kam se budou ukládat distribuční data a předá jej builderovi. - Vytvoří read-only (HTTP) přístup k témuž adresáři a předá jej uživateli (prostředníky po cestě zanedbejme). Builder (zjednodušeno): - Vybere aplikaci, kterou chce uživateli zprostředkovat a zjistí, jaké závislosti a postupy aplikace vyžaduje. - Pro vybranou aplikaci vytvoří "recept", pomocí kterého se vytvoří image (není podmínkou, ale pak musí pokaždé kontejner stavět a ručně). Jakým způsobem se do něj ta aplikace dostane si definuje builder. Tady právě dochází k tomu stažení, patchování a kompilace zdrojů z upstream z GitHubu nebo jiného SourceForge, stažení hotového archivu z libovolného umístění, instalace pomocí balíčkovacícho systému dané distribuce atd a to i včetně všech potřebných závislostí. Výstupem je image ve kterém jsou všechny soubory potřebné pro deployment kontejneru u uživatele. Odděleně od image pak vytvoří instalační skript, který u uživatele jednotlivé kontejnery prováže mezi sebou, nastaví persistentní umístění pro data a vůbec obecně nastaví pro okamžité použití. - Publikuje archivy image a instalačních skriptů do svého lokálního repozitáře. - Až je hotov se všemi imagi, které chce uveřejnit, zkopíruje obsah svého lokálního repozitáře na distribuční server. Uživatel: - Nastaví ve VMMgr přístup k repozitáři, který dostal. - Klikne na čudlik "instalovat" u vybrané aplikace. Kliknutí na čudlik způsobí: - Stáhnou a rozbalí se builderem publikované image a instalační skript. - Ze stažených imagí se vytvoří instance kontejnerů. - Spustí se instalační skript, který provede sérii kroků, které z jednotlivých nesouvisejících kontejneru učiní ucelené aplikační prostředí, tj. zkopíruje konfigurační soubory relevantní pro příslušnou aplikaci, naplní databázi iniciálními daty, vygeneruje administrátorské jméno a heslo atd. Prostě to funguje úplně stejně jako tisíce již existujících distribučních systémů. Takové RPM nebo DEB balíky se principiálně vytváří úplně stejně - builder stáhne a zkompiluje zdrojáky, nadefinuje závislosti, přiohne pár souborů pro danou distribuci a vyrobí instalační balík. Je pravděpodobné, že to za něj dělá nějaký skript, aby to nemusel dělat pokaždé ručně. Balík se umístí do nějakého repozitáře a kdo jej chce stáhnout, musí si na straně klienta repozitář nastavit. Stažení balíku rozbalí soubory, pustí nějaký post-install skript a existenci instalovaného balíku zapíše do nějaké lokální databáze. Nevymyslel jsem nic unikátního a inovativního, jen jsem postopáté znovuvynalezl kolo v takové velikosti, tloušťce a materiálu, který je žádoucí pro naše použití.
Podhorecky commented 2020-06-06 11:51:51 +02:00 (Migrated from git.spotter.cz)

Tohle je právě něco, k čemu by se asi hodil nějaký diagram

jojo, přesně tak:)

to dělení rolí. Ano, to je výstižně shrnuto.

Nevymyslel jsem nic unikátního a inovativního,

Jasné, jsem s tím v pohodě. Tohle celé issue je pro mne jen synchronizace jak to oba vidíme, případně jakou třešničku v dokumentaci dodat. A vy mi napíšete, že třešeň tam už je, jen zabalená v čokoládě, já ji považoval za něco jiného. :)

A s tím jsem upe v pohodě, nesnažím se vás nachytat. Jen míříme ke stejnému cíli a jsem poněkud pomalejší.

> Tohle je právě něco, k čemu by se asi hodil nějaký diagram jojo, přesně tak:) to dělení rolí. Ano, to je výstižně shrnuto. > Nevymyslel jsem nic unikátního a inovativního, Jasné, jsem s tím v pohodě. Tohle celé issue je pro mne jen synchronizace jak to oba vidíme, případně jakou třešničku v dokumentaci dodat. A vy mi napíšete, že třešeň tam už je, jen zabalená v čokoládě, já ji považoval za něco jiného. :) A s tím jsem upe v pohodě, nesnažím se vás nachytat. Jen míříme ke stejnému cíli a jsem poněkud pomalejší.
Disassembler commented 2020-06-06 12:52:02 +02:00 (Migrated from git.spotter.cz)

mentioned in issue

mentioned in issue Spotter-Cluster/vmmgr#7
Disassembler commented 2020-10-17 20:45:15 +02:00 (Migrated from git.spotter.cz)
moved from Podhorecky/Hosting#40
Disassembler commented 2020-10-17 20:46:08 +02:00 (Migrated from git.spotter.cz)

changed title from {-Decidim - při vytvoření druhé site není přijat certifikát-} to {+Implementovat rozhraní pro uživatelsky nastavenitelné subdomény a certifikáty+}

changed title from **{-Decidim - při vytvoření druhé site není přijat certifikát-}** to **{+Implementovat rozhraní pro uživatelsky nastavenitelné subdomény a certifikáty+}**
Disassembler commented 2020-10-17 20:59:04 +02:00 (Migrated from git.spotter.cz)

Aha, my už to tu máme jako . V tom případě zavírám. Funkce Decidimu byla zdokumentována, na další vývoj máme separátní ticket. Tady už není co víc řešit.

Aha, my už to tu máme jako #7. V tom případě zavírám. Funkce Decidimu byla zdokumentována, na další vývoj máme separátní ticket. Tady už není co víc řešit.
Disassembler (Migrated from git.spotter.cz) closed this issue 2020-10-17 20:59:05 +02:00
Sign in to join this conversation.
No description provided.