MTESSDev / PoCVSCodeDockerDistant

PoC de la possibilité de faire du debug dotnet dans une machine distante, via la machine locale.

Home Page:https://www.github.com/CQEN-QDCE/PoCDebugDotnet

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

img License


PoC .Net sur Linux remote

Machine Linux hébergée dans Azure

Préparation de la machine

Étapes pour créer une machine virtuelle Linux sur Azure et se connecter à la machine pour le développement .Net

Faire logon au portail Azure https://portal.azure.com

Dans Azure services, créer une nouvelle ressource "Virtual Machine", puis cliquer sur l'option + Create; choisissez l'option Azure virtual machine.

La page Create a virtual machine est présentée. Elle est composée par plusieurs onglets, qui doivent être répondus pour la collection de toutes les informations utilisées pour la création de la VM.

Onglet Basics

Dans le premier onglet, Basics, il faut répondre aux champs suivants:

Project details

  • Subscription: choisissez votre suscription;
  • Resource group: cliques sur Create new; puis donnez un nom de votre préférence. Dans cet exemple, on le nomme CQEN-RG;

Instance détails

  • Virtual machine name: dans l'exemple, CQEN-Linux-VM;
  • Region: choisissez la région de votre convenance;
  • Availability options: Availability zone;
  • Availability zone: Zone 1;
  • Security type: Standard;
  • Image: selon votre préférence. Dans cet exemple, on utilisera Ubuntu Server 20.04 LTS - Gen2;
  • Run with Azure Spot discount: à votre discrétion;
  • Size: à votre discrétion;

Administrator account

  • Authentication type: SSH public key
  • Username: changez pour votre nom d'utilisateur préféré. Dans cet exemple, on utilisera cqen;
  • SSH public key source: Generate new key pair
  • Key pair name: prenez la suggestion ou donnez un nom de votre préférence.

Inbound port rules

  • Public inbound ports: Allow selected ports
  • Selected inbound ports: choisissez SSH(22), HTTPS(443).

Cliquez le bouton "Next: Disks"

Onglet Disks

Disk options

  • OS disk size: Default size (30 GiB)
  • OS disk type: Standard HDD (locally-redundant storage) ou selon votre préférence. Par contre, l'option du disk SSD est beaucoup plus chère que celle du disk HDD. Dans cet exemple on a choisi HDD étant donné que cette machine n'aura pas une application critique qui doit avoir de la haute disponibilité.
  • Delete with VM: sélectionner
  • Encryption type: (Default) Encryption at-rest with a platform-managed key

Data disks for CQEN-Linux-VM

  • Create and attach a new disk:
    • Name: prenez la suggestion, ou nommez-le selon votre préférence
    • Source type: `None (empty disk)
    • Size: cliquez sur change size, choisissez `Standard HDD (locally-redundant storage) et choisissez la taille qui vous convient.
    • Encryption type: (Default) Encryption at-rest with a platform-managed key
    • Delete disk with VM: sélectionnez la boîte

Cliquez le bouton "Next: Networking"

Onglet Networking

