適切なNugetパッケージマネージャーを選択し、IISと設定する

あなたはアプリケーションまたは重要なスクリプトのセットを構築し、それをパッケージ化して展開する必要があります。NuGetとさまざまなNuGetパッケージマネージャーが利用できるので、それらを探す必要はありません。

この記事では、最初にさまざまなNuGetパッケージマネージャーを設定する方法を学び、すぐに使用を開始することができます。

関連記事:WindowsでNuGetサーバーをセットアップする(完全な手順)

NuGet.Serverラッパーの設定

NuGet.Serverをスクラッチから設定することはそれほど複雑ではありませんが、Visual StudioとIISに慣れていない人にとっては時間がかかる場合があります。セットアップと更新プロセスのスピードアップのための方法として、ラッパーを使用することがあります。最も人気のあるラッパーの1つは、nuget-serverと呼ばれるもので、svenkleが作成したもので、彼らのGithubページで見つけることができます。

このラッパーを使用する場合、Webサーバーを手動でインストールする代わりにIIS Expressを使用するという大きな違いがあります。違いについては、Microsoftのウェブサイトで詳細を読むことができます。

バニラのNuGet.Serverとこのラッパーを設定する際の2つの重要な違いは次のとおりです:

  • ウェブサーバーを起動するためにWindowsサービスを作成する必要があります
  • 構成にはIISマネージャーを使用できません。

NuGet.Serverをインストールするためにラッパーを使用する主なデメリットは、ラッパーが更新されるまで簡単にバージョンを更新できないことです。

前提条件

このNuGet.Serverラッパーのセットアップ方法を学びたい場合は、まず以下のものを確認する必要があります:

Webサーバーサービスのインストール

最初のステップは、新しいWindowsサービスを作成することです。このNuGet.ServerラッパーはIISを使用していないため、IISに乗っ取ることはできません。

リリースページからダウンロードしたNuGetServer.zipファイルを解凍して、Webサーバー上の任意のディレクトリに展開します。展開したら、サーバーを起動すると自動的にWebページが開始されるように、Windowsサービスを作成します。以下に、それを行うためのPowerShellコマンドが示されています。

New-Service -Name NuGetServer -BinaryPathName '<UnzipPath>\Svenkle.NuGetServer.Service.exe' -StartupType Automatic
Start-Service -Name NuGetServer

Webサーバーのカスタマイズ

NuGet.Serverのインストールがラッパーから完了し、サービスが作成され、開始されたので、web.configファイルをカスタマイズする時が来ました。手動展開の場合と同じ変更をweb.configファイルに加えることもできます。

web.configファイルは、<UnzipPath>\Host\Websiteフォルダにあります。この展開の主な違いは、デフォルトのHTTPポート80ではなく、ポート8080を使用することです。つまり、Web URLを使用する場所では、:8080を追加する必要があります。たとえば、ウェブページに移動する場合は、http://localhost:8080/nugetとなります。

すべて完了しました。Visual Studioを使用するよりもはるかに簡単でした!

IISでBaGetをセットアップする

今まで、NuGet.Serverの標準バージョンのみを見てきましたが、他にもたくさんの利用可能なバージョンがあります。人気のあるNuGetパッケージマネージャーの1つは、BaGetというオープンソースプロジェクトです。

BaGetをWindows Serverにインストールして実行するには、以下の手順を実行します。

前提条件

始める前に、いくつかの前提条件を満たしていることを確認してください。

  • BaGet.zip – この時点ではプレリリースのため、v0.1.77を使用しています。
  • .NET Coreランタイムおよびホスティングバンドル – これは後でWebサーバーでダウンロードして利用できる必要があります。
  • Windows Server – 現在サポートされているバージョンのWindows Serverはすべて動作しますが、すべてのスクリーンショットはWindows Server 2019 Standardで撮影されています。

Webサーバーの前提条件のインストール

以下の手順は、.NET Coreを使用したLinuxまたはDockerイメージで実行することもできますが、この手順ではWindowsサーバーにBaGetをインストールするためのものです。これにより、IISを使用してサーバーの開始と停止を行うことができます。

IISのインストール

