Nasazení webu v MVC 2 na sdílený hosting

V rámci sebezvzdělávání jsem začal tvořit jednoduchý webík s databázovým přístupem pomocí technologie ASP.NET MVC 2, která je součástí Visual Studia 2010. Pro provoz na localhostu stačí jenom stisknout klávesu F5 a ASP.NET Development Server se postará o zbytek. Nasazení na sdílený hosting je ovšem o něco náročnější. Zkusím nastínit, jaká úskalí jsem překonával.

Kam a za kolik?

Kritérium bylo zřejmé – hosting musí být zdarma (za své pokusy nepotřebuji platit ani kvůli nim násilnit vlastní doménu druhého řádu). Ani jsem se moc nerozhlížel a zkusil rovnou ASPone.cz. Doména třetího řádu, SQL Server 2008, ASP.NET 4.0 a 40 MB prostoru je víc, než si bez placení zasloužím. Registrace (vlastně objednávka) neproběhla bez komplikací, ale povedlo se.

Jak dostat web na server

Visual Studio oplývá možností automatického publikování souborů nutných k provozu. Hravě zvládne data nahrát i na FTP, takže není nic jednoduššího, než tuto možnost využít a kliknout pravým tlačítkem myši na projekt v Solution Exploreru a zvolit „Publish…“. Tři tečky napovídají, že si s námi bude IDE ještě povídat, takže vyplníme požadované údaje (jsou k nalezení v administraci ASPone).

Okno nastavení publikování na FTP ASPone.cz

Publikování lze konfigurovat (například zvolit, že nechceme na server nahrávat obsah složky App_Data) ve vlastnostech projektu na kartě, do níž se dostaneme rovnou z kontextové nabídky projektu položkou „Package/Publish Settings“ (je hned pod „Publish…“).

Poznámka: Pakliže z nějakého důvodu nemůžete použít automatické publikování na FTP, můžete ještě zkusit automatické sestavení instalačního balíčku (volba „Build Deployment Package“, výsledek se bude nacházet v adresáři obj). Pokud ani to nezabere, vězte, že je třeba na FTP přenést následující soubory:

  • složku App_Data (používáte-li databázi), ale pouze soubory MDF,
  • složku bin (soubory DLL),
  • složku Content,
  • složku Scripts,
  • složku Views,
  • soubor Global.asax,
  • soubor Web.config.

Není tedy nutné zahrnovat zdrojové soubory kódu na pozadí (CS, VB…), protože jsou kompilovány do jedné DLL knihovny.

Když pak svou adresu navštívíte, zjistíte, že váš nádherný, funkčně výjimečný a debuggerem promazaný web… nefunguje. Jedeme dál.

Úpravy

Hosting v prvé řadě sám od sebe nepodporuje ASP.NET MVC 2, proto je nutné přibalit do adresáře bin knihovnu System.Web.Mvc.dll. Ve Visual Studiu stačí v Solution Exploreru vybrat References a následně System.Web.Mvc. Potom otevřít vlastnosti (Properties) a nastavit parametr Copy Local na True (viz obrázek), což zařídí, že se patřičný soubor DLL zkopíruje při sestavení do složky bin.

Dále je nutno upravit routování tak, aby URL vedla nejprve na soubor s příponou ASPX, takže každý požadavek si převezme ASP.NET a zpracuje jej. Změna je v souboru Global.asax a vypadá takto:

routes.MapRoute(
	"Default", // Route name
	"{controller}.aspx/{action}/{id}", // URL with parameters
	new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

routes.MapRoute(
	"Root",
	"",
	new { controller = "Home", action = "Index", id = "" }
);

(U základního pravidla přibyla přípona „.aspx“ za „{controller}“, druhé pravidlo je pro případ, kdy není zadána žádná podstránka a odkazuje se přímo na root webu.)

Pokud používáte systém přihlašování ASP.NET, bude ještě nutné upravit v souboru web.config, sekci <authentication>, elementu <forms> vlastnost loginUrl tak, aby reflektovala změnu v routování (tedy např. "~/Account.aspx/LogOn").

Co databáze?

V tuto chvíli byl tedy web funkční, odkazy odkazovaly a kontrolery kontrolovaly. Další zádrhel představila databáze. Používám SQL Server 2008 Express, s nímž na localhostu fungovalo vše bez problémů. Chvíli mi ale trvalo přijít na to, jak rozjet databázi na serveru.

Výhodou ASPone je, že vedle „velkého“ SQL Serveru nabízí také použití verze Express. Stačí tak provést tyto úkony:

  • nahrát soubory s příponou MDF do složky App_Data (dá se nastavit u automatického publikování), pozor – soubory LDF si server generuje sám, takže pokud je na FTP pošlete taky, skončí spuštění chybou,
  • provést drobnou úpravu v souboru web.config – connectionString odkazující na databázi musí mít ještě parametr Database, jehož obsahem je jakákoliv změť znaků (podmínkou je, aby byla jedinečná).
connectionString="data source=.\SQLEXPRESS;Integrated Security=True;AttachDBFilename=|DataDirectory|\Users.mdf;User Instance=true;Database=userdb_kpxw7so2"

Nakonec je ještě potřeba nastavit oprávnění k zápisu do adresáře App_Data. V administraci ASPone se to provede v nastavení webu (Klientská sekce > Přehled služeb > nazev.aspone.cz > Nastavení webu).

Shrnutí

Postup ještě jednou v bodech:

  1. Přibalit knihovnu System.Web.Mvc.
  2. Upravit routy v Global.asax.
  3. Upravit adresu přihlašovací stránky ve web.config.
  4. Upravit Connection String databází ve web.config.
  5. Nahrát soubory na server (ručně či publikací z Visual Studa).
  6. Nastavit práva zápisu v administraci.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *