Ako vytvoriť vlastný NuGet server

Pre tých čo ešte nepoznajú NuGet, prípadne ho spoznali len "včera" a rozmýšľajú nad tým, že ako by sa dal vytvoriť vlastný NuGet server som sa rozhodol spísať krátky návod ako tento server vytvoriť. Uvedený postup vychádza z postupu ktorý je uverejnený tu, s tým, že som doplnil kroky ktoré som musel absolvovať, aby dané riešenie fungovalo úplne.

Najprv si musíme nainštalovať NuGet Visual Studio extension. Spustíme Visual Studio a vytvoríme nový projekt typu ASP.NET Empty Web Application.

ASP.NET Empty Web Application
Vytvorenie prázdnej webovej aplikácie

Štruktúra projektu by mala vyzerať nasledovne:

Štruktúra projektu po vytvorení
Štruktúra projektu po vytvorení

Teraz treba v okne Solution Explorer kliknúť pravým tlačítkom myšky na položku References a vybrať z menu Manage NuGet Packages....

Otvorenie dialógu pre inštalovanie NuGet balíčkov
Otvorenie dialógu pre inštalovanie NuGet balíčkov

V novo otvorenom dialógu vyberieme záložku Online, do vyhľadávacieho textbox-u zadáme NuGet.Server a klikneme na tlačítko Install čím nainštalujeme nájdený NuGet balíček.

Nainštalovanie balíčka NuGet.Server
Nainštalovanie balíčka NuGet.Server

Po nainštalovaní balíčka máme vytvorenú web aplikáciu, ktorá predstavuje náš nový NuGet server.

Štruktúra NuGet server aplikácie
Štruktúra NuGet server aplikácie

Pred tým ako nasadíme aplikáciu do IIS, musíme ešte upraviť pár nastavení. Jedným z týchto nastavení je cesta k úložisku NuGet balíčkov. Toto nastavenie môžeme meniť vo web.config súbore v časti appSettings ako hodnotu pre kľúč packagesPath. Defaultne je hodnota pre tento kľúč prázdna. Ak je zadaná prázdna hodnota ako cesta k úložisku balíčkov sa použíje ~/Packages, čiže adresár Packages nachádzajúci sa v rámci samotnej aplikácie. Adresár sa však nemusí nachádzať v rámci aplikácie a môžeme definovať akékoľvek umiestnene na disku. Po nakopírovaní NuGet balíčkov do tohto adresára sú tieto balíčky okamžite prístupné na inštalovanie.

<appSettings>
    
<add key="packagesPath" value="" />
</
appSettings>
Konfigurácia umiestnenia balíčkov

Ďalším dôležitým nastavením, ak chceme balíčky aj publikovať na náš NuGet server, je nastavenie apiKey. Hodnota tohto nastavenia predstavuje heslo/kľúč, ktorý oprávňuje užívateľov publikovať (prípadne mazať) balíčky na serveri. Ak však nechceme aby bolo potrebné pri publikovaní balíčkov zadávanie apiKey, môžeme nastaviť ďalší kľúč requireApiKey na hodnotu false. Samotný apiKey by sme však mali mať aj tak nastavený, pretože v originálnom návode, z ktorého som vychádzal aj ja, sa uvádza, že ak nenastavíme apiKey, tak bude pblikovanie / mazanie balíčkov zakázané.

<appSettings>
    
<add key="requireApiKey" value="true" />
    <
add key="apiKey" value="999372af-8355-494b-ad02-828fa0773d1d" />
</
appSettings>
Konfigurácia apiKey

V ďalšom kroku vypublikujeme webovú aplikáciu, aby sme ju mohli neskôr nasadiť do IIS. Napríklad do adresára "C:\inetpub\wwwroot\LocalNuGetServer".

Vypublikovanie web aplikácie
Vypublikovanie web aplikácie

V ďalšom kroku vytvoríme web site pre NuGet server. Zapneme IIS, a vytvoríme nový web site, tak, že klikneme pravým tlačítkom na Add Web Site.

Pridanie novej web site
Pridanie novej web site

