Adresářová struktura Sandboxu – výhody?
- nanuqcz
- Člen | 822
Ahoj, od začátku co používám Nette, mi vrtá hlavou jedna věc. Jaké výhody má současná struktura, kde se musí zasahovat nad root webu? Pojďme si udělat takové shrnutí…
Výhoda: Bezpečnost
Tohle mi přijde diskutabilní. Dneska už každý hosting za 40 Kč / měsíc (dokonce i free-hostingy) dovoluje zapnutí .htaccess souboru. A pomocí něho jde přístup zvenku do složek app/, libs/, logs/ a já nevím co ještě, krásně zakázat. Bezpečnost je tak zajištěna i bez této struktury.
Nevýhoda: Více projektů na jednom serveru » Nepřehlednost
Dejme tomu, že chci mít na svém serveru tři aplikace (např. blog, wiki, forum). Pokud by Sandbox měl normální „plochou“ adresářovou strukturu (index.php by byl v rootu, místo ve složce www), vytvořil bych jednoduše tyhle 3 složky, udělal z nich subdomény, do každé z nich nakopíroval Sandbox a začal ty tři aplikace vyvíjet.
V současném stavu ale kromě těchto tří složek budu muset ztrojit
složky app
, logs
, temp
a
tests
(pokud chci psát testy), navíc budu muset v index.php a
bootstrap.php tyto cesty upravovat. Pojďme se podívat, jak tedy výsledná
struktura bude vypadat:
app_blog/
app_wiki/
app_forum/
blog/ #http://blog.example.com
forum/ #http://forum.example.com
libs/
logs_blog/
logs_wiki/
logs_forum/
temp_blog/
temp_wiki/
temp_forum/
tests_blog/
tests_wiki/
tests_forum/
wiki/ #http://wiki.example.com
A to jsme jen u třech projektů, a je v tom (podle mojeho názoru) binec jako prase :)
Přehlednější by určitě bylo:
blog/ #http://blog.example.com
- ... #adresáře patřící k aplikaci `blog`
forum/ #http://forum.example.com
- ... #adresáře patřící k aplikaci `forum`
wiki/ #http://wiki.example.com
- ... #adresáře patřící k aplikaci `wiki`
Na to mi určitě budete chtít namítnout „Však si tu adresářovou strukturu uprav“, a k tomu se chci dostat. Nebylo by lepší ji mít v Sandboxu takto hezky ploše už defaultně?
Výhoda: Společný adresář libs/ pro knihovny
Tady je to zase diskutabilní, jestli ušetření pár kB / MB místa stojí za ten binec v libs/ (umlouvám se těm, kteří ve složce libs mají i při několika projektech pořádek :-)) Ono některé knihovny budu používat ve všech projektech, některé zase jen v jednom projektu… při změně prvního projektu se na (již nepoužívané) knihovny budu bát sáhnout: „Co když jsou využívány v některém z dalších projektů? (které psal třeba i kamarád, kolega)“
Nevýhoda: Začátečníci nechápou, proč má mít jejich web URL www.example.com/www :-)
A já se jim ani nedivím, tahle struktura je prostě „mírně zvláštní“.
Nevýhoda: Někdy není možné „nad root“ webu zasahovat
Nadpis mluví sám za sebe.
Závěr: Chtěl bych se ostatních zeptat, jaký na to mají názor, jestli už taky někdy upravovali strukturu Sandboxu do její pložší podoby, jestli je napadají další výhody / nevýhody, a co říkají na nápad upravit přímo strukturu Nette Sandboxu.
Díky za názory
Editoval xxxObiWan (21. 7. 2011 18:32)
- 22
- Člen | 1478
no já nevím, ale na tohle jsou přece moduly nebo mi něco uniká proč ne?
edit: A co se týka example.com/www … říkáš, že všude je .htaccess tak proč oddělovat index.php, když na to stejné místo můžu dát .htacces
RewriteEngine On
RewriteRule ^$ /your_folder/www [L,R=301]
takže jediná výhoda tvýho řešení je možná společná libs, ale já si většinu věci externích do dané aplikace dávám do app/XXXmodule/components
Editoval 22 (21. 7. 2011 18:51)
- nanuqcz
- Člen | 822
no já nevím, ale na tohle jsou přece moduly nebo mi něco uniká proč ne?
Možná to byl špatný příklad… Ale můžu mít aplikace, které spolu vůbec nesouvisí (třeba jen čekají na předání zákazníkům). Nebo chci mít na jednom serveru naše firemní stránky, pak třeba sociální síť (ala facebook), kterou vytváříme pro veřejnost (teď plácám :-)).
V takovýchto případech se podle mě použití modulů nehodí, i když chci mít aplikace na jednom serveru.
Editoval xxxObiWan (21. 7. 2011 18:53)
- 22
- Člen | 1478
Když spolu nesouvisí, proč mají sdílet stejný adresář teda, jen kvůli společným komponentám/knihovnám? A co když za půl roku budeš jeden z těch projektů chtít prodat a tedy přemístit na jiný hosting, to ti z toho jebne to vypreparovat a pravděpodobně tam dáš i tunu věcí, který ten projekt vůbec nevyužívá a to bude pak binec :-)
Editoval 22 (21. 7. 2011 18:58)
- Filip Procházka
- Moderator | 4668
Organizace… Na to já jsem úchyl. Dokážu dlouhé hodiny strávit přejmenováváním presenterů tam a zpátky :)
- Vyhovuje (čti „vyhovuje“ nikoliv „je lepší“) mi současný sandbox.
- Předělával jsem ho zatím jen jednou jedinkrát, pouze jsem nakopíroval
obsah složky www do rootu webu a opravil index.php
(
Framework::$iAmUsingBadHost = TRUE
) - Ve velkých aplikacích to dává velký smysl tak jak je to teď.
app/
ForumModule/
BlogModule/
FacebookModule/
temp/
log/
libs/
forum/
css/ - vlastní styly
images/ - vlastní obrázky
index.php
blog/
css/ - vlastní styly
images/ - vlastní obrázky
index.php
facebook/
css/ - vlastní styly
images/ - vlastní obrázky
index.php
shared/
css/ - sdílené styly
images/ - sdílené obrázky
Nastavíš si apache2/nginx aby směřoval virtualhost/server do jednotlivých složek + rewrite na index a je vystaráno :)
- Více projektů nepatří na jeden server – snažíš se ušetřit? Pokud
ano tak VPS/Dedikovaný/Cloud/… → odpadá problém
s prefixem
www/
- nanuqcz
- Člen | 822
@HosipLan: Polovině tvojeho příspěvku jsem nerozuměl (což je z důvodu mé neznalosti), ale i tak děkuju za odpověď ;-) Získal jsem teď trochu dojem, že Nette je určeno hlavně pro velmi zkušené programátory a průměrný PHPčkař, který neví co to je „apache2/nginx“, „VPS/Dedikovaný/Cloud“ apod., bude mít s Nette vždycky trochu problémy.
Ano, snažím se ušetřit – čas (proto se učím Nette :-)) i peníze (proto řeším tyhle blbosti :-))
- smasty
- Člen | 90
Pridám sa k xxObiWan.
Je jasné, že na veľké aplikácie je oveľa výhodnejšia súčasná
štruktúra a teoreticky je možno aj o niečo bezpečnejšia.
Ale sandbox by som skôr bral ako doporučenú štruktúru pre začiatočníkov, ktorá im bude bez problémov fungovať bez väčšej snahy. Pokročilí nech si používajú štruktúru, aká im vyhovuje (ja sám používam inú a to robím s Nette naozaj krátko).
A realita je taká, že na zdieľaných hostingoch (ktoré predpokladám bude používať asi väčšina začiatočníkov, a na bežné weby úplne stačia) je väčšinou štruktúra asi takáto:
/ FTP root
/www -> www.domena.tld
/forum -> forum.domena.tld
V takomto prípade je súčasná štruktúra značne nevýhodná, ako už ukázal xxObiWan.
Navyše, väčšina (nás) začiatočníkov sa asi veľmi nevyzná v konfigurovaní servera, takže je problém si v apache/nginx configu nastaviť potrebnú konfiguráciu. Tak isto aj na localhoste, niektorí sú radi, že majú XAMPP/WAMP, ktorý zázračne beží aj sám od seba a oni tam nič nastavovať nemusia.
Netvrdím, že je v poriadku nevedieť nič o konfigurácii servera, ale proste je to realita. Tak prečo začiatočníkom robiť začiatky (o trochu) ťažšími?
- Filip Procházka
- Moderator | 4668
@**Smasty**: Všechno to jde nastudovat během pár dní, nejdéle. Chce to jen chtít.
@**xxxObiWan**: David s prý oblibou říká (já to ještě nepostřehl), že se nebojí doporučovat Nette i začátečníkům s PHP. Čili asi to nebude jen na velké projekty :)
- na1k
- Člen | 288
xxxObiWan,
/
forum/
app/
lib/
www/
wiki/
app/
lib/
www/
www/
app/
...
s tím, že jde o klasickou hostingovou FTP strukturu, kde
forum
, wiki
, www
, odpovídá subdoméně.
Do každé z těchto subdomén pak dám .htaccess
:
RewriteEngine on
RewriteRule ^(.*)$ /www/$1 [NE]
Ano, je to trochu proti filozofii sandboxu a zbytečně se duplikují knihovny, ale to jsou řádově kB až MB. To je malá cena za přehlednost, která touto organizací dle mého roste :-)
Navíc mi to dovoluje na subdoménách pouštět aplikace s různou verzí Nette (obecně knihoven), stejně jako můžu dát programátorovi konkrétní aplikace přístup jen k subdoméně a ne k celé doméně (rootu).
Editoval na1k (22. 7. 2011 10:12)
- srigi
- Nette Blogger | 558
Netreba zabudat, ze duplikovanie kniznic celkom spolahlivo zabija prinos, ktory prinasaju op-code cache. Podla mojho skromneho nazoru, mozu jednotne kniznice priniest zaujimavu vykonovu optimalizaciu pri multi-projekt aplikacii – v starej praci sme to videli na hostingoch, kde kniznice boli per-projekt a po zmene na symlinky sa aplikacie mierne zrychlili ale hlavne klesla zataz Apache (APC fragmentacia klesla hadam o 50%).
- Tharos
- Člen | 1030
Něco k té bezpečnosti. Kdysi tu bylo jedno vlákno od Davida
s upozorněním, kolik procent webů běžících na Nette nemá zabezpečený
config.ini
. Nepamatuji si z hlavy, kolik přesně procent to bylo
(a to vlákno už je koukám z pochopitelných důvodů odstraněné), ale bylo
to velmi překvapivé číslo (určitě více než 5%). Vzpomínám si, že to
končilo výzvou: „Běžte si to opravit!“ a následoval už jen lock toho
vlákna. :)
Myslím, že to číslo bylo docela přesné, protože David měl od Jakuba Vrány (předpokládám, že od něj) seznam všech CZ domén, na kterých bylo podle hlaviček detekováno Nette, a předpokládám, že je prostě zkontroloval jednoduchým robotem.
V každém případě šlo o weby na serverech, kde programátoři z nějakého důvodu překopali výchozí strukturu na plochou (samozřejmě v mnoha případech museli). Překvapivě velké množství z těch programátorů pak už vůbec neřešilo nějaký .htaccess a nutnost ochránit config.ini, který se tak ocitl v rootu webu.
Pokud by výchozí struktura Nette byla plochá, jsem přesvědčen, že množství webů s touto bezpečnostní dírou by skutečně vzrostlo a to by na Nette nevrhalo dobré světlo (i když správně přednastavený .htaccess přímo v sandboxu by určitě ochránil většinu webů produkovaných méně zkušenými programátory).
- kravčo
- Člen | 721
Myslím si, že duplikovanie knižníc má zmysel v prípade, že potrebujem viaceré verzie (pretože jedna staručká aplikácia beží pod 0.9.x zopár novších pod starším 2.0-dev a najnovšia pod 2.0-beta).
Osobne si nemyslím, že problémom vysokého
percenta viditeľných config.ini
je zmena štruktúry,
skôr neskúsenosť, neznalosť, alebo slabý dôraz na zabezpečenie webu. Ak
má človek v adresároch app/
a libs/
.htaccess so
zakázaným prístupom, tak je predsa jedno, kde v hierarchii tieto adresáre
umiestni…
Teoreticky, ďalším dôvodom mohla byť kombinácia prístup len do doménového rootu + vypnutá podpora htaccess na serveri. Tam už je ale najlepším riešením zmeniť hostéra…
- nanuqcz
- Člen | 822
na1k napsal(a):
RewriteEngine on RewriteRule ^(.*)$ /www/$1 [NE]
Zkoušel jsi to? Mě v tomhle případě Nette při URL
http://localhost/blog/
hlásí chybu:
Nette\Application\BadRequestException #404
Cannot load presenter 'Blog', class 'BlogPresenter' was not found in 'D:\XamppLite_1.7.3\htdocs\blog\app/presenters/BlogPresenter.php'.
Otestováno na nejnovější vývojové verzi Nette. Navíc jsem to kdysi zkoušel i na 0.9.7 a i tehdy to způsobovalo tuhle chybu.
EDIT: Tak se omlouvám, v rootu localhostu (a tím pádem i v rootu subdomény) to funguje. V podsložce ale ne, takže mi to nepřijde jako univerzální řešení.
Editoval xxxObiWan (23. 7. 2011 16:51)
- na1k
- Člen | 288
100% univerzální to asi není; sám jsem aplikaci v podsložce nikdy nevyužil a jednotlivé aplikace mám buď na různých (local)hostech anebo v subdoménách
V případě http://localhost/blog/
by ale mělo stačit
přesunout .htaccess
z rootu do /blog/
. Obecně by
měl být na stejné úrovni jako
app
,lib
,www
- nanuqcz
- Člen | 822
V případě
http://localhost/blog/
by ale mělo stačit přesunout.htaccess
z rootu do/blog/
. Obecně by měl být na stejné úrovni jakoapp
,lib
,www
Jj přesně tak jsem to měl, ale Nette si z nějakého důvodu myslí, že
blog
je název presenteru (asi kvůli
new Route('<presenter>/<action>/<id>', 'homepage:default')
)
EDIT: Myslíte, že by se to dalo brát jako bug?
Editoval xxxObiWan (23. 7. 2011 18:19)
- Patrik Votoček
- Člen | 2221
Stávající struktura je podle mě OK jiné frameworky to mají hodně podobně. Navíc Nette je v tomto směru doopravdy hodně volné. Takže vzít obsah složky www a hodit ho o ůroveň víše + editnout index.php je hračka.
Nehledě na to že mám možnost provozovat více instancí nad stejnýmy zdrojovímy kódy (a využít tak naplno APC / xCache / WinCache).
Výchozí stav je v tomto ohledu bych řekl OK s faktem snadné změny je to o to více OK. Nehledě na to že kvalitnější hostingy (pokud se pletu opravte mě – už více jak 2 roky jsem o hosting nezavadil) ti vstup nad document_root dovolují (ty za cenu rohlíku měsíčně jsou na tom holt hůře).
- David Grudl
- Nette Core | 8228
Adresář www
je určený pro veřejně dostupné soubory.
Dávat do něj neveřejné soubory mi připadá divné, zhruba stejně,
jako kdybychom libs
a log
dali do adresáře
images
a jen zakázali přístup přes htaccess. Lze to,
ale proč?
- Peppy
- Člen | 137
No, ja používam túto štruktúru:
public/
system/
FrontEndModule/
BackEndModule/
...
index.php
Ak ide o zložitejšie projekty tak:
libs/
Nette/
forum/
public/ # JavaScripty, Styly, Obrázky, Verejné súbory a iný balast.
FrontEndModule/
BackEndModule/
...
index.php
wiki/
public/
FrontEndModule/
BackEndModule/
...
index.php