Infraestructura DevOps personal

Episodio 3 - Servidor DevOps: .NET (Runtimes y SDKs)

Publicado por Óscar Fernández González a.k.a. Osc@rNET el domingo, 18 de diciembre de 2022

Infraestructura DevOps personal

🎦 SERIE INFRAESTRUCTURA DEVOPS PERSONAL 🎦 Episodio anterior: 🔗 Episodio 2 - Servidor DevOps: configuraciones previas requeridas Episodio actual: 🔗 Episodio 3 - Servidor DevOps: .NET (Runtimes y SDKs) Episodio posterior: 🔗 Episodio 4 - Servidor DevOps: OpenJDK (Amazon Corretto) Ver todos los episodios: 🔗 Temporada 1

Episodio 3 - Servidor DevOps: .NET (Runtimes y SDKs)

Sobre Microsoft .NET

Microsoft .NET es un marco de software que se utiliza para crear, ejecutar e implementar aplicaciones en varias plataformas. Incluye una rica biblioteca de clases, compiladores, metadatos y varios modelos de aplicaciones para crear tanto aplicaciones independientes como aplicaciones alojadas en la web.

.NET Runtime vs .NET SDK

Por un lado, la versión de tiempo de ejecución o Runtime es el componente de software que implementa el modelo de ejecución de un lenguaje de programación, es decir, el que incluye las bibliotecas necesarias para ejecutar aplicaciones compatibles con .NET. Sin embargo, la versión de kit de desarrollo de software o SDK (Software Development Kit) contiene, además de la versión de tiempo de ejecución, las herramientas necesarias para desarrollar aplicaciones .NET.

👉 En 2002, Microsoft publicó .NET Framework, una plataforma de desarrollo para la creación de aplicaciones Windows. En la actualidad, .NET Framework se encuentra en la versión 4.8.1 y Microsoft todavía la admite completamente. 👉 En 2014, Microsoft presentó .NET Core como sucesor multiplataforma y de código abierto para .NET Framework. Esta nueva implementación de .NET mantiene el nombre .NET Core hasta la versión 3.1. La siguiente versión después de .NET Core 3.1 se denominaba .NET 5. 👉 Todos los años se lanzan nuevas versiones de .NET, cada una con un número de versión principal. Estas versiones incluyen características nuevas significativas y a menudo habilitan nuevos escenarios. 🔗 https://learn.microsoft.com/es-es/dotnet/core/introduction

¿Qué necesitamos nosotros en nuestro servidor DevOps?

El servidor DevOps debe estar capacitado para poder compilar nuestras aplicaciones .NET a través de una acción de compilación de una canalización de integración continua, ejecutada gracias a un agente autohospedado de Azure Pipelines. Así que, necesitaremos instalar de este modo la versión de kit de desarrollo de software o SDK de .NET.

Habilitar Internet Information Services

Como también tenemos pensado utilizar el servidor DevOps como entorno de desarrollo para hospedar nuestras aplicaciones web realizadas en .NET, es necesario primero habilitar Internet Information Services antes de instalar la última versión SDK de .NET.

Internet Information Services (IIS) es un servidor web flexible de Microsoft, de propósito general, que se ejecuta en sistemas Windows para atender solicitudes de páginas HTML o archivos. 🔗 Home: The Official Microsoft IIS Site

Para ello, pulsamos la combinación de teclas Windows + R y ejecutamos el comando appwiz.cpl desde la ventana Run.

01 Enable IIS: appwiz.cpl

Ahora seleccionamos la opción Turn Windows features on or off de la ventana Programs and Features.

02 Enable IIS: Programs and Features

Avanzamos por los pasos del asistente Add Roles and Features dejando las opciones por defecto, hasta llegar al paso Select server roles.

03 Enable IIS: Add Roles and Features Wizard: Before you begin

04 Enable IIS: Add Roles and Features Wizard: Select installation type

05 Enable IIS: Add Roles and Features Wizard: Select destination server

En el paso Select server roles del asistente Add Roles and Features seleccionamos el rol Web Server (IIS) y hacemos clic en el botón Next > para continuar. Seguimos avanzando hasta el paso Select role services de Web Server Role (IIS).

