Elige el Gestor de Paquetes NuGet Correcto y Configúralo con IIS

Has construido una aplicación o tal vez incluso un conjunto de scripts importantes y necesitas empaquetarlos y desplegarlos. No busques más que NuGet y los diferentes gestores de paquetes de NuGet que tienes disponibles.

En este artículo, aprenderás cómo configurar varios gestores de paquetes de NuGet por primera vez para que puedas empezar a usarlos de inmediato.

Relacionado: Cómo configurar un servidor NuGet en Windows (Guía completa)

Configuración de un contenedor NuGet.Server

Aunque configurar un NuGet.Server desde cero no es demasiado complicado, puede llevar tiempo para alguien nuevo en Visual Studio e IIS. Una forma de acelerar el proceso de configuración y actualización es utilizando un contenedor. Uno de los contenedores más populares, llamado nuget-server, es uno desarrollado por svenkle y se puede encontrar en su página de Github.

Una de las principales diferencias al usar este contenedor en lugar de instalar manualmente el servidor web es que utiliza IIS Express. Puedes obtener más información sobre las diferencias en el sitio web de Microsoft.

Hay dos diferencias importantes entre la configuración de un NuGet.Server básico y con este contenedor:

  • debes crear un servicio de Windows para iniciar el servidor web
  • no puedes utilizar el Administrador de IIS para la configuración

La principal desventaja de usar un contenedor para instalar NuGet.Server es que no puedes actualizar fácilmente la versión hasta que el contenedor esté actualizado.

Requisitos previos

Si deseas aprender cómo configurar este contenedor NuGet.Server, primero asegúrate de tener lo siguiente:

Instalación del servicio del servidor web

El primer paso es crear un nuevo servicio de Windows. Dado que este contenedor NuGet.Server no utiliza IIS, no puedes aprovechar IIS.

Con el archivo NuGetServer.zip descargado desde la página de lanzamientos, descomprime el archivo en el directorio de tu elección en el servidor web. Una vez descomprimido, crea el servicio de Windows para iniciar automáticamente la página web cuando inicias el servidor. A continuación, encontrarás un comando de PowerShell para hacerlo por ti.

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

Personalización del servidor web

Ahora que tienes el NuGet.Server instalado desde el envoltorio y el servicio está creado y iniciado, es hora de personalizar el archivo web.config. Puedes hacer los mismos cambios que harías en el archivo web.config con la implementación manual si lo deseas.

El archivo web.config se encuentra en la carpeta <UnzipPath>\Host\Website. La diferencia principal con esta implementación es que utiliza el puerto 8080 en lugar del puerto HTTP predeterminado 80. Esto significa que en cualquier lugar donde habrías utilizado la URL web, debes agregar :8080, por ejemplo, al ir a la página web sería http://localhost:8080/nuget.

¡Todo listo! ¡Eso fue mucho más fácil que usar Visual Studio!

Configurando BaGet en IIS

Aunque hasta ahora solo has estado viendo versiones estándar de NuGet.Server, hay muchas otras versiones disponibles. Un administrador de paquetes NuGet popular es un proyecto de código abierto llamado BaGet.

Vamos a ver qué se necesita para instalar y ejecutar BaGet en un servidor Windows con IIS.

Requisitos previos

Antes de comenzar, asegúrate de cumplir con algunos requisitos previos.

  • BaGet.zip: En el momento de escribir esto, el proyecto aún está en prelanzamiento y estoy usando la versión 0.1.77.
  • NET Core Runtime & Hosting Bundle: Esto deberá descargarse y estar disponible en el servidor web para más adelante.
  • Windows Server – Cualquier versión actualmente soportada de Windows Server funcionará, pero todas las capturas de pantalla se han tomado en Windows Server 2019 Standard

Instalando los Prerrequisitos del Servidor Web

Aunque los siguientes pasos pueden ejecutarse en Linux con .NET Core o en una imagen Docker, estas instrucciones se utilizarán para instalar BaGet en un servidor Windows. De esta manera, puedes aprovechar IIS para iniciar y detener tu servidor.

Instalar IIS