Network interface

  • Virtual network: (new) CQEN-RG-vnet
  • Subnet: (new) default (10.1.0.0/24)
  • Public IP: `(new) CQEN-Linux-VM-ip
  • NIC network security group: Basic
  • Public inbound ports: Allow selected ports
  • Select inbound ports: choisissez SSH(22), HTTPS(443).
  • Delete public IP and NIC when VM os deleted: sélectionnez la boîte

Load balancing

  • Load balancing options: None

Cliquez le bouton "Next: Management"

Onglet Management

Monitoring

  • Boot diagnostics: Enable with managed storage account (recommended)

Auto shutdown

  • Enable auto-shutdown: sélectionnez la boîte

Guest OS updates

  • Patch orchestration options: Image default

Cliquez le bouton "Next: Advanced"

Onglet Advanced

On ne va pas configurer des options dans cet onglet.

Cliquez le bouton "Next: Tags"

Onglet Tags

  • Name: Serveur Linux
  • Value: Develop

Cliquez le bouton "Next: Review + Create"

Onglet Review + Create

À cet onglet, Azure va procéder à des validations des options choisies dans les onglets précédants, et si le tout est correct, il vous montrera le message Validation passed. En plus, il affichera toutes les configurations faites, les détails du produit que vous déployez, bien comme le cout et les termes de service.

Si vous êtes d'accord avec ces termes, cliquez le bouton Create en bas à gauche de l'écran.

Vous verez un écran appellé Generate new key pair, qui vous demande de faire le téléchargement de la clé privée SSH de votre utilisateur, pour la connection remote. Cliquez sur le bouton Download private key and create resource. Prenez note du répertoire où vous enregistrez ce fichier. Après le telechargement, Azure continue la création et le déploiement de votre machine virtuelle. Cela peut prendre quelques minutes, merci de patienter pendant le traitement de la demande.

Après quelques minutes, vous recevez le message Your deployment is complete, ce que nous confirme que la création est réussie. Cliquez sur le bouton Go to resource pour voir les ressources créés.

Connecter à la machine

Option 1 : Machine publique

Dans la page de votre VM, prenez note de l'adresse IP publique de votre machine (Public IP address). Assurez-vous aussi que votre machine soit démarrée.

Vous allez vous connecter à cette machine via une connection SSH. Dans votre machine locale, ouvrez votre VSCode.

Option 2 : Machine privée

La machine pourrait être accessible en privé par VPN seulement. À ce moment, il faut démarrer le VPN avant de continuer.

Installation d'extensions

Installation Remote Development

Dans la barre d'outils à gauche du VSCode, cliquez sur l'icône des Extensions; ensuite, dans la boîte de recherche, cherchez le terme Remote Development, l'extension se présentera dans la liste à gauche. Cliquez sur installer et attendez la fin de l'installation.

Une fois finie, on va se connecter à la machine virtuelle accessible via l'adresse IP publique que vous avez pris note, avec la clé qui a été générée dans l'étape Onglet Review+Create ci-dessus.

D'abord, vérifiez si vous possedez le répertoire de configuration du SSH dans votre profil d'usager. Il est important parce que c'est l'endroit à enregistrer vos clés d'accès à la machine virutelle.

Pour linux/mac
$ ls ~/.ssh 
Pour windows
dir %USERPROFILE%\.ssh

Si cette commande répond que le répertoire n'est pas trouvable, il faut le créer avec la commande ci-dessous:

Pour linux/mac
$ mkdir ~/.ssh
Pour windows
mkdir %USERPROFILE%\.ssh

Ensuite, faites la copie du fichier que vous avez téléchargé dans ce répertoire nouvellement créé. Dans mon cas, le fichier s'appelle CQEN-Linux-VM_key.pem et il a été téléchargé originalement dans le repertoire ~/Downloads:

Pour linux/mac
$ mv ~/Downloads/CQEN-Linux-VM_key.pem ~/.ssh/.
$ chmod 400 ~/.ssh/CQEN-Linux-VM_key.pem
Pour Windows

Déplacez le certificat .pem dans le répertoire %USERPROFILE%\.ssh

Maintenant, dans VSCode, faites Ctrl + Shift + P ou F1 pour ouvrir le menu de selection d'options, puis saisissez Remote-SSH: ; vous allez voir l'option Add a New SSH Host. Cliquez sur l'option.

Ensuite, dans le dialog qui suit Enter SSH connection command, saississez la commande qui suit, en substituant le nom d'usager "cqen", l'IP publique ou le nom d'hôte "22.196.64.15" et le path vers la clée publique "~/.ssh/CQEN-Linux-VM_key.pem" avec les valeurs que vous avez configurés:

$ ssh cqen@22.196.64.15 -A -i ~/.ssh/CQEN-Linux-VM_key.pem

Dans le dialogue de plateforme, choississez Linux:

Dans le dialog Select SSH configuration file to update, choisissez le fichier propre à votre utilisateur (dans ce cas-ci le premier)

Ou si désirez, tapez l'adresse manuellement

Pour linux/mac
~/.ssh/config
Note au sujet de windows

Validez le fichier config nouvellement mis à jour (dans notre exemple C:\Users\cotda05\.ssh\config) Actuellement l'adresse du fichier .pem est généralement invalide dans celui-ci, assurez vous que le répertoire est bon et que la configuration ressemble à :

Host docker        #Nom local
 HostName docker   #Non d'hôte ou IP
 IdentityFile C:\Users\cotda05\.ssh\docker_key.pem #Fichier PEM
 User cqen    #Utilisateur de la machine linux

Et c'est fait, votre configuration de connection est créé.

Pour vous connecter, faites Ctrl+Shift+P, saisissez Remote-SSH, et choississez l'option Connect current window to host;

Choisissez votre serveur par l'adresse IP:

À la première connexion, on vous demandera de confirmer l'empreinte de la clé publique; confirmez en cliquant sur Oui.

Attendez quelques secondes avant que la connexion soit établie. Toute action que vous ferez dorénavant dans cette session du VSCode se passera dans le host remote.

Préparation de la machine distante

Prérequis

  • Configurer l'usager admin; bloquer l'accès de root;
  • Installer .netCore SDK;
  • Installer docker

Configurer nouvel usager

Attention cette étape nécessite de toujours faire un su labuser par la suite à moins de configurer le remote command.

Il faut configurer un nouveau usager, qui n'a pas le profil du root, et qui soit dans le groupe de sudoers, pour des accès réhaussés. Par exemple, si l'on créé ce nouveau usager appellé labuser

$ adduser labuser 
$ adduser labuser sudo

Remote command

Dans le fichier settings.json de VS Code, assurez-vous de ne pas avoir la config remote.SSH.remotePlatform présente et ajoutez la config

    "remote.SSH.enableRemoteCommand": true,
    "remote.SSH.useLocalServer": true

Ajoutez ensuite, dans votre fichier ssh config ceci:

  RequestTTY yes
  RemoteCommand sudo su - labuser

Cela changera automatiquement votre utilisateur lors de la connexion.

Installer dotnet core SDK framework

Suivez les instructions d'installation du SDK framework dotnet core 6 à partir de la doc de Microsoft: https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu#2204

Assurez-vous de suivre les infos de la version 22.04, et seulement l'instalation du SDK 'Install SDK'.

Installez docker

Sur la VM linux:

$ sudo snap install docker

Dans le poste local:

  • Installez l'extension Docker dans VS code;

Après l'installation, faites un reboot de votre machine virtuelle.

Créez une nouvelle application dotnet dans une machine remote

Pour créér la nouvelle application dotnet, suivez les étapes ci-dessous:

$ mkdir projects
$ cd projects 
$ dotnet new webapp -o poclinuxdotnet --no-https -f net6.0

# Pour l'execution de l'application dans la machine distante
$ cd poclinuxdotnet
$ dotnet watch 

# Attendre le redirect vers le navigateur.
# Ou cliquez sur le lien http:// dans le log 

Dockeriser l'application

Faire le l'inclusion du fichier Dockerfile et .dockerignore dans le répertoire du projet (voir Debug Docker: Add docker files to workspace plus bas).

Ensuite faire le build de l'application:

$ docker build -t poclinuxdotnet .

L'image sera tagée comme poclinuxdotnet. Attendre le build finir l'application.

Debug d'une application dans une machine remote

Prérequis pour une session de débogage

Dans le poste local:

  • VSCode;
  • Extension C#;

Débogage

Ouvrez la palette de commande (Ctrl+Shift+P) et saisissez Docker: Add docker files to workspace.. Suivez les instructions à l'écran.

Changez vers la vue Run and Debug view (Ctrl+Shift+D).

Selectionnez la configuration Docker .NET Core Launch.

Mettez votre breakpoint ou li fait du sens pour vous.

Commencez le debugging! (F5)

GIT

Conserver les credentials

$ git config --global credential.helper store

Ajouter les infos

$ git config --global user.name "user"
$ git config --global user.email "email@entreprise.com"

Troubleshoot

I'm on Linux and get the error "connect EACCES /var/run/docker.sock"

Since VS Code runs as a non-root user, you will need to follow the steps in "Manage Docker as a non-root user" from Post-installation steps for Linux for the extension to be able to access docker.

Problème EACESS dans porte

Lister les procès qui sont ratachés à la porte en problème avec la commande fuser <port>/tcp.

Par exemple, si l'on veut débloquer la porte 8080

$ fuser 8080/tcp -k

Références

Installation

https://tecadmin.net/how-to-install-dotnet-core-on-ubuntu-22-04/ https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu - Installation de .Net 6

Installation 3.1

https://abhisheksubbu.github.io/dotnet-core-install-ubuntu-20-04-lts/

APP de test (tutorial)

https://dotnet.microsoft.com/en-us/learn/aspnet/hello-world-tutorial/intro

Dockeriser application dotnet

Install docker sur ubuntu https://docs.docker.com/engine/install/ubuntu/ https://docs.docker.com/engine/install/linux-postinstall/

Dockerisation d'un aspnet https://docs.docker.com/samples/dotnetcore

Debug

Debug de l'app https://code.visualstudio.com/docs/containers/debug-netcore

https://jasonwatmore.com/post/2021/06/24/vs-code-net-debug-a-net-web-app-in-visual-studio-code

About

PoC de la possibilité de faire du debug dotnet dans une machine distante, via la machine locale.

https://www.github.com/CQEN-QDCE/PoCDebugDotnet


Languages

Language:HTML 54.9%Language:C# 26.6%Language:CSS 15.3%Language:JavaScript 3.3%