06 Enable IIS: Add Roles and Features Wizard: Select server roles

👉 Al habilitar el rol Web Server (IIS) se muestra un cuadro de dialogo avisándonos que se debe habilitar también la característica IIS Management Console de la sección Management Tools. Hacemos clic pues en el botón Add Features para habilitarla igualmente. 07 Enable IIS: Add Roles and Features Wizard: Add features that are required for Web Server (IIS)

08 Enable IIS: Add Roles and Features Wizard: Select server roles (NEXT)

09 Enable IIS: Add Roles and Features Wizard: Select features

10 Enable IIS: Add Roles and Features Wizard: Web Server Role (IIS)

En el paso Select role services de Web Server Role (IIS) habilitamos las siguientes características:

  • Web Server (Servicios World Wide Web):
    • Common HTTP Features (Características HTTP comunes):
      • Default Document (Documento predeterminado)
      • Directory Browsing (Examen de directorios)
      • HTTP Errors (Errores HTTP)
      • Static Content (Contenido estático)
    • Health and Diagnostics (Estado y diagnóstico):
      • HTTP Logging (Registro HTTP)
    • Performance (Características de rendimiento):
      • Static Content Compression (Compresión de contenido estático)
      • Dynamic Content Compression (Compresión de contenido dinámico)
    • Security (Seguridad):
      • Request Filtering (Filtrado de solicitudes)
      • Windows Authentication (Autenticación de Windows)
    • Application Development (Características de desarrollo de aplicaciones):
      • .NET Extensibility 4.8
      • ASP.NET 4.8
      • ISAPI Extensions (Extensiones ISAPI)
      • ISAPI Filters (Filtros ISAPI)
  • Management Tools (Herramientas de administración web):
    • IIS Management Console (Consola de administración de IIS)
    • IIS Management Scripts and Tools (Scripts y herramientas de admnistración de IIS)
    • Management Service (Servicio de administración de IIS)

11 Enable IIS: Add Roles and Features Wizard: Select role services

👉 Al habilitar la característica .NET Extensibility 4.8 de la sección Application Development se muestra un cuadro de dialogo avisándonos que se debe habilitar también la característica ASP.NET 4.8 de la sección .NET Framework 4.8 Features. Hacemos clic pues en el botón Add Features para habilitarla igualmente. 12 Enable IIS: Add Roles and Features Wizard: Select role services - Add features that are required for .NET Extensibility 4.8

👉 Al habilitar la característica ASP.NET 4.8 de la sección Application Development se muestra un cuadro de dialogo avisándonos que se deben habilitar también las características ISAPI Filters e ISAPI Extensions de la sección Application Development. Hacemos clic pues en el botón Add Features para habilitarlas igualmente. 13 Enable IIS: Add Roles and Features Wizard: Select role services - Add features that are required for ASP.NET 4.8

14 Enable IIS: Add Roles and Features Wizard: Confirm installation selections

15 Enable IIS: Add Roles and Features Wizard: Confirm installation selections

Cuando finalice el asistente Add Roles and Features de instalar el rol Web Server (IIS) con las características que le hemos indicado, tenemos que reiniciar el servidor.

Para comprobar que se ha habilitado correctamente IIS una vez reiniciado el servidor, pulsamos la combinación de teclas Windows + R y ejecutamos el comando regedit desde la ventana Run.

16 Enable IIS: regedit

La versión de IIS se muestra en la ventana Registry Editor, en la ruta HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp. Si falta la subclave InetStp, significa que IIS no está habilitado.

17 Enable IIS: registry editor - HKLM\SOFTWARE\Microsoft\InetStp

El valor REG_DWORD de MajorVersion representa la versión mayor y el valor de REG_DWORD de MinorVersion representa la versión menor. Para el caso del sistema operativo Windows Server 2022 Standard Edition, Versión 21H2 (compilación de SO 20348.587 - 8 de Marzo de 2022), estos valores serán 10 y 0, respectivamente, indicando de esta forma que se trata de la versión 10.0 de IIS.

Igualmente, visitando la URL http://localhost desde el navegador se debe mostrar el sitio de IIS configurado por defecto tras su instalación.

