.net Core sous Linux Nginx 80 http 443 https firewall

En voila un titre bien déguelasse. Suite à l’article précédent (comment heberger asp.net, un bref historique) je voulais consigner ici mes trouvailles concernant la mise en place d’un site web asp.net core sur Linux Debian.  Pour cela j’ai loué un VPS Linux chez iKoula pour 4€.  On a donc un accès SSH suite à l’obtention de ce dernier, on se connecte et je vous montre comment on fait un site web qui marche en .net Core.   Sources Voici les quelques sites web qui m’ont servit dans cet article. # Installer Dotnethttps://docs.microsoft.com/fr-fr/dotnet/core/install/linux-debian# Installer un firewall UFWhttps://debian-facile.org/doc:systeme:ufw# Installer NGinxhttps://idroot.us/install-nginx-debian-11/https://www.howtoforge.com/how-to-install-nginx-on-debian-11/# Config Nginxhttps://docs.microsoft.com/fr-fr/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-6.0# Multi Sitehttps://webdock.io/en/docs/how-guides/shared-hosting-multiple-websites/how-configure-nginx-to-serve-multiple-websites-single-vps Projet web Asp.net core On commence par la création locale d’un site web en asp.net core .net 5. Qu’il faut bien entendu avoir sur son poste. Je vous renvois à la doc pour toute la paprasse,  https://docs.microsoft.com/fr-fr/aspnet/core/getting-started/?view=aspnetcore-6.0&tabs=windows C’est une des meilleurs doc du web, donc profitez en. Je vais pas la réinventer, je vais a l’essentiel. La commande suivante va vous créer une api web de base.  dotnet new webapi -o TodoApi On va garder l’exemple de microsoft « TodoApi », qui est en fait une api toute conne avec un seul control qui donne la météo. Je m’en fou total de ce truc, c’est pour l’exemple.  Pour moi il manque une route, celle de la « home ». Alors je rajoute un controler « home Histoire d’avoir qq chose à afficher à la racine du site. On teste le site web  dotnet run.  De base vos ports sont 5001 sur https (avec un certificat local de developer) et 5000 en http.  Ces ports sont localisés dans  Properties/launchSettings.json dans la propriété applicationUrl Si comme moi, vous avez plusieurs sites asp.net core, vous allez probablement changer ces ports. Et on va le voir par la suite cela a une grande importance. Moi je le fait directement dans le code source, mais ya d’autre méthodes. Le site tourne on va le publier  avec la commande suivante  dotnet publish -c Release Ce qui va créer un nouveau répertoire  binReleasenet5.0publish Ou on aura tous les fichiers nécessaires pour notre site web en production dedans.  Install Server VPS Alors avant toute chose, je suis pas un expert linux. Si je dis une connerie, faut le signaler dans les commentaires svp. J’ai un passif Windows qui m’a éloignié de Linux, meme si de base, je suis ingé système et réseau, de ya 20 ans… On commence, on se connecte en SSH.  Alors perso, j’ai découvert une extension de visual studio code qui facilite la vie. C’est Remote-SSH.Ca permet d’éditer des fichiers distants directement dans VS (et d’avoir tous les outils, couleurs, syntaxe, etc…) Mais ca fait aussi explorateur de fichier, FTP et bien entendu on a toujours une ligne de commande à porté de main, tout ca dans VS code. Un must have. Dotnet 5.0 Alors le serveur est une version Debian 11 de linux. C’est important de checker avant si .net Core est compatible ou pashttps://docs.microsoft.com/fr-fr/dotnet/core/install/linux   Nous on continue sur une Debian 11 :https://docs.microsoft.com/fr-fr/dotnet/core/install/linux-debian   On référence les packages Microsoft(wgt ==> w g e t, va savoir pourquoi je peux pas écrire ce mot la sur wordpress) wgt https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.debsudo dpkg -i packages-microsoft-prod.debrm packages-microsoft-prod.deb   Puis on install le SDK .Net 5.0 (la version 6.0 est sortie peu de temps avant cet article, donc passer en 6.0 c’est mieux)   sudo apt-get updatesudo apt-get install -y apt-transport-httpssudo apt-get updatesudo apt-get install -y dotnet-sdk-5.0 Nginx Pré install  sudo apt update sudo apt upgrade sudo apt install curl gnupg2 ca-certificates lsb-release Install sudo apt install nginx On Check nginx -v Ce qui donne pour moi : nginx version: nginx/1.18.0  on en profite pour installer un firewall ufw apt-get update && apt-get install ufw et on l’active  ufw enable Alors attention, ca pourrait couper votre connexion SSH, mais les gars ils sont pas trop con, ils ont par defaut ouvert le port 22.  On ajoute les règles de bases NGinx sudo ufw allow ‘Nginx HTTP’ A ce stade on devrait avoir un site web qui tourne. Donc aller changer votre DNS pour modifier ou ajouter un domain, par exemple prout.com qui pointe vers l’ip de votre serveur. Profitez en pour ajouter une nouvelle entrée A dans votre zone DNS todoapi.prout.com qui pointe vers la meme IP. Ca peut prendre jusqu’à 24h, mais aujourd’hui ca va plus vite. Si c’est un .fr ca devrait pas trainer. Sinon, faut pinger l’adresse jusqu’à avoir une réponse et une IP qui va bien.  Aller dans votre navigateur préféré et taper votre domaine, pour moi : http://prout.com et si vous voulez pas attendre taper directement l’ip de votre serveur. Notez que pour le moment on parle pas encore de https.  Et bimm : Tu n’as un beau serveur d’enculé ! Config Nginx On fait un pti point pour comprendre les choses.  Dans /var/www/html on a le code source de notre site web.  Dans /etc/Nginx on a notre serveur web Nginx et ses conf Le répertoire sites-available va contenir les configurations de nos sites web. Le répertoire sites-enabled va contenir des liens vers les config précédentes. Ce qui les rendra actives ! C’est ce que l’on va faire, on va créer un nouveau site. Pour cela on va commencer par mettre un nouveau répertoire dans /var/www qui va contenir le publish de tout à l’heure. Alors on y va, on copie… Ensuite il faut créer un fichier dans /etc/nginx/sites-available/, par exemple todoapi.prout.com.conf et on y met ceci server {    server_name todoapi.prout.com;    root /var/www/todapi;    location / {        proxy_pass         http://127.0.0.1:5002;        proxy_http_version 1.1;        proxy_set_header   Upgrade $http_upgrade;        proxy_set_header   Connection keep-alive;        proxy_set_header   Host $host;        proxy_cache_bypass $http_upgrade;        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;        proxy_set_header   X-Forwarded-Proto $scheme;    }  }   Noter 3 points, le serveur name avec le DNS de tout à l’heure. le root avec l’emplacement de notre publish. Et enfin le proxy pass et son port 5002. On…