Dado que BaGet se ejecuta en .NET Core, no hay tantos requisitos como el servidor NuGet básico para el cual instalaste IIS anteriormente. Solo necesitas un servidor web IIS predeterminado y el Administrador de IIS. Para instalar estos, abre una sesión de PowerShell en tu servidor web y ejecuta:

Install-WindowsFeature Web-Server -IncludeManagementTools

Instalar .NET Core

A continuación, instala el paquete de .NET Core en el servidor web. Para hacer esto, ejecuta el archivo exe que descargaste anteriormente. Puedes dejar todas las opciones como predeterminadas para esta instalación.

El paquete de .NET Core debe instalarse después de que se haya instalado IIS. Si esto no sucede en el orden correcto, deberás volver a ejecutar el instalador del paquete de .NET Core y seleccionar reparar para agregar los requisitos faltantes para una aplicación web.

Ahora que tienes los componentes del servidor web listos, descomprime el archivo BaGet.zip descargado anteriormente y colócalo en la carpeta C:\inetpub\wwwroot en tu servidor web.

Configurando la Aplicación del Servidor Web

Similar a NuGet.Server, deberás configurar algunos componentes de IIS para poner en marcha el administrador de paquetes NuGet BaGet.

Creación del grupo de aplicaciones BaGet en IIS

Abre IIS Manager en el servidor web y ve a Application Pools. Crea un nuevo grupo de aplicaciones para BaGet, ya que no utilizará código gestionado de .NET. Puedes darle el nombre que desees. A continuación se muestra cómo debería verse.

Creating a BaGet application pool

Creación del sitio web BaGet

Una vez creado el grupo de aplicaciones, crea el sitio web. Dado que BaGet utiliza un puerto HTTP no estándar y un grupo de aplicaciones no predeterminado, es más fácil crear un sitio web separado del Default Web Site. Para hacerlo, haz clic derecho en la carpeta Sites en IIS manager y selecciona Add Website.

A continuación se detallan los ajustes que debes configurar para BaGet.

Creating a BaGet IIS Website

Una vez configurado el sitio, debería iniciarse automáticamente. Puedes echar un vistazo yendo a http://localhost:5000/ desde tu servidor.

BaGet packages web page

Notarás que la interfaz de usuario en la página web de BaGet es más completa en comparación con la página web estándar de NuGet.Server. En BaGet, puedes buscar fácilmente paquetes que se hayan cargado y también proporciona comandos sobre cómo cargar de diversas maneras en lugar de usar las opciones de línea de comandos de NuGet.

Personalización del servidor web BaGet

Recuerda que pudiste personalizar tu servidor NuGet.Server usando el archivo web.config. Pero el administrador de paquetes NuGet BaGet no utiliza el archivo web.config. En su lugar, debido a que BaGet también se puede usar en Linux, los desarrolladores optaron por un formato más multiplataforma con un archivo JSON llamado appsettings.json. Se encuentra en la carpeta C:\inetpub\wwwroot\BaGet.

Ten en cuenta que, debido a que BaGet utiliza .NET Core para la funcionalidad multiplataforma, todas las rutas utilizan barras diagonales.

Por ejemplo, si deseas tener tu ruta de paquete en C:\Packages en tu servidor, deberías tener lo siguiente en el archivo appsettings.json.

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

Clave de API BaGet

Para proteger tu servidor NuGet de usuarios no autorizados para publicar o eliminar paquetes, aún querrás establecer una clave de API. La configuración de la clave de API también se encuentra en el archivo appsettings.json, por lo que puedes establecerla mientras estás allí.

Dado que estoy usando PowerShell para administrar mis paquetes NuGet, nuevamente puedo registrar un PSRepository. Para BaGet, navega a la página web que creaste. La página web te dará el comando que debes ejecutar en tu sesión de PowerShell. Por ejemplo:

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

Entendiendo las bifurcaciones de BaGet (LiGet)

Aunque BaGet ofrece muchas opciones de uso, existen otras bifurcaciones de BaGet que se han creado para especializarse en otras áreas de NuGet. Una de las bifurcaciones más populares es LiGet. LiGet es diferente porque se especializa en una perspectiva centrada en Linux.

