Opdracht 1: ASP dotnet core

In deze opdracht installeer en configureer je de Dotnet Core-applicatieserver met SDK op de acceptatieomgeving, waardoor je de omgeving gereed maakt om Dotnet Core-applicaties te ontwikkelen, testen én uit te voeren. 🚀✨👩‍💻

Stap 1: Open je opdrachtenprompt en login via SSH.

ssh <studentnummer>@145.44.xxx.xxx

Vergeet niet de ‘s’ toe te voegen voor je studentnummer.

Stap 2: Voeg de Microsoft repository toe aan de APT (Advanced Package Tool) door de volgende commando’s uit te voeren:

sudo wget https://packages.microsoft.com/config/debian/12/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo rm packages-microsoft-prod.deb

Stap 3: Installeer de SDK:

sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-8.0

Stap 4: Controleer de versie

dotnet --version

Stap 5: Test Dotnet doormiddel van een console applicatie. Als je de volgende commando’s uitvoert zul je “Hello World!” zien.

sudo dotnet new console --output myConsoleApp
sudo dotnet run --project myConsoleApp

Stap 6: Installeer entity framework tool door het volgende commando uit te voeren:

sudo dotnet tool install --tool-path /usr/bin dotnet-ef

Stap 7: Als dit gelukt is zul je de versie van entity framework zien als je het volgende commando uitvoert:

sudo dotnet tool list  --tool-path /usr/bin

Stap 8: Installeer .Nettools:

dotnet tool install -g dotnetsay

Opdracht 1 is geslaagd

Opdracht 2: Docker installeren

Meer informatie over Docker

In deze opdracht installeer je Docker; in latere stappen zullen we hier dieper op ingaan. Docker fungeert als een platform waarmee je applicaties kunt verpakken en isoleren in draagbare containers. Hierdoor wordt het beheer van applicaties over verschillende omgevingen consistent en efficiënt. 🐳🚀

Stap 1: Run de volgende commando’s om verouderde packages te verwijderen

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

Dockcer APT-repository

Je gaat nu de Docker APT-repository instellen. Dit houdt in dat je een pakketbeheerder op je Debian-systeem configureert, waardoor het systeem Docker-softwarepakketten kan herkennen en gebruiken

Stap 2: Voer de volgende commando’s een voor een uit :

Dit commando ververst de lijst met packages en hun versies, zodat je de nieuwste versies kunt installeren.

sudo apt-get update

Dit commando installeert de pakketten ca-certificates (voor SSL-certificaatbeheer) en curl (voor het downloaden van bestanden van het web).

sudo apt-get install ca-certificates curl

Dit commando maakt een nieuwe directory /etc/apt/keyrings aan met lees- en uitvoerrechten voor de eigenaar en leesrechten voor anderen.

sudo install -m 0755 -d /etc/apt/keyrings

Dit commando downloadt de GPG-sleutel van de Docker repository en slaat deze op in /etc/apt/keyrings/docker.asc.

sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc

Dit commando geeft leesrechten aan alle gebruikers voor de gedownloade Docker GPG-sleutel.

sudo chmod a+r /etc/apt/keyrings/docker.asc

Dit commando voegt de Docker repository toe aan de lijst van APT-bronnen, zodat je Docker vanaf deze locatie kunt installeren.

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Als alles correct is verlopen, zie je het volgende verschijnen in je configuratie:

✔️ [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian <releasename> stable

Je kunt de configuratie printen naar de console met:

sudo cat /etc/apt/sources.list.d/docker.list

Voer tot slot een update uit::

sudo apt-get update

Error?

Krijg je een error waarbij er wordt aangegeven dat de release versie niet geaccepteerd wordt? Zorg er dan voor dat je in het bestand /etc/apt/source.list.d/docker.list trusted op yes zet.

Stap 3: Controleer of alles correct is verlopen. Als dat het geval is, zal de output niet leeg zijn. Gebruik hiervoor het commando:

cat /etc/apt/sources.list.d/docker.list

Stap 4: Installeer docker

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Stap 5: Controleer of de Docker-installatie succesvol is verlopen. Als alles correct is, zal het commando sudo docker run hello-world “Hello from Docker!” weergeven en het programma afsluiten.

Opdracht 2 is geslaagd

Opdracht 3: SQL server

In deze opdracht stel je een SQL Server in op een Docker-image en maak je een testdatabase aan. SQL Server is een databasesysteem waarmee je gegevens kunt beheren. Lokale databases worden vaak via LocalDB opgeslagen, terwijl een SQL Server in Docker een draagbare, geïsoleerde omgeving biedt voor databaseconfiguratie en -ontwikkeling. 🐳🛢️

Deel 1 SQL server installeren

Stap 1: Haal de SQL Server 2022 (15.x) Linux-containerimage op vanuit de Microsoft Container Register.

sudo docker pull mcr.microsoft.com/mssql/server:2022-latest

Stap 2: Run de container image met Docker met behulp van het volgende commando, waarbij je YourStrong@Passw0rd vervangt door een wachtwoord dat minimaal 10 tekens lang is en zowel hoofdletters als kleine letters bevat. Dit is het wachtwoord voor de systeembeheerder in SQL server.

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=YourStrong@Passw0rd" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2022-latest

Stap 3: Controleer of alles goed is gegaan door te kijken of de container met de naam ‘sql1’ actief is met het commando

sudo docker ps -a

Handige commando's

Handige commando’s zijn onder andere het starten van een Docker-image met sudo docker start {naam}, het stoppen ervan met sudo docker stop {naam}, en het verwijderen met sudo docker rm {naam}.

Deel 2 SQL server testen

Stap 4: Voer het commando uit om in een interactieve bash-shell te komen van een Docker-container met de naam sql1:

sudo docker exec -it sql1 "bash"

Stap 5: Je bent nu binnen de container en je moet lokaal verbinding maken met sqlcmd door het volledige pad te gebruiken, met het wachtwoord dat je zojuist hebt aangemaakt.

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"

Stap 6: Creëer een testdatabase

CREATE DATABASE TestDB;
GO

Stap 7: Verifieer of je database is aangemaakt

SELECT Name from sys.databases;
GO

Opdracht 3 is geslaagd

Opdracht 4: Apache installeren

In deze opdracht installeer je apache-server, een veelgebruikte open-source webserver die wordt ingezet voor het hosten van webpagina’s en het verwerken van HTTP-verzoeken van gebruikers. 🌐

Stap 1: Om terug te keren naar je normale terminal, voer je de commando exit uit binnen de container.

Stap 2: Installeer de nieuwste versie van apache

sudo apt install apache2

Stap 3: Controleer of apache actief is, port 80 moet aan het luisteren zijn.

ss -ant

Stap 4 Voeg je zelf toe aan de docker groep zodat je docker images kan beheren.

sudo adduser (s-studentnummer) docker

Stap 5 Om te verifiëren dat alles goed is gegaan, ga je nu een statische website hosten op Docker via poort 6009.

sudo docker run -p 6009:80 -d dockersamples/static-site

Stap 6 Stuur een verzoek naar de website om de inhoud te bekijken. De poort is ingesteld op 6009 omdat je deze hebt toegewezen bij het starten van de Docker-container. Voer de volgende commando uit:

curl localhost:6009

Extra info

Om de huidige lijst met actieve containers te controleren kun je het volgende Docker-commando gebruiken sudo docker ps -a. Dit commando toont een overzicht van alle containers op je systeem zowel de actieve als gestopte containers. Mocht je tegen problemen aanlopen controleer dan of je docker container actief is.

Opdracht 4 is geslaagd

Opdracht 5: Git

Nu is het tijd om de code van de website op de Debian-server te plaatsen. Zorg ervoor dat je al een repository hebt opgezet. Als dat nog niet is gebeurd, stel er dan een in of vraag om hulp aan een student-assistent als je vastloopt. 🛠️

Deel 1: Repository clonen

Stap 1: Open je code editor en ga naar je main branche.

Stap 2: Pas de connectiestring van de main branche aan zorg ervoor dat de gebruiker sa is en het wachtwoord overeenkomt met het wachtwoord dat je hebt ingesteld voor je SQL Server. Daarnaast moet de server worden ingesteld op localhost, de poort op 1433, en zet TrustServerCertificate op true. Doe dit voor al je projecten die een database gebruiken.

Hier is een voorbeeld:.

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost,1433;Database=myDatabase;User Id=sa;Password=YourSqlServerPassword;TrustServerCertificate=true;"
  },

Tussenstap: Beginnen de routes van jouw API-project (als je die hebt) met /api? Zo niet, pas dat dan nu ook even aan, aangezien je toch de code aan het wijzigen bent. Dit is belangrijk voor de reverse proxy later. Hieronder staat een voorbeeld; dat scheelt je later werk

image

Stap 3: Push de veranderingen

Stap 4: Ga naar GitHub, navigeer naar je project en klik op de groene knop om de HTTPS-link te kopiëren.

Stap 5: Open weer de terminal met ssh verbinding tot de Debian en clone je project.

git clone <git url>

Clonen lukt niet?