BaGetは.NET Core上で実行されるため、以前にIISをインストールしたNuGet.Serverと比べて要件は少ないです。デフォルトのIIS WebサーバーとIISマネージャーのみが必要です。これらをインストールするには、WebサーバーでPowerShellセッションを開き、次のコマンドを実行します:

Install-WindowsFeature Web-Server -IncludeManagementTools

.NET Coreのインストール

次に、Webサーバーに.NET Coreバンドルをインストールします。これを行うには、前にダウンロードしたexeファイルを実行します。このインストールでは、すべてのオプションをデフォルトのままにしておいてください。

.NET Coreバンドルは、IISのインストール後にインストールする必要があります。正しい順序でインストールされない場合は、.NET Coreバンドルのインストーラーを再実行し、Webアプリケーションに必要な要件を追加するために修復を選択する必要があります。

Webサーバーコンポーネントの準備ができたら、前述のBaGet.zipファイルを解凍して、WebサーバーのC:\inetpub\wwwrootフォルダーに配置します。

Webサーバーアプリケーションの設定

NuGetパッケージマネージャBaGetを動作させるには、NuGet.Serverと同様にいくつかのIISコンポーネントを設定する必要があります。

BaGet IISアプリケーションプールの作成

WebサーバーのIISマネージャーを開き、アプリケーションプールに移動します。BaGet用の新しいアプリケーションプールを作成します。.NETの管理コードは使用しないため、任意の名前を付けることができます。以下は、作成するべき状態です。

Creating a BaGet application pool

BaGetウェブサイトの作成

アプリケーションプールが作成されたら、ウェブサイトを作成します。BaGetは非標準のHTTPポートとデフォルトでないアプリケーションプールを使用するため、デフォルトWebサイトからは別のウェブサイトを作成するのが簡単です。これを行うには、IISマネージャーSitesフォルダ上で右クリックし、ウェブサイトの追加を選択します。

以下は、BaGetを設定するために必要な設定です。

Creating a BaGet IIS Website

サイトの設定が完了すると、自動的に起動します。サーバーからhttp://localhost:5000/ にアクセスすることで、確認できます。

BaGet packages web page

BaGetのウェブページには、標準のNuGet.Serverのウェブページと比べてユーザーインターフェースが充実しています。BaGetでは、アップロードされたパッケージを簡単に検索することができ、NuGetのコマンドラインオプションを使用せずにさまざまな方法でアップロードするためのコマンドも提供しています。

BaGetウェブサーバーのカスタマイズ

web.configファイルを使用してNuGet.Serverサーバーをカスタマイズできることを思い出してください。ただし、NuGetパッケージマネージャーのBaGetはweb.configファイルを使用しません。代わりに、BaGetはLinuxでも使用できるように、よりクロスプラットフォームの形式であるJSONファイルのappsettings.jsonを使用しています。これはC:\inetpub\wwwroot\BaGetフォルダにあります。

BaGetは.NET Coreを使用してクロスプラットフォーム機能を提供するため、すべてのパスはスラッシュを使用しています。

たとえば、サーバー上のパッケージパスをC:\Packagesにしたい場合は、以下のようにappsettings.jsonファイルに表示されているものが必要です。

"Storage": {
    "Type": "FileSystem",
    "Path": "C://Packages"
}

BaGet APIキー

パッケージの公開や削除からNuGetサーバーを保護するために、APIキーを設定することが依然として必要です。APIキーの設定もappsettings.jsonにありますので、そこで設定することができます。

私はNuGetパッケージを管理するためにPowerShellを使用しているため、再びPSRepositoryを登録することができます。BaGetの場合、作成したウェブページに移動してください。ウェブページでは、PowerShellセッションで実行するコマンドが表示されます。たとえば:

Register-PSRepository -Name "BaGet" -SourceLocation "http://<WebServer>:5000/v3/index.json" -PublishLocation "http://<WebServer>:5000/api/v2/package" -InstallationPolicy "Trusted"

BaGetフォーク(LiGet)の理解

BaGetは多くのオプションを提供していますが、NuGetの他の分野に特化したBaGetのフォークも存在します。最も人気のあるフォークの1つはLiGetです。LiGetはLinuxを主眼に置いた特徴を持っています。