Activación HTTP para servicios Windows Communication Foundation

Windows Communication Foundation (WCF) es un marco para construir, configurar e implementar servicios distribuidos en red. Permite servicios de hospedaje en cualquier tipo de proceso del sistema operativo. 🔗 https://learn.microsoft.com/es-es/dotnet/framework/wcf/whats-wcf

Para habilitar el hospedaje de servicios WCF en IIS, pulsamos la combinación de teclas Windows + R y ejecutamos el comando appwiz.cpl desde la ventana Run. A continuación, seleccionamos la opción Turn Windows features on or off de la ventana Programs and Features.

Ahora, nos desplazamos por el asistente Add Roles and Features hasta llegar al paso de Features donde habilitamos la característica HTTP Activation, dentro de .NET Framework 4.8 Features, WCF Services.

01 Enable Feature WCF HTTP Activation

👉 Al habilitar la característica HTTP Activation se muestra un cuadro de dialogo avisándonos que se deben habilitar también las características Configuration APIs y Process Model de la sección Windows Process Activation Service. Hacemos clic pues en el botón Add Features para habilitarlas igualmente. 02 Enable Feature WCF HTTP Activation

Web Deploy 3.6

Para la implementación de aplicaciones web y/o sitios web de .NET debemos instalar la extensión Web Deploy en nuestro servidor DevOps. Nos descargamos la extensión del sitio oficial de IIS:

🔗 https://www.iis.net/downloads/microsoft/web-deploy

01 Web Deploy Setup

02 Web Deploy Setup

03 Web Deploy Setup

Ahora ejecutamos el archivo de instalación de Web Deploy denominado webdeploy_amd64_en-us.msi y completamos su asistente de instalación dejando las opciones por defecto, excepto en aquellos pasos en los que os indique qué opciones hay que seleccionar (ver capturas de pantalla).

04 Web Deploy Setup

05 Web Deploy Setup

Seleccionamos el tipo de instalación completa haciendo clic en el botón Complete.

06 Web Deploy Setup

07 Web Deploy Setup

08 Web Deploy Setup

09 Web Deploy Setup

Para comprobar que se ha instalado correctamente Web Deploy en nuestro servidor DevOps, pulsamos la combinación de teclas Windows + R y ejecutamos el comando services.msc desde la ventana Run.

10 Web Deploy Setup

En la ventana Services verificamos que está presente el servicio denominado Web Deployment Agent Service. Este servicio debe estar ejecutándose (Status: Running) y con inicio automático (Startup Type: Automatic).

11 Web Deploy Setup

Por otro lado, procedemos a configurar el acceso remoto para despliegues en IIS. Para ello, pulsamos la combinación de teclas Windows + R y ejecutamos el comando inetmgr desde la ventana Run.

12 Web Deploy Setup

Desde la ventana Internet Information Services (IIS) Manager, seleccionamos el servidor DEVOPSRV y hacemos doble-clic en el icono Management Service.

13 Web Deploy Setup

Primero paramos el servicio Management Service haciendo clic en Stop.

14 Web Deploy Setup

Después, marcamos la casilla de verificación Enable remote connections y seleccionamos Windows credentials only. Aplicamos los cambios haciendo clic en Apply. Y, por último, hacemos clic en Start para arrancar de nuevo el servicio Management Service.

15 Web Deploy Setup

Para una correcta delegación de los privilegios para el despliegue de las aplicaciones .NET en IIS vamos a crear un nuevo usuario. Para ello, pulsamos la combinación de teclas Windows + R y ejecutamos el comando compmgmt.msc desde la ventana Run.

16 Web Deploy Setup

En la ventana Computer Management nos desplazamos a System Tools, Local Users and Groups y Users. Aquí hacemos clic con el botón derecho del ratón sobre una zona en blanco (dentro de Users) y seleccionamos New User… del menú contextual.

17 Web Deploy Setup

En el cuadro de dialogo New User creamos el usuario con las siguientes características:

  • User name: DevOps-IIS
  • Description: DevOps account for deployment purposes on IIS.
  • Password: la que quieras 😄
  • User cannot change password:
  • Password never expires:

18 Web Deploy Setup