Als het clonen niet lukt, moet je mogelijk een token genereren en dat gebruiken als je wachtwoord. Ga naar de link. Noteer het token, want na generatie is deze niet meer zichtbaar en je hebt deze later nog nodig.

Stap 6: Bevestig of je MS SQLserver container nog draait

`docker ps -a`

Stap 7: Als het nodig is, start je de container met het commando

`docker start sql1`

Deel 2: Migrations

⚠️ Stap 8 en 9 worden uitgevoerd voor alle projecten met een database, de overige stappen zijn voor nu alleen van toepassing op het front-end project. Als je later wijzigingen in je database wilt aanbrengen, kun je opnieuw stap 8 en 9 uitvoeren om je migraties bij te werken.

Stap 8: Voer migraties uit

dotnet ef migrations add InitialCreate

Stap 9: Update je database

dotnet-ef database update

Opdracht 5 is geslaagd

Opdracht 6: Reverse proxy

Je gaat nu een reverse proxy opzetten met behulp van Apache (webserver). Een reverse proxy fungeert als een tussenliggende server tussen gebruikers en een webserver. Het verwerkt verzoeken van gebruikers, fungeert als een beveiligingslaag en optimaliseert de prestaties. 🌐🔒✨

Stap 1: Activeer de HTTP proxy module in Apache

sudo a2enmod proxy proxy_http

Info

In Linux kun je door mappen navigeren met behulp van het cd-commando gevolgd door de mapnaam om een map te betreden, of cd ../ om terug te gaan naar de vorige map. Met het commando nano kun je een tekstbestand bewerken.

Stap 2: Navigeer naar de 000-default.conf bestand.

sudo nano /etc/apache2/sites-enabled/000-default.conf

Stap 3: Voeg de volgende keywords aan het bestand toe:

ProxyPass / http://localhost:6009/
ProxyPassReverse / http://localhost:6009/
ProxyPass /api http://localhost:5000/
ProxyPassReverse /api http://localhost:5000/

image

Stap 4: Gebruik de toets combinatie Control + X om de wijzigingen op te slaan.

Stap 5: Restart apache sudo systemctl restart apache2

Je hebt zojuist succesvol een reverse proxy geconfigureerd!

🌐 Verkeer naar jouw website wordt doorgestuurd naar localhost:6009, terwijl verzoeken naar jouw interne API worden gerouteerd via het pad /api naar localhost:5000. 🚀 Zorg ervoor dat je in de naamgeving van je API-controllers het /api-pad hebt toegevoegd, indien dat nog niet is gedaan. 🔍

image

Stap 6: Ga naar de map van je project (gebruik hiervoor cd en ls) en voer vervolgens het volgende commando uit:

dotnet run --urls=http://localhost:6009

Stap 7: Zodra het bouwen van je project is voltooid, navigeer je in je browser naar de website via je domeinnaam als je die al hebt, of via je openbare IP-adres (bijvoorbeeld 145.44.xxx.xxx). Als je webapplicatie zichtbaar is, ben je klaar.

Opdracht 6 is geslaagd

Opdracht 7: TLS certificaat

In deze opdracht zorg je ervoor dat jouw webapplicatie beschikbaar is via HTTPS. HTTPS is een protocol dat zorgt voor versleutelde communicatie tussen de gebruiker en de webserver, wat essentieel is voor veiligheid en privacy. Om HTTPS mogelijk te maken, heb je een TLS-certificaat nodig. 🔒✨

Deel 1 Snapd installeren

Stap 1: Voer een systeemupdate uit met het commando:

sudo apt update

Stap 2: Installeer Snapd met het commando:

sudo apt install snapd

Stap 3: Controleer de status van Snapd met het commando

sudo systemctl status snapd

Warning

Als er iets mis is gegaan, voer dan het volgende commando uit:

sudo systemctl enable --now snapd.socket

Stap 4: Installeer de core-snaps met het commando. Hiermee installeer je de basiscomponenten die nodig zijn voor het gebruik van Snap-pakketten.

sudo snap install core

Deel 2 Certbot installeren

Stap 5: Verwijder verouderde Certbot-pakketten met het commando

sudo apt-get remove certbot

Stap 6: Installeer Certbot via snap met het commando. Hiermee verkrijg je Certbot voor het beheren van TLS-certificaten.

sudo snap install --classic certbot

Stap 7: Zorg ervoor dat certbot gerund kan worden op je machine door de volgende uit te voeren

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Stap 8: Voer het onderstaande commando uit. Hiermee start je Certbot met de Apache-plugin, waardoor je een SSL-certificaat kunt verkrijgen en configureren voor je webapplicatie.

sudo certbot --apache