Cloud VPS Hebergement asp.net Framework et Core

Je commence à avoir ma petite expérience concernant l’hébergement d’un site asp.net. Et je vais vous en faire part. Je n’ai qu’une contrainte, faire tourner asp.net. Donc ça implique Windows. Enfin jusqu’à ce que je fasse le deuil de mes sites asp.net qui n’ont pas été migrés en .net Core. On reviendra sur ce point plus tard.  J’en profite pour hoster qq site web vitrine pro, des sites de POCs, des projets perso et pro etc… J’ai du monter facile à une quinzaine de site web. Pendant un temps. VPS OVH 40€/mois J’ai du commencer à louer un serveur vers 2010, avec 1&1 qui s’est rebatisé IONOS. C’était pas top de mémoire. Je suis passé chez OVH et pendant presque 8 ans ça a bien tourné.  Un jour j’ai eu un udpate de Windows qu’a foutu la merde. Mon serveur ne voulait plus redémarrer, il restait coincé juste apres le login. Mode sans échec ne faisant rien. Bref, à distance, je pouvais rien faire. Et j’ai donc eu à faire avec le support d’OVH. Chose en 8 ans que je n’avais pas eu à faire.  C’est la que j’ai entendu parlé de la réputation désastreuse de ce support qui est fondé. Un ticket est traité avec lenteur voir meme laissé comme mort pour être automatiquement détruit dans le temps. Bref, mon serveur en caraf pendant plusieurs jours voir semaine, m’a ammené à étudier la concurrence.  L’offre VPS linux est toujours abordable. Le problème c’est l’ajout d’un serveur Windows. Ca a un coup. Qui je l’apprendrai plus tard, est plus cher chez les concurrents. Je trouvais aussi les performances du serveur OVH un peu à la ramasse. De plus il m’occroyait seulement 50Go (Windows en bouffant un tiers, voir la moitié) et je passais souvent du temps a faire du ménage. Bref, il me fallait un coup de pied au cul pour bouger. Cloud Azure Je suis développeur .net Microsoft depuis maintenant 20 ans. J’ai donc suivis Azure de près.  Pas assez car je pige toujours pas combien ça coute. Ca Microsoft l’a bien compris et donc il propose 12 mois gratos avec un maximum de 150€ / mois je crois. Ce qui laisse largement assez pour tester plein de truc.  C’est ce que j’ai fait. Seulement j’ai jamais mis mes sites dessus. Par paresse car tout marchait bien sur OVH. Donc je suis resté sur des essais seulement.  Mais je dois dire que c’est un sacré bordel Azure… Cloud AWS J’ai tenté l’expérience AWS. Ce que j’aimais bien c’est qu’on pouvait tout faire en ligne de commande (sur Azure aussi, mais je l’ai testé bien plus tard). Ce qui me pose problème avec AWS c’est le controle des couts. J’ai tenté de rester au maximum gratuit. Mais c’est facile de sortir des cases sans s’en rendre compte. J’ai donc laissé un site web + BD de tester tourner (sans visite) et ca m’a quand même couté 17€/mois.  Car c’est malheureux, mais tout est décomposé. Faut une base de donnée qui est un service a part. De la resource calcul, des firewalls, de la réplication si on veut bien faire… Bref, ça part d’un truc simple et on se retrouve avec une usine a Gaz. Sans maitrise des couts.  Le pire c’est que lorsque j’ai tout fermé, j’avais quand meme des factures à 0.01€. Ce qui me laissait un gout de beau bordel… VPS Scaleway Dedibox 60€/mois Dedibox m’a séduit. Au début. Déjà parce que je pensais qu’avec le même budget précedent chez OVH, dans les 40€/mois, j’allais avoir un serveur dédié et plus de ressource. C’était vrai. Sauf pour le prix. En effet l’option Windows est cher, et elle n’est pas fixe (par CPU je crois). Elle évolue avec le pack que l’on choisit. Bref j’ai augmenté mes couts. Je passe à 60€. J’avais aussi un nouveau projet ou je pensais avoir du traffic, donc j’ai anticipé une bonne bécane. Ca a servit à rien mais je pouvais pas le savoir. J’ai donc cherché ailleurs…   Hebergeur PlanetHoster 6€/mois J’y croyais pas trop, mais au final quelle surprise ! J’ai dégagé Dedibox qui me coutait trop cher, et je suis tombé sur PlanetHoster. On peut mettre autant de site que l’on veut, tant qu’on a un peu de resource (CPU, Mémoire, IO) En gros on part avec un pack pour 6€ on ceci :  8 CPU16 GB RAM16 MB/s I/O https://www.planethoster.com/fr/Hebergements-World Que l’on répartie sur ses sites comme on veut. Très pratique lorsque l’on s’attend à un pick de charge.  On peut jouer avec du python, node.js, Php et Ruby. Si ils ajoutent .net Core ça serait un must.  Mais j’ai gardé mes sites vitrines et qq POCs. De plus aujourd’hui les sites webs deviennent vite des apps mobile PWA SPA. Donc du JS. J’en ai qq une.  J’ai rajouté qq resources. En tout ca me coute 100€/an. C’est stable, très administrable. Le support répond et résoud les ticket surtout.  Mais bon, comment je fais tourner Asp.net Core ? Ha oui, car à ce stade j’ai laché tout mes anciens site Asp.Net Framework. Je me focalise maintenant sur .net Core.  VPS iKoula 4€/mois Retour au VPS ! Mais ce coup si fini Windows. Bonjour Linux.  Et que ca fait plaisir de voir ces couts aussi bas. Sans déconner, un serveur à 4€ par mois. C’est ouf.  Alors j’ai choisi iKoula, pour essayer. J’ai une offre pas cher. J’aurais pu revenir sur OVH mais ils m’ont trop déçu.  Alors la grosse différence avec les VPS d’avant, c’est que la plus d’interface graphique. Retour à la ligne de commande.   Faut tout monter à la main. Pas grave.  J’ai pas besoin de grand chose : dotnet pour faire tourner un serveur kestrel en proxy Nginx pour serveur web (qui sera devant le proxy kestrel) un firewall, histoire de pas tout laisser ouvert.  letsencrypt pour un certificat ssl. https://docs.microsoft.com/fr-fr/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-6.0   Une fois qu’on a payer sur iKoula, on nous propose de lacher une clé publique RSA pour le SSH. (facultatif). Ensuite il faut se connecter via…