Posteriormente, agregamos el usuario al grupo de administradores del servidor. Para ello, hacemos clic con el botón derecho del ratón sobre el nombre del usuario DevOps-IIS y seleccionamos la opción Properties del menú contextual.

19 Web Deploy Setup

En la ventana de propiedades del usuario, seleccionamos la pestaña Member of y pulsamos el botón Add….

20 Web Deploy Setup

Seguidamente, tecleamos Administrators en el cuadro de texto Enter the object names to select de la ventana Select Groups y pulsamos el botón Check Names para comprobar que existe dicho grupo.

21 Web Deploy Setup

Si el grupo de administradores lo hemos tecleado correctamente, aparecerá ahora como DEVOPSSRV\Administrators. Pulsamos el botón OK para agregar el usuario a dicho grupo.

22 Web Deploy Setup

A continuación, nos vamos a la pestaña Remote Desktop Services Profile de la ventana de propiedades del usuario.

23 Web Deploy Setup

Marcamos la casilla de verificación Deny this user permissions to log on to Remote Desktop Session Host server para denegar el inicio de sesión por escritorio remoto del usuario en este servidor y pulsamos el botón OK.

24 Web Deploy Setup

Como el usuario DevOps-IIS solamente lo queremos para los despliegues de las aplicaciones .NET en IIS hay que evitar que se puedan realizar acciones no permitidas con él, así que, tenemos que modificar las directivas de seguridad local del servidor. Para ello, pulsamos la combinación de teclas Windows + R y ejecutamos el comando secpol.msc desde la ventana Run.

25 Web Deploy Setup

En la ventana Local Security Policy nos desplazamos a Local Policies, User Rights Assignment y localizamos las siguientes políticas de seguridad:

Para aplicar una de estas políticas a nuestro usuario debemos primero agregarlo a dicha política. Por ejemplo, para agregar el usuario a la política Deny log on as a batch job, hacemos doble clic sobre dicha política.

26 Web Deploy Setup

Ahora, pulsamos el botón Add User or Group de la ventana Deny log on as a batch job Properties.

27 Web Deploy Setup

Seguidamente, tecleamos el nombre del usuario (DevOps-IIS) en el cuadro de texto Enter the object names to select de la ventana Select Users or Groups y pulsamos el botón Check Names para comprobar que existe dicho usuario.

28 Web Deploy Setup

Si el usuario lo hemos tecleado correctamente, aparecerá ahora como DEVOPSSRV\DevOps-IIS. Pulsamos el botón OK para agregar el usuario a dicha política de seguridad.

29 Web Deploy Setup

30 Web Deploy Setup

Repetimos el mismo proceso para aplicar el resto de las políticas al usuario.

31 Web Deploy Setup

Variable de entorno ASPNETCORE_ENVIRONMENT

Para indicar a la versión de tiempo de ejecución o Runtime de .NET que las aplicaciones desplegadas en el servidor DevOps van a ejecutarse como entorno de desarrollo, tenemos que definir la variable de entorno ASPNETCORE_ENVIRONMENT con el valor Development. Para ello, pulsamos la combinación de teclas Windows + R y ejecutamos el comando sysdm.cpl desde la ventana Run.

01 Development environment (.NET Runtime)

En la ventana System Properties, seleccionamos la pestaña Advanced y pulsamos el botón Environment Variables….

02 Development environment (.NET Runtime)

Después, en la ventana Environment Variables, pulsamos el botón New… de la sección System variables.

03 Development environment (.NET Runtime)

Ahora agregamos la nueva variable con su valor correspondiente:

  • Variable name: ASPNETCORE_ENVIRONMENT
  • Variable value: Development.

04 Development environment (.NET Runtime)

05 Development environment (.NET Runtime)

Si deseas conocer como se definen los entornos en las aplicaciones .NET visita el siguiente enlace: 🔗 Usar varios entornos en ASP.NET Core

Instalación SDKs .NET

💡 Procura siempre instalar el SDK de la última versión soportada de .NET Framework. La última en mi caso es la versión 4.8.1, lanzada el día 9 de agosto de 2022, es decir, la última que estaba vigente cuando he publicado esta entrada en el blog. O bien, si aún mantienes aplicaciones de .NET Framework no actualizadas y necesitas versiones más antiguas como, por ejemplo, la 4.5 o la 4.6.1, entonces debes instalar las versiones SDKs correspondientes para que puedas compilarlas en este servidor.

