====== Creació d'una màquina Vagrant per desenvolupar aplicacions de .NET en Ubuntu ======
Es proposa crear una màquina [[Vagrant]] per poder provar la instal·lació i funcionament d'un entorn de desenvolupament d'aplicacions de **.NET** en un sistema operatiu Ubuntu 20.
{{tag> #FpInfor #Daw #DawMp07 #Ciber #CiberMp03 Vagrant}}
===== Introducció =====
Els darrers anys, Microsoft ha obert la porta per poder instal·lar l'entorn de desenvolupament de **.NET** en sistemes no Windows. Per fer-ho possible, es va crear un framework paral·lel a .NET anomenat **.NET Core**.
En les darreres versions .NET segueix ja la filosofia multiplataforma de .NET Core, i desapareix la distinció entre els dos frameworks.
Els elements mínims que necessitem són:
* Una instal·lació de .NET que ens permetrà desenvolupar aplicacions web de servidor amb el framework ASP.NET Core.
* Un servidor de base de dades SQL Server.
===== EXERCICI 1: Creació de la màquina Vagrant, instal·lació de SQL Server i prova de connexió =====
Per resoldre l'exercici s'ha de tenir uns fonaments per treballar amb l'eina **Vagrant**. Pots consultar aquesta
[[Vagrant|pàgina]]
- Crea una maquina Vagrant. Configura el Vagrantfile amb les característiques següents:
* imatge d'Ubuntu Focal.
* La maquina del VirtualBox s’anomenarà **AspNetCore**.
* Redirigeix el port 1433 al port 1433 de la màquina host (el farà servir el servidor de BDD SQL Server).
* Redirigeix el port 8080 al port 8080 de la màquina host (serà el port on es visualitzarà l'aplicació web).
* Xarxa pública.
* 2 GB de RAM (és el requisit mínim de SQL Server).
- Arranca la màquina **AspNetCore** i instal·la el servidor de base de dades SQL Server 2019:
* Segueix les instruccions de la [[https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver15|pàgina oficial]].
* Important: el password té requisits de seguretat. Pot servir aquest: **P@ssw0rd**
* No és necessari instal·lar les eines de terminal (command-line tools).
* Tampoc és necessari fer les proves que hi ha a continuació.
* Ens connectarem d'una altra manera, per entorn gràfic des de la màquina host.
* Instal·la en la màquina host l'eina [[https://dbeaver.io/|DBeaver]].
* Crea una connexió a SQL Server. Per defecte es connecta a localhost, port 1433
* Com que hem redirigit el port de la màquina virtual, en realitat es connectarà al servidor de la màquina Vagrant.
* Comprova que la connexió és correcta.
* Prova d'executar aquest script amb DBeaver: {{ :bibliotecacreate.zip |}}
* Et crearà una BDD amb llibres i autors, relacionats per una Foreign Key (el llibre té un autor).
* Prova de crear llibres i autors de prova a través de la interfície gràfica de DBeaver. Veuràs que el seu funcionament és prou intuitiu.
\\
===== EXERCICI 2: Instal·lació de l'entorn de .NET en la màquina Vagrant=====
- Es tracta de realitzar, en la mateixa màquina de l'exercici anterior, la instal·lació de l'entorn de .NET per Ubuntu:
* Segueix les instruccions de la [[https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu|pàgina oficial]].
* Instal·la l’SDK (software development kit) de .NET per la nostra versió d’Ubuntu.
* Instal·la també el Runtime (instància en temps d'execució) d'ASP.NET Core.
* Com a comprovació de la instal·lació, executa la comanda: $ dotnet --info
- Crea un projecte ASP.NET MVC i visualitza la pàgina d'inici des de la màquina host. Passos a seguir:
* Situa't en el terminal de la màquina vagrant.
* Crea un directori de treball que es digui per exemple //Projects//.
* Situa't amb el terminal en la nova carpeta.
* Per crear un projecte ASP.NET MVC, executa la comanda $ dotnet new mvc --auth Individual --use-local-db true -o projecte1
* Se'ns crea un directori amb el nom que li hem posat al projecte.
* Situa't amb el terminal en el directori del projecte.
* Per arrancar el projecte, disposem de la comanda $ dotnet run
* Ens falta dir-li que arranqui pel port 8080
* Es deixa com a exercici cercar informació per resoldre-ho.
* Una possible solució és afegir una opció --urls a la comanda dotnet run, indicant el port 8080
* Prova de connectar-te des del navegador de la màquina hosthttp://localhost:8080/
* S'ha de veure la pàgina d'inici de l'aplicació ASP.NET
* Si no pots connectar-te, segurament serà perquè cal habilitar les connexions remotes.
* Podem fer-ho també amb l'opció --urls de la comanda dotnet run
\\
===== EXERCICI 3: Automatitzar les instal·lacions en el Vagrantfile =====
Es demana modificar el Vagrantfile de l’exercici 1 perquè les instal·lacions de SQL Server i .NET s’efectuen com un script quan fem el vagrant up (Shell Provisioner de Vagrant).
- La instal·lació de **SQL Server** ha de ser **desatesa**.
* En l'exercici 1 vam executar una comanda per configurar el servidor, on ens demanava introduir per terminal (2 cops) la contrasenya de l'administrador del servidor, usuari //SA//
* Ara hem d'executar la comanda d'una manera diferent, perquè el password de l'administrador estigui escrit en la comanda del Shell Provisioner.
* Consulta la documentació oficial per veure com podem fer-ho.
* Per altra banda, el més correcte seria definir el password com un paràmetre o variable al començament de l'script, i incrustar el valor de la variable en la comanda on es configura el password.
* Ho podem aconseguir definint el password com una variable del terminal de Linux.
- Un cop instal·lat SQL Server, copia a continuació les instruccions per instal·lar l'entorn de **.NET** que has provat en l'exercici 2.
* És important que tot l'script de la shell quedi degudament estructurat amb comentaris per indicar què s'està fent en cada moment.
\\
Com en qualsevol framework MVC actual, en ASP.NET disposem d'un sistema de rutes (les peticions HTTP s'enruten a un mètode d'un controlador), un ORM (Entity Framework) i un motor de plantilles (Razor).
Si voleu ampliar informació sobre el framework ASP.NET:
* [[https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/start-mvc?view=aspnetcore-6.0&tabs=visual-studio-code|documentació oficial del framework]]
* [[https://github.com/dotnet/AspNetCore.Docs/tree/main/aspnetcore/data/ef-mvc/intro/samples/cu-final|projecte d'exemple]]
\\