LiGetは、BaGetの元のプロジェクトからフォークしたNuGetパッケージマネージャーです。開発者たちはいくつかの理由でこれを行うことを決めましたが、主にNuGetの特定の機能に焦点を当てるために行われました。その中には、v3フィードのサポートも含まれています。v3フィードのサポートはPowerShellの使用には影響しません。ただし、他のユースケースのためにNuGetサーバーをホスティングする場合は、追加の機能が利用できるかもしれません。

LiGetのハッシュ化されたAPIキー

LiGetとBaGetの主な違いの1つは、平文の代わりにハッシュ化されたAPIキーの使用です。平文のキーは、NuGet.Serverのweb.configファイルやBaGetのappsettings.jsonにアクセス権がある人がサーバーにパブリッシュできる可能性がありますが、LiGetではそれが起こりません。

LiGetを起動するには、ハッシュ化されたAPIキーを作成し、C:\inetpub\wwwroot\LiGetフォルダ内のappsettings.jsonファイルに配置する必要があります。

ハッシュを作成するには、PowerShellまたは快適な他のハッシング方法を使用することができます。以下に、ワークステーションで実行する例を示します。

([System.Security.Cryptography.HashAlgorithm]::Create('SHA256').ComputeHash([System.Text.Encoding]::UTF8.GetBytes(<apikey>)) | 
Foreach-Object { $_.ToString('x2')}) -join ''

また、オンラインのハッシュジェネレーターを使用してハッシュを作成することもできます。

このアプローチの欠点は、APIキーを忘れると新しいハッシュを作成して置き換える必要があることです。ハッシュは逆に戻すことができません。

IIS上でProGetをセットアップする

これまでにカバーされたオプションはすべて無料であり、設定が完了した後はほとんど動く部品がありません。これはNuGetを試すのには良いですが、他のツールと統合したり、職場でシステムのベンダーサポートが必要な場合は、NuGetパッケージマネージャーProGetがより良いオプションかもしれません。

前提条件

ProGetをセットアップするには、おそらく今まで慣れている一般的な前提条件が必要ですが、オプションのSQLデータベースも追加されます。

  • Windows Server – サポートされている現在のバージョンのWindows Serverであればどれでも動作しますが、すべてのスクリーンショットはWindows Server 2019 Standardで撮影されています。
  • ProGetインストーラー – 使用しているProGetのバージョンは5.2.9です。
  • SQLインスタンス – これはオプションです。ProGetにはインストーラーからSQL Expressをインストールするオプションがありますが、初期のダウンロードにはサーバーからのインターネット接続が必要です。

ProGetのインストール

WebサーバーからProGetインストーラーを実行します。IISをセットアップしているため、ProGetのインストール時にIIS Webサーバーオプションを選択します。IISがまだインストールされていない場合、ProGetのインストール中にインストールが処理されます。

残りのオプションはデフォルトのままにしておいてください。ただし、ProGetデータベースを別のSQLサーバーにホストする場合は、使用するSQLインスタンスを指定する必要があります。

もしSQL ServerオプションをInstall Inedo instanceにしたままにすると、SQL Expressサーバーが自動的にインストールされます。

Installing ProGet

インストールが完了したら、指示が表示されたらウェブサイトを起動し、以下のスクリーンショットのようなウェブページが表示されるはずです。

ProGet Home

ProGetでPSRepositoryを設定する

この時点で、ProGetがインストールされました。非常に簡単です。NuGetパッケージを扱うためにPowerShellを使用するので、以前に行ったようにPSRepositoryを設定する必要があります。

PSRepositoryを設定するために、Feedsタブに移動し、新しいフィードを作成します。フィードの名前は任意に設定できます。次に、以下のようにThird-party package formatPowerShellを選択します。

Creating a ProGet PSRepository feed

フィードを作成したら、Feedsタブに戻り、新しいフィードを選択すると、公開に使用されるURLが表示されます。これをPowerShellで実行すると、このPSRepositoryにパブリッシュまたはダウンロードするために必要なものです。

以下は、上記の例で表示された内容です。

Register-PSRepository -Name ProGet -SourceLocation http://<WebServer>:8624/nuget/PSRepository/ -PublishLocation http://<WebServer>:8624/nuget/PSRepository/ -InstallationPolicy Trusted

APIキーの追加

