Despliegue de aplicaciones web ASP.NET Core a través de una máquina virtual en Azure
Tags: webdev, azure, dotnet, dotvvm
Published: 2020-05-05 02:50:52

Cuando empezamos a desarrollar aplicaciones web en la nube, existen varios conceptos o modelos fundamentales que se pueden manejar, entre estos, el concepto de Infraestructura como Servicio – IaaS. Este modelo hace referencia a una infraestructura informática instantánea, aprovisionada de recursos y gestionada a través de Internet. Este enfoque es uno de los cuatro tipos de servicios en la nube, junto con los modelos de: Plataforma como Servicio (PaaS), Software como Servicio (SaaS) y Arquitectura sin servidor (Serverless). 

En la Infraestructura como Servicio, los usuarios del equipo de TI son los que manejan todas las aplicaciones, los datos, los sistemas operativos, el middleware y los tiempos de ejecución, pero deja que el proveedor, como Azure, se encargue de gestionar la virtualización, el almacenamiento, la red y los servidores. De esta manera, el equipo de TI no necesita tener un centro de datos específico para la organización ni se debe preocupar por actualizar o mantener físicamente estos elementos, ya que de eso se encarga el proveedor.

Para los objetivos de este artículo, aprenderemos a utilizar este enfoque de infraestructura como servicio a través de la creación de una máquina virtual con Windows Server 2019 para luego desplegar una aplicación web desarrollada en ASP.NET Core 2.2 utilizando el patrón de diseño Modelo, Vista, Vista-Modelo con DotVVM. 

####Recursos necesarios:

+ Una cuenta de Azure. 
+ .NET Core SDK 2.2. 
+ Visual Studio 2019.
+ La extensión de DotVVM para Visual Studio 2019. 

Actividades a seguir:   

+ Crear una maquina virtual Windows Server 2019 en Azure. 
+ Configurar de forma remota la máquina virtual para poder trabajar con ASP.NET Core y poder desplegar las aplicaciones de forma externa.
+ Configuraciones adicionales en el recurso de Azure para máquinas virtuales.
+ Creación del perfil y despliegue de aplicaciones web ASP.NET Core con DotVVM desde Visual Studio 2019. 
+ Ver el resultado de la página web publicada. 

##Parte 1: Crear una máquina virtual en Azure##

