Univerzální „instalátor“ Nette aplikací
- Panda
- Člen | 569
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:
- 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 kapp
alibs
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 MySQLmysqldump
). 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.
- Aplikace by sama našla
- 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
…
- Doplnění: složky s metadaty (
- 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.
- Aplikace by projela soubory projektu a postupně by je zahrnula do balíku:
- 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 typuupload
,files
,public
,private
,photos
… vdocument_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.
- Vytvořil by se soubor
- 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
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
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
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ý…
- Panda
- Člen | 569
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
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)