Cómo configurar todos los administradores de paquetes NuGet [en profundidad]
Ha creado una aplicación o quizás incluso un conjunto de scripts importantes y necesita empaquetarla e implementarla. No busque más, NuGet y los diversos administradores de paquetes NuGet que tiene disponibles.
En este artículo, aprenderá cómo configurar varios administradores de paquetes NuGet por primera vez para que pueda comenzar a usarlos de inmediato.
Relacionado: Configuración del servidor NuGet en Windows (tutorial completo)
Configuración de un contenedor NuGet.Server
Si bien configurar un NuGet.Server desde cero no es demasiado complicado, alguien nuevo en Visual Studio e IIS puede tardar un poco. Una forma de acelerar el proceso de configuración y actualización es con un contenedor. Uno de los contenedores más populares, llamado nuget-server, está escrito por svenkle y se puede encontrar en su página de Github.
Una de las principales diferencias con el uso de este contenedor en lugar de instalar manualmente el servidor web es que utiliza IIS Express. Puede leer más sobre las diferencias en el sitio web de Microsoft.
Hay dos diferencias importantes entre configurar un NuGet.Server básico y con este contenedor son:
- debe crear un servicio de Windows para iniciar el servidor web
- no puede utilizar el Administrador de IIS para la configuración
La principal desventaja de utilizar un contenedor para instalar NuGet.Server es que no se puede actualizar fácilmente la versión hasta que se actualice el contenedor.
Requisitos previos
Si desea aprender cómo configurar este contenedor NuGet.Server, primero deberá asegurarse de tener lo siguiente:
- Instalador para el contenedor NuGet.Server de svenkle
- Windows Server: cualquier versión actualmente compatible de Windows Server funcionará, pero todas las capturas de pantalla se tomaron en Windows Server 2019 Standard.
Instalación del servicio de servidor web
El primer paso es crear un nuevo servicio de Windows. Dado que este contenedor NuGet.Server no usa IIS, no puede utilizar IIS.
Con el archivo NuGetServer.zip descargado de la página de versiones, descomprímalo en el directorio que elija en el servidor web. Una vez descomprimido, cree el servicio de Windows para iniciar automáticamente la página web cuando inicie el servidor. A continuación encontrará un comando de PowerShell para hacerlo por usted.
New-Service -Name NuGetServer -BinaryPathName '<UnzipPath>\Svenkle.NuGetServer.Service.exe' -StartupType Automatic
Start-Service -Name NuGetServerPersonalizar el servidor web
Ahora que tiene NuGet.Server instalado desde el contenedor y que el servicio está creado e iniciado, es hora de personalizar el archivo web.config. Puede realizar los mismos cambios que haría en el archivo web.config con la implementación manual si lo desea.
El archivo web.config se encuentra en la carpeta
Todo listo. ¡Eso fue mucho más fácil que usar Visual Studio!
Configurar BaGet en IIS
Si bien hasta ahora solo ha estado buscando versiones estándar de NuGet.Server, existen muchas otras versiones disponibles. Un administrador de paquetes NuGet popular es un proyecto de código abierto llamado BaGet.
Veamos qué se necesita para instalar BaGet y ejecutarlo en un servidor Windows con IIS.
Requisitos previos
Antes de comenzar, asegúrese de cumplir con algunos requisitos previos.
- BaGet.zip: al momento de escribir esto, el proyecto aún se encuentra en fase preliminar y estoy usando la versión 0.1.77.
- Paquete de alojamiento y tiempo de ejecución .NET Core: deberá descargarse y estar disponible en el servidor web para más adelante.
- Windows Server: cualquier versión actualmente compatible de Windows Server funcionará, pero todas las capturas de pantalla se tomaron en Windows Server 2019 Standard.
Requisitos previos para la instalación del servidor web
Si bien los pasos siguientes se pueden ejecutar en Linux con .NET Core o en una imagen de Docker, estas instrucciones se utilizarán para instalar BaGet en un servidor Windows. De esta manera puede aprovechar IIS para iniciar y detener su servidor.
Instalar IIS
Dado que BaGet se ejecuta en .NET Core, no hay tantos requisitos como el NuGet.Server básico para el que instaló IIS antes. Sólo necesita un servidor web IIS predeterminado y el administrador de IIS. Para instalarlos, abra una sesión de PowerShell en su servidor web y ejecute:
Install-WindowsFeature Web-Server -IncludeManagementToolsInstalar .NET Core
A continuación, instale el paquete .NET Core en el servidor web. Para hacer esto, ejecute el archivo exe que descargó anteriormente. Puede dejar todas las opciones predeterminadas para esta instalación.
El paquete .NET Core debe instalarse después de instalar IIS. Si esto no sucede en el orden correcto, deberá volver a ejecutar el instalador del paquete .NET Core y seleccionar reparar para agregar los requisitos faltantes para una aplicación web.
Ahora que tiene listos los componentes del servidor web, descomprima el archivo BaGet.zip descargado anteriormente y colóquelo en la carpeta C:\inetpub\wwwroot de su servidor web.
Configuración de la aplicación del servidor web
De manera similar a NuGet.Server, necesitará configurar algunos componentes de IIS para que el administrador de paquetes NuGet BaGet esté en funcionamiento.
Creación del grupo de aplicaciones BaGet IIS
Abra el Administrador de IIS en el servidor web y vaya a Grupos de aplicaciones. Cree un nuevo grupo de aplicaciones para BaGet ya que no utilizará código administrado .NET. Puedes nombrarlo como quieras. A continuación se muestra cómo debería verse.
Creando el sitio web de BaGet
Una vez creado el grupo de aplicaciones, cree el sitio web. Dado que BeGet 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 sitio web predeterminado. Para hacer esto, haga clic derecho en la carpeta Sitios en el Administrador de IIS y seleccione Agregar sitio web.
A continuación se muestran los ajustes que necesita para configurar BaGet.
Una vez que haya configurado el sitio, debería iniciarse automáticamente. Puedes echarle un vistazo yendo a http://localhost:5000/ desde tu servidor.
Notará que hay más interfaz de usuario en la página web de BaGet en comparación con la página web estándar de NuGet.Server. En BaGet, puede buscar fácilmente paquetes que se han cargado y también proporciona comandos sobre cómo cargarlos de varias maneras en lugar de usar las opciones de la línea de comandos de NuGet.
Personalizar el servidor web BaGet
Recuerde que pudo personalizar su servidor NuGet.Server utilizando el archivo web.config. Pero el administrador de paquetes NuGet, BaGet, no utiliza el archivo web.config. En cambio, dado que BaGet también se puede utilizar 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.
Tenga en cuenta que debido a que BaGet usa .NET Core para la funcionalidad multiplataforma, todas las rutas usan barras diagonales.
Por ejemplo, si desea tener la ruta de su paquete en C:\Packages en su servidor, necesitará tener lo que se muestra a continuación en el archivo appsettings.json. .
"Storage": {
"Type": "FileSystem",
"Path": "C://Packages"
}Clave API de BaGet
Para proteger su servidor NuGet de usuarios no autorizados que publiquen o eliminen paquetes, aún querrá configurar una clave API. La configuración de la clave API también se encuentra en appsettings.json, por lo que puedes configurarla mientras estás allí.
Como estoy usando PowerShell para administrar mis paquetes NuGet, puedo registrar nuevamente un PSRepository. Para BaGet, navegue hasta la página web que creó. La página web le dará el comando para ejecutar en su 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"Comprensión de las horquillas BaGet (LiGet)
Si bien 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 desde un punto de vista centrado en Linux.
LiGet es un administrador de paquetes NuGet derivado del proyecto original de BaGet. Hubo algunas razones por las que los desarrolladores decidieron hacer esto, pero principalmente se hizo para centrarse en algunas características específicas de NuGet, incluida la compatibilidad con feeds v3. La compatibilidad con fuentes V3 no afecta el caso de uso con PowerShell. Pero si va a alojar un servidor NuGet para otros casos de uso, puede disfrutar de la funcionalidad adicional.
Clave API hash de LiGet
Una diferencia importante entre LiGet y BaGet es el uso de una clave API hash en lugar de texto sin formato. Con una clave de texto sin formato, alguien con acceso al archivo web.config en NuGet.Server o appsettings.json en BaGet podría publicar en el servidor. Esto no podría suceder con LiGet.
Para que LiGet esté en funcionamiento, deberá crear una clave API con hash y colocarla en el archivo appsettings.json en C:\inetpub\wwwroot\LiGet. carpeta.
Para crear el hash, puede utilizar PowerShell o cualquier otro método de hash con el que se sienta cómodo. A continuación se muestra un ejemplo de lo que ejecutaría en su 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 utilizar un generador de hash en línea para crear el hash.
El inconveniente de este enfoque es que si olvida la clave API, debe crear un nuevo hash y reemplazarlo, ya que el hash no es reversible.
Configurar 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 integrarlo con otras herramientas o si necesita soporte de proveedor para un sistema en el lugar de trabajo, una mejor opción puede ser el administrador de paquetes NuGet ProGet.
Requisitos previos
Para configurar ProGet, necesitará algunos requisitos previos comunes a los que probablemente ya esté acostumbrado, pero con el adicional de una base de datos SQL opcional.
- Windows Server: cualquier versión actualmente compatible de Windows Server funcionará, pero todas las capturas de pantalla se tomaron en Windows Server 2019 Standard.
- Instalador de ProGet: la versión de ProGet que estoy usando es 5.2.9.
- Instancia SQL: esto es opcional ya que ProGet tiene una opción para instalar SQL Express desde el instalador, aunque esto requiere una conexión a Internet desde su servidor para realizar la descarga inicial.
Instalación de ProGet
Desde su servidor web ejecute el instalador de ProGet. Ya que está configurando IIS, seleccione la opción servidor web IIS al instalar ProGet. Si aún no tiene IIS instalado, se encargará de la instalación durante la instalación de ProGet.
El resto de las opciones puede dejarlas como predeterminadas a menos que desee alojar la base de datos de ProGet en un servidor SQL independiente. En ese caso, deberá especificar la instancia de SQL que desea utilizar.
Si deja la opción SQL Server como Instalar instancia de Inedo, instalará el servidor SQL Express por usted.
Una vez que finalice la instalación, inicie el sitio web cuando se le solicite y debería ver aparecer una página web similar a la siguiente captura de pantalla.
Configurar un PSRepository en ProGet
En este punto, ProGet está instalado. Es bastante fácil. Dado que usamos PowerShell para trabajar con paquetes NuGet, necesitaremos configurar un PSRepository como lo hicimos anteriormente.
Para configurar ProGet para un PSRepository, navegue hasta la pestaña Feeds y cree un nuevo feed. Puedes nombrar el feed como quieras. Luego seleccione Formato de paquete de terceros y PowerShell como se muestra a continuación.
Una vez que haya creado el feed, vuelva a la pestaña Feeds, seleccione su nuevo feed y se mostrará la URL utilizada para la publicación. Esto es lo que necesitaría 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 TrustedAgregar una clave API
Al igual que las otras opciones, es necesario generar una clave API. Para hacer esto, haga clic en el ícono de ajustes en la esquina superior derecha y luego seleccione Claves API en la barra de herramientas izquierda. Aquí puede ver las claves API existentes y crear otras nuevas. Inmediatamente verá una diferencia principal entre ProGet de código abierto y empresarial. Con ProGet, puedes tener muchas claves API.
En la pantalla Claves API, haga clic en Crear clave API. Desde aquí, marque la casilla Feed API y haga clic en Guardar clave API.
Una vez creada la clave API, lo llevará de regreso a la página Claves API. Desde aquí, puede usar la clave API que ve para publicar paquetes en su feed.
Búsqueda de paquetes con ProGet
ProGet también incluye una página web que le permite buscar todos los paquetes de NuGet en la fuente, ver su recuento de descargas, el nombre de los módulos de PowerShell, en qué fuente se cargó un paquete y otras estadísticas de paquetes similares de Paquetes . página como se muestra a continuación.
Alternativamente, puede ir a la página Feeds y seleccionar un feed para ver solo los paquetes para ese feed. Allí puede profundizar en paquetes individuales para ver las estadísticas y otros detalles sobre los paquetes como se muestra a continuación.
Actualizando ProGet
Una de las ventajas de utilizar un producto que se ha posicionado para una empresa es que algunas de las tareas administrativas que consumen más tiempo son mucho más rápidas. Un ejemplo de esto es la actualización de ProGet.
Para actualizar ProGet a la versión más reciente, simplemente abra el instalador de Inedo en su servidor web. Esto se instaló cuando instaló ProGet por primera vez. Haga clic en el botón Actualizar que se muestra a continuación y el instalador hará el resto por usted.
Comparación del administrador de paquetes NuGet
Ha aprendido mucho sobre varias herramientas de NuGet en este artículo. Si todavía estás buscando cuál probar, en esta sección podrás vislumbrar lo que hace que cada uno sea diferente.
BaGet frente a LiGet
Dado que LiGet es una bifurcación de BaGet, comparten muchas similitudes, incluida la mayor parte del proceso de configuración. De hecho, puede seguir exactamente el mismo procedimiento de configuración que BaGet.
Una vez instalados, LiGet y BaGet comparten algunas características pero difieren en otros aspectos.
| 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 |
Si bien la mayoría de estas diferencias no afectan el uso con PowerShell, la configuración cambia ligeramente debido al uso de una clave API con hash.
Tanto BaGet como LiGet se basan en .NET Core, lo que los hace multiplataforma y utilizables en sistemas operativos Linux. así como Windows. Ambos también tienen imágenes de Docker disponibles que, si ya está 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 los dos es una excelente opción para un servidor NuGet de código abierto y compatible con contenedores. Ambas opciones le permiten sumergirse en un servidor NuGet en Windows y al mismo tiempo le permiten pasar a Linux o una imagen de Docker en el futuro sin demasiado trabajo adicional.
BaGet y ProGet
Si prefiere no rodar el suyo hasta cierto punto y tomar el camino fácil, siempre está ProGet. Sin embargo, hay desventajas. ProGet no es de código abierto ni gratuito de ninguna manera. 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 desglosa todas las diferencias de funciones entre las versiones de ProGet.
Resumen
En este artículo, aprendió muchísimo sobre varias herramientas y tecnologías de NuGet. Si no sabía qué servidor NuGet utilizar, ahora debería tener muchos más conocimientos para ayudarle a tomar esa decisión.
Aprendió cómo configurar cada herramienta NuGet para que funcione con Windows y cubrimos muchas de las características de cada una.