他のオプションと同様に、APIキーを生成する必要があります。これを行うには、右上隅の歯車アイコンをクリックし、左のツールバーからAPI Keysを選択します。ここで既存のAPIキーを表示したり、新しいキーを作成したりすることができます。オープンソースとエンタープライズのProGetの間には、すぐに主な違いが見えるでしょう。ProGetでは、多くのAPIキーを持つことができます。

ProGet API Keys

APIキー画面で、APIキーの作成をクリックします。ここから、フィードAPIのチェックボックスを選択し、APIキーの保存をクリックします。

Creating a ProGet API Key

APIキーが作成されると、APIキーページに戻ります。ここから、表示されるAPIキーを使用してパッケージをフィードに公開することができます。

ProGetでパッケージを検索する

ProGetには、フィード内のすべてのNuGetパッケージを検索し、ダウンロード数、PowerShellモジュールの名前、パッケージがアップロードされたフィードなど、パッケージの統計情報を表示するウェブページも含まれています。以下のようにパッケージページから確認できます。

Viewing NuGet packages in ProGet

また、フィードページに移動し、フィードを選択すると、そのフィードに関連するパッケージのみを表示することもできます。ここから、個々のパッケージに詳細情報や統計情報を表示することができます。

Viewing individual ProGet packages

ProGetの更新

エンタープライズ向けの製品を使用する利点の一つは、より時間のかかる管理タスクを迅速に処理できることです。ProGetの更新もその一例です。

最新バージョンのProGetに更新するには、まず最初にProGetをインストールした際にインストールされたInedoインストーラーをWebサーバーで開きます。次に、アップグレードボタンをクリックし、インストーラーが残りの作業を行います。

Updating ProGet

NuGetパッケージマネージャーの比較

この記事では、さまざまなNuGetツールについて学びました。まだどのツールを試すか迷っている場合は、このセクションでは各ツールの違いを垣間見ることができます。

BaGet vs. LiGet

LiGetはBaGetのフォークであり、セットアッププロセスを含め、多くの類似点があります。実際に、BaGetとまったく同じセットアップ手順に従うことができます。

インストール後、LiGetとBaGetは一部の機能を共有していますが、他の点では異なります。

Feature BaGet LiGet
Web Port 5000 9011
Source URL /v3/index.json /api/v3/index.json
NuGet Search API v2 v3
API Key Plain Text SHA256 hash
Web Interface Can see list of packages and commands to upload No web interface

これらの違いのほとんどはPowerShellの使用には影響しませんが、セットアップはハッシュ化されたAPIキーの使用により若干変更されます。

BaGetとLiGetの両方は.NET Core上に構築されており、これによりクロスプラットフォームでLinuxおよびWindowsのオペレーティングシステムで使用することができます。また、両方ともDockerイメージが利用可能であり、既にコンテナサービスを使用している場合は、セットアップをより迅速かつ移植性のあるものにすることができます。

LiGetとBaGetのわずかな違いを考慮すると、どちらもオープンソースでコンテナに対応したNuGetサーバーの優れた選択肢です。これらのオプションは、Windows上でNuGetサーバーに足を踏み入れることを可能にしながら、将来的にはLinuxまたはDockerイメージに移行する際の追加作業を最小限に抑えることができます。

BaGet vs ProGet

一定の程度まで自分自身で作り上げることを避け、簡単な道を選びたい場合は、常にProGetがあります。ただし、デメリットもあります。ProGetはオープンソースではなく、無料ではありません。ただし、セットアップや操作は簡単です。

ProGetとBaGetの間にはいくつかの主な違いがあります。

Feature ProGet BaGet
Cost ProGet Free: Free, ProGet Basic: $1995/yr, ProGet Enterprise: $9995+/year Free
Platform Windows Windows, Linux, Docker
Database SQL Internal
Support ProGet Free: Email and Slack support, ProGet Basic and Enterprise: Defined SLAs with Email, Slack and Phone support Community based through GitHub issues

InedoはProGetのバージョン間の機能の違いをすべて解説しています。

概要

この記事では、さまざまなNuGetツールとテクノロジーについて多くのことを学びました。もしNuGetサーバーの選択に迷っていたのであれば、今ではその決定をサポートするための知識がずっと増えたはずです。

Windowsとの連携に必要な各NuGetツールのセットアップ方法や、それぞれの機能についても学びました。

Source:
https://adamtheautomator.com/nuget-package-manager/