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.
|
|
Vytvorenie prázdnej webovej aplikácie
|
Štruktúra projektu by mala vyzerať nasledovne:
|
|
Š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
|
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
|
Po nainštalovaní balíčka máme vytvorenú web aplikáciu, ktorá predstavuje náš nový NuGet
server.
|
|
Š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
|
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
|
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
|
Ak teraz do prehliadača zadáme adresu http://localhost:19000, v okne by sa mal
objaviť nasledovný obsah:
|
|
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
|
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
|
Ak všetko prebehlo správne, tak vo VisualStudiu by sme mali hneď vidieť náš vypublikovaný balíček:
|
|
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
|
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
|
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.