👉 Lo recomendable es que actualices las aplicaciones a la última versión de .NET Framework soportada o realices su migración a la última versión .NET (Core).

💡 Procura siempre instalar el SDK de la última versión soportada de .NET (Core). A ser posible que sea una versión Long Term Support (LTS). Si la versión más reciente es una Standard Term Support (STS), te recomiendo que instales además la versión anterior a ella que será LTS. La última en mi caso es la versión 7.0 STS (7.0.1), lanzada el día 13 de diciembre de 2022, es decir, la última que estaba vigente cuando he publicado esta entrada en el blog. Como es una versión STS, también me voy a descargar la versión anterior, la 6.0 LTS (6.0.12), lanzada el día 13 de diciembre de 2022. O bien, si aún mantienes aplicaciones de .NET Core no actualizadas y necesitas versiones más antiguas como, por ejemplo, la 5.0, entonces debes instalar las versiones SDKs correspondientes para que puedas compilarlas en este servidor.

Las versiones LTS (Long Term Support o soporte a largo plazo) de .NET son compatibles durante tres años después de la versión inicial y las versiones STS (Standard Term Support o soporte estándar) de .NET son compatibles durante seis meses después de una versión posterior de STS o LTS. Los lanzamientos ocurren cada 12 meses, por lo que el período de soporte para STS es de 18 meses. 01 LTS vs STS .NET versions 🔗 https://dotnet.microsoft.com/es-es/platform/support/policy/dotnet-core

Descarga SDKs .NET

Nos descargamos del sitio oficial de Microsoft .NET los siguientes SDKs:

Enlaces directos:

🔗 .NET 7.0 STS (2022-12-13 / v7.0.1)

🔗 .NET 6.0 LTS (2022-12-13 / v6.0.12)

🔗 .NET Framework 4.8.1 Developer Pack (2022-08-09)

Sitio oficial de descarga de Microsoft .NET

🔗 Download .NET (Linux, macOS, and Windows)

01 Download .NET

02 Download .NET

03 Download .NET

04 Download .NET

05 Download .NET

Instalar .NET Framework 4.8.1 Developer Pack

Para instalar .NET Framework 4.8.1 Developer Pack ejecutamos el archivo de instalación ndp481-devpack-enu.exe y completamos su asistente de instalación dejando las opciones por defecto, excepto en aquellos pasos en los que os indique qué opciones hay que seleccionar (ver capturas de pantalla).

01 Install .NET Framework 4.8.1 Developer Pack

02 Install .NET Framework 4.8.1 Developer Pack

03 Install .NET Framework 4.8.1 Developer Pack

Instalar .NET 6.0 SDK

Para instalar .NET 6.0 SDK ejecutamos el archivo de instalación dotnet-sdk-6.0.404-win-x64.exe y completamos su asistente de instalación dejando las opciones por defecto, excepto en aquellos pasos en los que os indique qué opciones hay que seleccionar (ver capturas de pantalla).

01 Install .NET 6.0 SDK

02 Install .NET 6.0 SDK

03 Install .NET 6.0 SDK

Instalar .NET 7.0 SDK

Para instalar .NET 7.0 SDK ejecutamos el archivo de instalación dotnet-sdk-7.0.101-win-x64.exe y completamos su asistente de instalación dejando las opciones por defecto, excepto en aquellos pasos en los que os indique qué opciones hay que seleccionar (ver capturas de pantalla).

01 Install .NET 7.0 SDK

02 Install .NET 7.0 SDK

03 Install .NET 7.0 SDK

Comprobar SDKs y Runtimes .NET

Para comprobar qué versiones SDKs y Runtimes de .NET tenemos instaladas en el servidor pulsamos la combinación de teclas Windows + R y ejecutamos el comando cmd desde la ventana Run. Seguidamente, tecleamos el comando dotnet --info.

dotnet info

¡Eso es todo amigos! ¡Nos vemos en el próximo episodio! 😄


comments powered by Disqus