Univerzální „instalátor“ Nette aplikací

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Panda
Člen | 569
+
0
-

Zdravím všechny,
zrovna včera ráno jsem nahrával na hosting jednu malou aplikaci a opět jsem si uvědomil, jaká je to vlastně nuda a jak snadno se zapomene například na práva zápisu do app/log. Tak mě napadlo – co kdyby se vytvořil automatizovaný instalátor, který by nudnou práci provedl za programátora?

Samotná myšlenka je jednoduchá. Šlo by o malou webovou aplikaci (psanou v Nette, samozřejmě) s minimální konfigurací, která by vzala celou aplikaci na vývojovém serveru, vytvořila by z ní balík, přihodila k němu jeden soubor s instalátorem a to celé by se nahrálo na hosting a instalátor by se už o vše postaral. Důraz by byl kladen na co nejmenší počet souborů pro upload (v ideálním případě jeden jediný) a na odvedení co nejvíce práce za programátora.

Vytváření a instalaci balíku bych si představoval asi takto:

  1. Programátor by ve webové aplikaci vybral složku s aplikací:
    • Aplikace by sama našla index.php, ze kterého by načetla cestu k app a libs a předvyplnila by je programátorovi.
    • Aplikace by načetla config.ini, z něj by se pokusila odhadnout nastavení k databázi (konfigurace pro dibi/jiný databázový layer) a pokud by narazila na nějaký podporovaný typ databáze (MySQL, SQLite – já osobně znám pořádně jen tyto, takže by podpora pro další druhy byly na ostatních), pokusila by se za programátora vytvořit její dump (u SQLite nakopírovat databázový soubor, u MySQL mysqldump). Pokud by se nepodařilo najít podporovaný typ databáze, programátor by byl upozorněn a případně by si mohl zadat údaje sám.
  2. Programátor by si zkontroloval nastavení, trochu upravil, vybral typ balíku (ZIP, PHAR, TAR…) a stiskl velké tlačítko „Vytvořit instalační balík“:
    • Aplikace by projela soubory projektu a postupně by je zahrnula do balíku:
      • Doplnění: složky s metadaty (.git, .svn, nbproject, .project…) by nebyly zahrnuty
      • obsah složek temp, sessions, log by nebyl zahrnut
      • soubory by mohly být prohnány filtrem – minifikace JS/CSS, přidání hlaviček souborů, zahrnutí čísla vydání do hlaviček souborů, bcompiler
    • Aplikace by vytvořila dump databáze a zahrnula by ho do balíku.
    • K balíku by připojila vygenerovaný soubor samotného instalátoru.
  3. Programátor by balík nahrál na server a spustil by v prohlížeči instalátor, kde by zadal novou cestu k app, libs (možnost volby podle toho, zda má na hostingu možnost vytvářet soubory mimo část dostupnou z webu) a stiskl by tlačítko:
    • Vytvořil by se soubor .htaccess, který by na dobu instalace povolil přístup k webu pouze programátorovi.
    • Všechny soubory by se rozbalily do příslušného umístění.
    • Nastavila by se práva na zápis do složek temp, log, sessions + pro další složky – ty by byly nastavené při instalaci, ideálně i automaticky detekované – složky typu upload, files, public, private, photos… v document_root.

      // Doplnění: nechal jsem se unést plnou automatizací nějak mi nedošlo, že pokud ten web rozbalí samo PHP, tak by složky měly být zapisovatelné i bez toho. V takovém případě by to šlo modifikovat opačným směrem – ochránit některé soubory aplikace před zápisem.

    • Z config.ini by se načetlo nastavení databáze pro produkční server a proběhl by import.
  4. Programátor by si zkontroloval funkčnost webu a v instalátoru by klepl na dokončit – z .htaccess by se odstranilo omezení na jeho IP adresu.

Co na to říkáte? Myslíte, že by to bylo realizovatelné, nebo máte složitější aplikace, které vyžadují náročnější instalační proces? Mělo by to vůbec smysl? Máte ještě nějaké další nápady, co by to mohlo umět? Pustíme se do toho?

Editoval Panda (10. 1. 2010 16:12)

despiq
Člen | 320
+
0
-

me to celkem smysl dava a libi se mi to a pri cteni me jeste napadla vec verzovani

rekneme ze za mesic sem udelal nejakej vyraznejsi upgrade a je pro me snazsi prehrat vsechny soubory nebo i databazi

a tak me napadlo co udelat i nejakou automatizaci na produkcnim serveru
jakoze jeden script by mi zabalil starou verzi do archivu plus by udelal dump databaze pro jistotu a pak by smazal app cast a programatory by vybral novy nahrany soubor se vsemi novymi soubory a ten by celou app cast nahral a pak by porovnal document_root cast jestli se tam neco zmenilo napr nove slozky nebo nove soubory noa nakonec by porovnal DB jestli tam vznikly nejaky nove veci ktere by kdyztak upravil

moc nevim jak funguje git i kdyz bych mel ale asi je to podobny princip na porovnavani zmenenych souboru ale tam to bude udelany asi pres nakej hash souboru?

Panda
Člen | 569
+
0
-

Verzování by až na databázi problém nebyl. Spíš bych ale aktualizační balíček vytvářel na základě staršího balíčku, bude to jistější.

Ještě mě napadlo mít možnost nezahrnovat data z nějaké složky či tabulky v databázi, aby se nahrávala čistá aplikace a ne aplikace s testovacími daty.

Ondřej Mirtes
Člen | 1536
+
0
-

Nemělo by se tohle všechno řešit deploymentem ve spolupráci s verzovacím systémem? :)

Ale jasně, ne všude je to možný…

Honza Marek
Člen | 1664
+
0
-

A komprimaci CSS a JS bych řešil WebLoaderem :)

Panda
Člen | 569
+
0
-

Ad deployment – samozřejmě že by se to tak řešit mělo, ale to je reálné spíš u středních a velkých projektů na nějakém „vlastním“ serveru. U některých menších projektů, kde občas ani není předem známý hosting, by to asi nemělo moc smysl. Navíc je to takový řekněme profesionálnější přístup – kolik začátečníků bude u své první Nette aplikace řešit verzování s deploymentem? Oproti tomu snadné nasazení bude chtít asi každý…

Ad webloader – já taky, je to jen příklad toho filtrování.

Eskel
Člen | 5
+
0
-

Co bych za takový instalátor dal. Má vyhlídka že teď strávím přinejmenším den instalováním něčeho co jsem horko těžko rozchodil na localhostu je docela hrozná. :-/
Programátorským lamám jako jsem já by to nesmírně pomohlo. Tak nějak jsem čekal že Nette bude na nasazení na běžném hostingu připravené a usnadní mi ho (nebo mi ho přinejmenším nezkomplikuje), ale hned první zásek mám na tom, že doporučená struktura souborů na ostrém serveru vůbec nefunguje. :) A htaccess z duše… nemám rád.
To už je ale offtopic, píšu sem jen abych podpořil tu myšlenku, protože je skvělá.

EDIT: Panda je vůbec takový malý zázrak, v polovině případů nacházím záchranu právě v jeho příspěvcích. https://forum.nette.org/…iewtopic.php?…
Díky :)

Editoval Eskel (11. 2. 2010 2:56)