V novom okne vyberieme Physical path ako umiestnenie kde sme vypublikovali web aplikáciu NuGet servera a nastavíme Site name a port (napr. 19000). Ak sme zadali Site name automaticky sa pre nás vytvoril aj nový aplikačný pool, s rovnomenným názvom. Pre tento pool treba ešte skontrolovať či využíva správnu verziu .NET Framework-u. Mne defaultne nastavil verziu v2.0 a musel som ju prestaviť na v4.0. Na zmenu aplikačného pool-u stači kliknúť v ľavej časti okna na položku Application Pools vybrať náš pool, následne v pravej časti okna kliknúť na Advanced Settings a zmeniť verziu .NET Framework-u.

Nastavenie novej web site
Nastavenie novej web site

Ak teraz do prehliadača zadáme adresu http://localhost:19000, v okne by sa mal objaviť nasledovný obsah:

Okno bežiacej aplikácie
Okno bežiacej aplikácie

Aby sme mohli inštalovať balíčky umiestnené na našom NuGet serveri, musíme ešte pridať tento server ako zdroj NuGet balíčkov cez dialógové okno nastavení NuGet manažéra vo Visual Studiu a to tak, že nastavíme názov Name a url adresu Source nášho servera a klineme na tlačítko Add. Okno s nastaveniami otvoríme tak, že klikneme na tlačítko Settings ktoré je prístupné v okne pre pridávanie referencií na NuGet balíčky (viď. pridanie Nuget.Server balička).

Pridanie referencie na vlastný NuGet server do Visual Studia
Pridanie referencie na vlastný NuGet server do Visual Studia

Publikovanie balíčkov na NuGet server

Ako som už v úvode spomenul, balíčky môžeme na server publikovať jednoducho tak, že ich nakopírujeme do nakonfigurovaného adresára. Na ich publikovanie však môžeme využiť aj commandline tool NuGet.exe Command Line bootstrapper prípadne nástroj NuGet Package Explorer, v ktorom môžeme samotné balíčky pohodlne vytvárať aj editovať.

Pre publikovanie balíčka pomocou NuGet Package Explorer nástroja, vyberieme z menu FILE položku Publish, nastavíme Publish Url a náš Publish key (publish key je hodnota apiKey, ktorú sme predtým nakonfigurovali) a stlačíme tlačítko Publish.

Publikovanie balíčka
Publikovanie balíčka

Ak všetko prebehlo správne, tak vo VisualStudiu by sme mali hneď vidieť náš vypublikovaný balíček:

Zobrazenie vlastného balíčka
Zobrazenie vlastného balíčka

Mne sa na prvý krát však nepodarilo vypublikovať balíček a dostal som len hlášku (405) Method not allowed. Táto chyba súvisí s tým, že máme nainštalovaný WebDAV, ktorý defaulne spracúva PUT a DELETE http verbs a robí "zlotu". Napriek tomu, že som ho mal v IIS disablovaný pre daný web site, stále som dostával spomínanú odpoveď. Riešením je doplniť web.config o nasledovné nastavenie:

<configuration>
    
<system.webServer>
        
<modules runAllManagedModulesForAllRequests="true">
            
<!-- Odstránenie WebDAV modulu -->
            
<remove name="WebDAVModule" />        
        </
modules>
    
</system.webServer>
</configuration>
Vypnutie WebDAV modulu

Po aplikovaní uvedeného nastavenia sa WebDAV modul vypne. Publish však stále nešiel. Namiesto hlášky (405) som teraz dostal error hlášku (500) Internal Server Error.. Čo sa totiž neuvádza v originálnom návode, a je potrebné spraviť, je nastavenie práv pre zápis do adresára kde sa nachádzajú NuGet balíčky. Urobíme to tak, že vyberieme daný adresár a klikneme naň pravým tlačítkom myšky, a z menu vyberieme položku Edit Permissions.

Nastavenie práv zápisu
Nastavenie práv zápisu

V záložke Security potom nastavíme práva zápisu pre užívateľa IIS_IUSRS.

Nastavenie práv zápisu pre IIS_IUSRS
Nastavenie práv zápisu pre IIS_IUSRS

Po aplikovaní daných dvoch nastavení už fungoval aj publish bez problémov (teda aspoň u mňa). Ak sa niekto pri inštalovaní NuGet servera stretol aj s inými problémami, prípadne má iné skúsenosti s inštaláciou, ktoré by stáli za zmienku, budem rád ak ich formou diskusie zazdiela svetu.

Publikované Friday, January 11, 2013 5:06 PM xxxmatko
Zaradené do: , , ,

Komentáre

Bez komentárov