LiGet es un gestor de paquetes NuGet derivado del proyecto original BaGet. Hubo algunas razones por las cuales los desarrolladores decidieron hacer esto, pero principalmente se hizo para enfocarse en algunas características específicas de NuGet, incluido el soporte para feeds v3. El soporte para feeds v3 no afecta el caso de uso con PowerShell. Pero si vas a alojar un servidor NuGet para otros casos de uso, es posible que disfrutes de la funcionalidad adicional.

Clave de API Hashed de LiGet

Una diferencia importante entre LiGet y BaGet es el uso de una clave de API hash en lugar de texto plano. Con una clave de texto plano, alguien con acceso al archivo web.config en NuGet.Server o al archivo appsettings.json en BaGet podría publicar en el servidor. Esto no podría ocurrir con LiGet.

Para poner en marcha LiGet, deberás crear una clave de API hash y colocarla en el archivo appsettings.json en la carpeta C:\inetpub\wwwroot\LiGet.

Para crear el hash, puedes usar PowerShell o cualquier otro método de hash con el que te sientas cómodo. A continuación, se muestra un ejemplo de lo que ejecutarías en tu estación de trabajo para crear un hash.

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

También puedes usar un generador de hash en línea para crear el hash.

La desventaja de este enfoque es que si olvidas la clave de API, debes crear un nuevo hash y reemplazarlo, ya que el hash no es reversible.

Configuración de ProGet en IIS

Todas las opciones que se han cubierto hasta ahora son gratuitas y no tienen muchas partes móviles una vez configuradas. Si bien esto es bueno para probar NuGet, si desea integrarse con otras herramientas o si necesita soporte del proveedor para un sistema en el lugar de trabajo, una opción mejor podría ser el administrador de paquetes NuGet ProGet.

Requisitos previos

Para configurar ProGet, necesitarás algunos requisitos comunes a los que probablemente ya estés acostumbrado, pero con la adición de una base de datos SQL opcional.

  • Servidor Windows – Cualquier versión actualmente compatible de Windows Server funcionará, pero todas las capturas de pantalla se han realizado en Windows Server 2019 Standard
  • Instalador de ProGet – La versión de ProGet que estoy utilizando es la 5.2.9.
  • Instancia SQL – Esto es opcional, ya que ProGet tiene la opción de instalar SQL Express desde el instalador, aunque esto requiere una conexión a Internet desde su servidor para la descarga inicial

Instalación de ProGet

Desde tu servidor web, ejecuta el instalador de ProGet. Dado que estás configurando IIS, selecciona la opción servidor web IIS al instalar ProGet. Si aún no tienes IIS instalado, se encargará de la instalación durante la instalación de ProGet.

El resto de las opciones puedes dejarlas como predeterminadas a menos que quieras alojar la base de datos de ProGet en un servidor SQL separado. En ese caso, deberás especificar la instancia de SQL a utilizar.

Si dejas la opción Servidor SQL como Instalar instancia Inedo, se instalará el servidor SQL Express por ti.

Installing ProGet

Una vez finalizada la instalación, inicia el sitio web cuando se te solicite y deberías ver una página web que se ve como en la captura de pantalla a continuación.

ProGet Home

Configurando un PSRepository en ProGet

En este punto, ProGet está instalado. Es bastante fácil. Dado que estamos utilizando PowerShell para trabajar con paquetes NuGet, necesitaremos configurar un PSRepository como lo hemos hecho anteriormente.

Para configurar ProGet como un PSRepository, ve a la pestaña Feeds y crea un nuevo feed. Puedes darle el nombre que desees. Luego selecciona Formato de paquete de terceros y PowerShell como se muestra a continuación.

Creating a ProGet PSRepository feed

Una vez que hayas creado el feed, regresa a la pestaña Feeds, selecciona tu nuevo feed y te mostrará la URL que se utiliza para publicar. Esto es lo que necesitarás ejecutar en PowerShell en un dispositivo para publicar o descargar desde este PSRepository.

A continuación se muestra lo que se mostró con el ejemplo anterior:

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

Agregando una clave API