Para empezar, debemos disponer de una suscripción en Azure, si no disponemos de una cuenta podemos obtener una gratuita aquí: [https://azure.microsoft.com/es-es/free/](https://azure.microsoft.com/es-es/free/). 

Como primer paso, debemos dirigirnos al portal de Azure y buscar el recurso de Máquinas Virtuales y crear una nueva. En el proceso de creación tendremos varias partes importantes para la creación del recurso. A continuación, se detalla cada una de estas partes. 

####Aspectos Generales####

Primero es necesario especificar la suscripción y el grupo de recursos, luego los detalles de la instancia a crear. Aquí es donde definiremos el sistema operativo que tendrá la máquina virtual y el tamaño de la misma. Para nuestros objetivos, trabajaremos con Windows Server 2019 Datacenter. 

![](https://dev-to-uploads.s3.amazonaws.com/i/z98fpx2nyfl1vvbvxapm.png)

En cuanto al tamaño de la máquina virtual, todo dependerá de la cantidad de créditos de Azure que podamos destinar para la implementación de la aplicación y de la cantidad requerida de recursos. 

Luego debemos definir la información de la cuenta de administrador de la máquina virtual a través del nombre de usuario y la contraseña. Estos datos son muy importantes ya que permitirán acceder a la máquina virtual posteriormente. 

![](https://dev-to-uploads.s3.amazonaws.com/i/skg9a9qtgqb24k4kiu66.png)
 
Finalmente, en la sección general podemos definir reglas para los puertos de la máquina virtual. En este caso habilitaremos el puerto 80 para las conexiones HTTP que permitirán acceder a la pagina web desde el navegador de internet. El otro puerto es el RDP (3389), el cual nos permitirá acceder a la máquina virtual de forma remota. 

 ![](https://dev-to-uploads.s3.amazonaws.com/i/co1ke4z3gpp2c4l76zbw.png)

####Aspectos específicos####

Una vez especificados los aspectos generales se puede realizar la revisión general y crear el recurso. En otro escenario, también podemos especificar en detalle la configuración de los discos para la máquina virtual, ya sea de tipo SSD o HDD, la configuración de red y el balance de carga, la administración y el manejo de extensiones. 

Finalizadas estas configuraciones y una vez empezado el proceso de creación, esta operación tardara unos pocos minutos en ejecutarse. 
Con el recurso listo, ahora nos podemos dirigir a la sección principal del recurso en Azure y descargar el acceso de nos permitirá utilizar de forma remota la máquina virtual con Windows Server 2019. Para ello nos dirigimos a la funcionalidad Connect y seleccionamos la opción RDP: 

![](https://dev-to-uploads.s3.amazonaws.com/i/hzov8q1e5qac8k8wxzg6.png)

##Parte 2: Configuración de la máquina virtual Windows Server 2019##

Ahora que ya tenemos la máquina virtual con Windows Server 2019 establecida en Azure, nos conectaremos de forma remota desde nuestro equipo. Para ello ejecutamos el archivo generado desde Azure en el proceso Connext – RDP (Remote Desktop Protocol) para cumplir este objetivo.

En este caso, el asistente nos solicitará introducir los datos de autenticación de usuario (especificados al momento de crear el recurso en Azure) para el acceso al sistema operativo. También será necesario aceptar la advertencia del certificado para la conexión: 

![](https://dev-to-uploads.s3.amazonaws.com/i/4zjmcporbr6uduultroq.png)

Con este proceso ya tendremos acceso a la máquina virtual: 

![](https://dev-to-uploads.s3.amazonaws.com/i/xeuewnqzt9ldeg962nha.png) 

Al iniciar, lo primero que se va a cargar es el Server Manager: Dashboard en el cual podremos realizar las configuraciones de Windows Server para el posterior despliegue. En esta sección del articulo tendremos tres actividades principales: Instalar IIS (Web Server), Instalar Web Deploy e Instalar .NET Core. 

####Instalación del IIS (Web Server)####

*Internet Information Services o IIS es un servidor web y un conjunto de servicios para el sistema operativo Microsoft Windows*. En este sentido, IIS actuará como servidor base para trabajar con las aplicaciones de .NET Core como ASP.NET Core con DotVVM. 

Ahora bien, para la instalación IIS nos dirigiremos a la opción: `Add roles and features` en el Server Manager Dashboard: 

![](https://dev-to-uploads.s3.amazonaws.com/i/t77wsu1cgmhpbr0e13kf.png) 

Al iniciar al asistente de configuración, debemos aceptar la configuración por defecto en las secciones de `Installation Type y Server Selection`. En la sección `Server Roles`, seleccionaremos `Web Server (IIS)` y aceptaremos la instalación adicional requerida de `IIS Management Console`. 
 
![](https://dev-to-uploads.s3.amazonaws.com/i/n8t43356xyzw41pnqrro.png)

En las siguientes secciones dejaremos todo como esta hasta llegar al apartado de `Server Roles`. Aquí seleccionaremos la opción `Management Service` dentro de la categoría `Management Tools`. Asimismo, es necesario confirmar la instalación adicional de ASP.NET 4.7 en este caso. 

 ![](https://dev-to-uploads.s3.amazonaws.com/i/rqhydnr5q0mobh7rwj58.png)

Con esto realizado tenemos todo listo. Ahora nos dirigimos a la sección `Confirmation` para ver el resumen de los componentes a instalar y proceder con esta operación. 

Una vez que la instalación se haya completado hay dos consideraciones importantes:

+ IIS esta instalado y se ejecuta con la regla de firewall interna creada para el puerto 80.
+ Web Management Service está instalado con la regla de firewall interno creada para el puerto 8172.

####Instalar Web Deploy####

Web Deploy: *Herramienta de implementación web que simplifica la migración, la administración y la implementación de servidores web de IIS, aplicaciones web y sitios web*.

En este caso para la instalación de Web Deploy, debemos descargar el instalador respectivo desde Internet Explorer y realizar el proceso de instalación como cualquier otro programa. Ya que las reglas de seguridad predeterminadas en Azure impiden que los ejecutables se descarguen a través de Internet Explorer, primero debemos deshabilitar la seguridad mejorada de IE.

Para ello nos dirigimos a la sección `Local Server` del Windows Server Dashboard y nos ubicamos en el valor de propiedad `IE Enhanced Security Configuration` dándole clic. A continuación, cambiamos el valor de `On` a `Off`: 

![](https://dev-to-uploads.s3.amazonaws.com/i/liqs0p798nvwlgdl204m.png) 

![](https://dev-to-uploads.s3.amazonaws.com/i/uplwaf6g7qgwetlu9uel.png)

Con esto ya podemos utilizar Internet Explorer en Windows Server. A continuación, nos dirigimos al navegador y descargamos el instalador Web Deploy 3.6, el cual, esta disponible en la siguiente dirección: [https://www.microsoft.com/en-us/download/details.aspx?id=43717](https://www.microsoft.com/en-us/download/details.aspx?id=43717). 

![](https://dev-to-uploads.s3.amazonaws.com/i/8ed7w4f9ymq4taa67np8.png)

Finalmente realizamos el proceso de instalación con el ejecutable descargado.

####.NET Core en Windows Server 2019####
 
Con las configuraciones realizadas hasta el momento podemos trabajar con el despliegue de aplicaciones con ASP.NET Framework 4.7. Nuestra intención es trabajar con ASP.NET Core y con DotVVM. 

Para ello, dentro de Windows Server, en este caso procederemos a instalar el `SDK` y el `.NET Core Runtime & Hosting Bundle` en su versión 2.2. Los instaladores los podemos encontrar en la siguiente dirección: [https://dotnet.microsoft.com/download/dotnet-core/2.2](https://dotnet.microsoft.com/download/dotnet-core/2.2). 

![](https://dev-to-uploads.s3.amazonaws.com/i/yam2r08kyvma0ylbydqw.png)

Al descargar los instaladores respectivos, procedemos con la ejecución de los mismos. Con este proceso, la maquina virtual con Windows Server 2019 alojada en Azure se encuentra lista con las configuraciones necesarias. 

##Parte 3: Ajustes en Azure Virtual Machine desde el portal##

Hasta este punto, la máquina con Windows Server en Azure se encuentra lista. Lo único que nos falta es realizar dos pasos adicionales importantes. Se trata sobre la asignación del `DNS (Domain Name System)` de la máquina virtual y sobre habilitar uno de los puertos para trabajar con Web Deploy. 

####Configurar el DNS para la máquina virtual####

Para realizar esta configuración debemos dirigirnos a la sección general de la máquina virtual en la opción DNS Name y hacer clic en Configure. Aquí definiremos un nombre DNS único (Aparece un tick verde cuando se valida el nombre):

![](https://dev-to-uploads.s3.amazonaws.com/i/asi3ml0h13xstioxynoa.png)
  
Finalmente guardamos la configuración. 

####Configurar reglas de firewall de entrada de la máquina virtual

Para la configuración de este apartado, debemos dirigirnos a la sección de Networking dentro del recurso de la máquina virtual en Azure y seleccionar la opción Add inbound port rule para crear una nueva regla de firewalll. 

En este caso, agregaremos la regla WebDeploy - Port 8172 (Priority 1010):

![](https://dev-to-uploads.s3.amazonaws.com/i/730h86csr92eowouhfyo.png)

Finalmente agregamos la nueva regla. 

Con todas estas configuraciones en Windows Server y en el recurso de la máquina virtual en Azure estamos listos para desplegar aplicaciones con ASP.NET Core y DotVVM. 
 
####Parte 4: Configuración del perfil para el despliegue desde Visual Studio 2019  

Con todo el procedimiento llevado a cabo hasta el momento, ahora nos dirigimos a la solución de la aplicación web ASP.NET Core 2.2 con DotVVM que vayamos a desplegar en la máquina virtual en Visual Studio 2019.

En este caso, seleccionaremos el proyecto principal de la solución en Visual Studio 2019 y le damos en clic derecho en la opción `Publish`:

![](https://dev-to-uploads.s3.amazonaws.com/i/5uiojq18c8lejt38sahs.png) 

En esta sección, crearemos un nuevo perfil de despliegue a través de la opción: `Azure Virtual Machines`. Aquí nos solicitaran especificar la suscripción de Azure y dentro de esta, seleccionar el recurso de la máquina virtual: 

![](https://dev-to-uploads.s3.amazonaws.com/i/le5c9yntrtisa63t1qni.png) 

**Nota**: para seleccionar correctamente la máquina virtual, es necesario verificar que esta se encuentre encendida. 

Al especificar la máquina virtual el asistente de configuración de Visual Studio 2019 verificará que Windows Server cuente con todos los ajustes necesarios para el despliegue. Si existe algún error estos aparecerán en el perfil, caso contrario no se mostrará ningún error y el perfil podrá ser creado:  

![](https://dev-to-uploads.s3.amazonaws.com/i/tw3x46u6o1yn1y0utn15.png)
 
Para la configuración final nos dirigiremos a la opción `Edit` del perfil creado:

![](https://dev-to-uploads.s3.amazonaws.com/i/jhz38evfhqj17o7x4doq.png)
 
En esta sección tendremos la oportunidad de guardar los valores de acceso (nombre de usuario y contraseña) y probar la conexión al servidor. Al validar la conexión es necesario aceptar el certificado y guardar los cambios para usos posteriores. Esta parte es muy importante para el despliegue. 

![](https://dev-to-uploads.s3.amazonaws.com/i/c3ymcuo6w9xejllahb74.png) 

Finalmente desplegaremos la aplicación en Windows Server ubicada en Azure en la opción `Publish` del perfil. 

![](https://dev-to-uploads.s3.amazonaws.com/i/9wvmgxvxz05zfsxw012o.png)
 
En este momento el proceso dará comienzo y tomará algunos minutos al ser la primera vez.

##La página web publicada##

Como resultado de toda la configuración de la máquina virtual con Windows Server, los ajustes en Azure y el despliegue desde Visual Studio 2019, el resultado es el siguiente para este caso:

![](https://dev-to-uploads.s3.amazonaws.com/i/0twyvirxstaz4y5b4uhy.png)

##¿Qué sigue?

Con este articulo hemos visto paso a paso como desplegar una aplicación web con ASP.NET Core y DotVVM desde Visual Studio 2019 a una máquina virtual con Windows Server 2019 en Azure. A continuación, se encuentran recursos adicionales para que puedas seguir aprendiendo sobre el desarrollo de aplicaciones con .NET y con Azure: 

¿Deseas practicar lo aprendido en este articulo? Para ello puedes ver el siguiente tutorial sobre [Operaciones CRUD en DotVVM](https://dev.to/esdanielgomez/dotvvm-y-asp-net-core-implementacion-de-operaciones-crud-43oe), acceder al código fuente y poner en práctica estos conocimientos.

Asimismo, también puedes revisar los siguientes artículos:

+ [Pasos a seguir para crear una aplicación MVVM (Modelo Vista Vista-Modelo) con DotVVM y ASP.NET Core](https://medium.com/@esdanielgomez/pasos-a-seguir-para-crear-una-aplicaci%C3%B3n-mvvm-modelo-vista-vista-modelo-con-dotvvm-y-asp-net-core-41afd67125b1).
+ [Despliegue de aplicaciones web DotVVM y .NET Core en Azure (Todo lo que necesitas saber)](https://dev.to/dotvvm/despliegue-de-aplicaciones-web-dotvvm-y-net-core-en-azure-44ni).

Nos vemos en [Twitter](https://twitter.com/esDanielGomez)!! :)