Stap 9: Ga naar de map van je project (cd en ls) en voer vervolgens het volgende commando uit:

dotnet run --urls=http://localhost:6009

Stap 10: Ga naar je website en controleer of er een slotje staat.

![success] Je hebt zojuist succesvol een TLS-certificaat toegepast op je webserver. TLS (Transport Layer Security) is de hedendaagse opvolger van SSL (Secure Sockets Layer), beide ontworpen om gegevens te versleutelen tijdens de communicatie tussen een webserver en een gebruiker. Met dit TLS-certificaat wordt de vertrouwelijkheid en integriteit van de gegevensoverdracht verzekerd. Het is een cruciale stap om een veilige verbinding (https) op een website te realiseren. 🔒✨

Stap 11: Nadat je het TLS-certificaat hebt geïnstalleerd, is het raadzaam een beveiligingsrapport voor je portfolio te genereren. Voer de test uit om de configuratie te analyseren, mogelijke kwetsbaarheden te identificeren en voeg een screenshot van het rapport toe aan je portfolio als mogelijk bewijsmateriaal.

Opdracht 7 is geslaagd

Opdracht 8: Deployen

🚀 Je staat nu op het punt je projecten te deployen! Als het goed is, zijn de connection strings voor alle projecten al correct geconfigureerd, heb je alle migraties al uitgevoerd, en ben je klaar om te beginnen. 💻✨

Stap 1: Navigeer naar de projectfolder van je front-end project.

Stap 2: Voer het volgende commando uit om je project te publiceren:

dotnet publish -r linux-x64 --self-contained false --configuration Release

Stap 3: Navigeer vanuit dezelfde folder naar bin/Release/net-8.0/linux-x64/publish.

Stap 4: In die folder zul je <projectnaam>.dll zien staan. Voer de volgende commando uit

dotnet <projectnaam>.dll --urls=http://localhost:6009

Stap 5: ⛔ Stop je applicatie door Ctrl + Z in te voeren, zodat je deze op de achtergrond kan draaien.

Stap 6: Voer het commando bg uit om het op de achtergrond te laten draaien.

Stap 7: Herhaal de bovenstaande stappen voor je API project. Laat bij stap 4 voor de API —urls=http://localhost:6009 weg, zie hieronder een voorbeeld!!

dotnet  <projectnaam>..dll

Stap 8: Controleer of alle stappen succesvol zijn verlopen door naar je website te navigeren. Als je een eenvoudige GET-request hebt, kun je jouw API in de terminal testen met de volgende commando’s:

Met TLS-certificaat (HTTPS):

curl https://localhost/api/ <naam_get_request>

Geen TLS-certificaat (de redirect naar https lukt niet):

curl https://localhost:5000/api/ <naam_get_request>

Je hebt zojuist je webapplicatie gepubliceerd met de configuratie “Release”. Hierdoor draait je applicatie nu in productiemodus, geoptimaliseerd voor efficiëntie en prestaties. 👏✨

Belangrijk

Wanneer je tussentijdse wijzigingen aanbrengt in je applicatie, haal deze dan op met ‘git pull’ en voer eventuele database-migraties uit in je projectfolder. Na deze stappen dien je de applicatie opnieuw te publiceren met de bovenstaande commando’s om ervoor te zorgen dat deze up-to-date is. Het is mogelijk dat je een melding krijgt dat de poorten in gebruik zijn. Als dat het geval is, zoek dan de commando’s op om ze te sluiten. ✨🔄

Opdracht 8 is geslaagd

Voltooide taken

  • 🔄 Reverse Proxy
    • Implementatie van een reverse proxy via Apache voor verbeterde verkeersroutering
  • 🗄️ SQL-server
    • Opzetten van een SQL-server binnen een Docker-container voor effectief gegevensbeheer.
  • 🐳 Docker
    • Professionele implementatie van een TLS-certificaat op de webserver voor versleutelde communicatie. Inclusief een grondige scan voor beveiligingsrisico’s.
  • 🔒 TLS-certificaat Implementeren:
    • Implementatie Docker voor draagbaarheid en vereenvoudigde implementatie van applicaties.
  • 🌐 Webapplicatie Deployen:
    • Beschikbaar maken van de webapplicatie voor eindgebruikers. ✅
    Reflecteer op de activiteiten die je hebt uitgevoerd in je eindverslag over je portfolio en zorg ervoor dat je dit ondersteunt met bewijsmateriaal. Je hebt immers veel bereikt vandaag (rapport TLS, Git, reverse proxy-instellingen, enzovoort). Je bent nu klaar voor de workshop ZAP. 🚀💻✨