Como en las otras opciones, necesitas generar una clave API. Para hacer esto, haz clic en el icono de engranaje en la esquina superior derecha y luego selecciona Claves API en la barra de herramientas izquierda. Aquí puedes ver las claves API existentes y puedes crear nuevas. Inmediatamente verás una diferencia principal entre ProGet de código abierto y ProGet empresarial. Con ProGet, puedes tener muchas claves API.

ProGet API Keys

En la pantalla de Claves de API, haz clic en Crear clave API. Desde aquí, marca la casilla para API de Feed y haz clic en Guardar clave API.

Creating a ProGet API Key

Una vez que se haya creado la clave API, te llevará de vuelta a la página de claves de API. Desde aquí, puedes usar la clave API que ves para publicar paquetes en tu feed.

Búsqueda de paquetes con ProGet

ProGet también incluye una página web que te permite buscar todos los paquetes NuGet en el feed, ver su recuento de descargas, el nombre de los módulos de PowerShell, en qué feed se cargó un paquete y otras estadísticas de paquetes similares desde la página de Paquetes como se muestra a continuación.

Viewing NuGet packages in ProGet

Alternativamente, puedes ir a la página de Feeds y seleccionar un feed para ver solo los paquetes de ese feed. Allí puedes profundizar en paquetes individuales para ver las estadísticas y otros detalles sobre los paquetes como se muestra a continuación.

Viewing individual ProGet packages

Actualización de ProGet

Una de las partes buenas de usar un producto que se ha posicionado para una empresa es que algunas de las tareas administrativas más laboriosas son mucho más rápidas. Un ejemplo de esto es actualizar ProGet.

Para actualizar ProGet a la versión más reciente, simplemente abre el Instalador de Inedo en tu servidor web. Esto se instaló cuando instalaste por primera vez ProGet. Haz clic en el botón Actualizar y se mostrará a continuación y el instalador hará el resto por ti.

Updating ProGet

Comparación de administradores de paquetes NuGet

Has aprendido mucho sobre varias herramientas NuGet en este artículo. Si todavía estás buscando cuál probar, en esta sección tendrás un vistazo a lo que hace que cada una sea diferente.

BaGet vs. LiGet

Desde que LiGet es un fork de BaGet, comparten muchas similitudes, incluido la mayoría del proceso de configuración. De hecho, puedes seguir el mismo procedimiento de configuración exacto que BaGet.

Una vez instalados, LiGet y BaGet comparten algunas características pero difieren en otras maneras.

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

Aunque la mayoría de estas diferencias no afectan el uso con PowerShell, la configuración cambia ligeramente debido al uso de una clave API hash.

Ambos BaGet y LiGet están construidos en .NET Core, lo que los hace multiplataforma y utilizables en sistemas operativos Linux, así como en Windows. Ambos también tienen imágenes de Docker disponibles que, si ya estás utilizando un servicio de contenedor, pueden hacer que la configuración sea mucho más rápida y portátil.

Con las pocas diferencias entre LiGet y BaGet, cualquiera de ellos es una excelente opción para un servidor NuGet de código abierto y compatible con contenedores. Ambas opciones te permiten sumergirte en un servidor NuGet en Windows y, al mismo tiempo, facilitan la transición a Linux o a una imagen de Docker en el futuro sin demasiado trabajo adicional.

BaGet vs ProGet

Si prefieres no configurar todo por ti mismo y tomar la ruta fácil, siempre está ProGet. Sin embargo, hay desventajas. ProGet no es de código abierto y no es gratuito en absoluto. Pero es más fácil de configurar y trabajar con él.

Existen algunas diferencias importantes entre ProGet y 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 también tiene un desglose de todas las diferencias de características entre las versiones de ProGet.

Resumen

En este artículo, aprendiste un montón sobre varias herramientas y tecnologías de NuGet. Si estabas dudando sobre qué servidor de NuGet utilizar, ahora deberías tener mucho más conocimiento para ayudarte a tomar esa decisión.

Aprendiste sobre cómo configurar cada conjunto de herramientas de NuGet para que funcionen con Windows y cubrimos muchas de las características de cada una.

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