Mon blog à propos de programmation
Publié ou mis à jour le : 2013-06-24

Comment installer un serveur Ubuntu avec la prise en charge d'ASP.NET, d'abord en virtuel, puis à distance

Le but est d'obtenir un hébergement Web sous Linux qui accepte la programmation ASP.NET, et de programmer son site Web sous Windows.

Plus précisément:
  1. On développe et maintient un site ASP.NET dans Windows.
  2. On teste la portabilité du site sous Linux, dans une machine virtuelle.
  3. On publie le site sur un serveur distant Linux.
Cet article a été mis à jour le 2013-06-24, avec ces versions:
  • Ubuntu 12.04 Server LTS en 64 bits
  • Oracle VirtualBox 4.2.12
  • Visual Studio Express 2012 pour le Web

Cela constituera la méthode la plus économique de créer un site Web et de le faire héberger.
D'une part, nous n'utiliserons que des logiciels gratuits, d'autre part nous louerons un serveur dédié sous Linux, ce qui est plus standard, plus économique et bien plus facile à trouver qu'un serveur sous Windows.
  • Cet article est destiné aux utilisateurs maitrisant la programmation en général sous Windows mais qui connaissent mal Linux ou les serveurs Web Linux. Il est également destiné à faciliter l'utilisation d'ASP.NET sous Linux.
    C'est pourquoi je ne vais pas entrer dans les détails triviaux comme les étapes de l'installation de chaque logiciel sous Windows. On va aller droit à l'essentiel, c'est à dire comment parvenir à nos fins sans perdre de temps.
    Par contre j'ajoute des explications plus détaillées, sous forme de ces blocs de remarque.

SOMMAIRE:
  1. Présentation
  2. Une machine virtuelle pour les essais
    1. Installation du logiciel de virtualisation VirtualBox [ Windows ]
    2. Téléchargement et installation d'Ubuntu Server [ Linux ]
      1. Corriger l'avertissement "Could not reliably determine.." [ Linux ]
      2. Quelques infos supplémentaires
    3. Connexion d'Ubuntu avec l'hôte (Windows) par FTP sécurisé [ Windows ]
      1. Redirection de ports
      2. FTP sécurisé: WinSCP [ Windows ]
      3. Shell sécurisé: SSH par PuTTY [ Windows ]
      4. Serveur de pages: Apache [ Windows ]
    4. Ajout d'ASP.NET au serveur HTML Apache [ Linux ]
      1. Test d'une page ASP.NET [ Linux et Windows ]
      2. Correction de l'erreur "Server Error in '/' Application" [ Linux ]
    5. Téléchargement, installation et programmation sous Visual Studio Express 2012 pour le Web [ Windows ]
      1. Utilisation du serveur de bases de données PostgreSQL [ Windows ] Optionnel
    6. Test du site Web dans la machine virtuelle Linux
  3. Utiliser un vrai serveur distant pour héberger notre site Web
    1. Location d'un serveur dédié Linux distant
    2. Configuration du serveur
      1. Mise à jour et installation
      2. Configuration d'un site Web avec nom de domaine
        1. Le contenu
        2. Avec Webmin
      3. Configurer le nom de domaine avec Bind, sous Webmin
    3. Test de notre site Web
    4. Sécuriser le serveur
  4. Sources externes - Plus d'informations
    1. Un article très détaillé pour installer Ubuntu Server dans une machine virtuelle
    2. Autres articles






Présentation

Mon scénario consiste principalement en l'installation de la distribution Linux 'Ubuntu Server' dans une machine virtuelle (un "émulateur"), de façon à tester le serveur de manière locale mais aussi proche que possible de la réalité d'un serveur à distance.
Ainsi, on pourra créer un site web sous Windows, le tester localement sous Linux virtuel, avant de l'envoyer sur un serveur distant sous Linux.

L'intérêt est donc:
  1. De pouvoir tester la configuration d'un serveur Linux, avant d'en louer un.
    C'est rassurant.
  2. D'éviter de perdre de l'argent pour la location durant notre apprentissage.
    Après tout, on ne sait pas combien de temps il nous faudra pour adapter notre site web à un environnement Mono sous Linux.
  3. De mettre en ligne un site web testé et immédiatement fonctionnel.
    Ce qui permet, entre autres, de mettre à jour un site existant sans interruption de service.


Une machine virtuelle pour les essais

Installation du logiciel de virtualisation VirtualBox [ Windows ]

  • Téléchargez VirtualBox et installez-le.

Nous allons utiliser Oracle VirtualBox, qui est gratuit pour un usage personnel ou pour évaluation.

Vous le trouverez ici:
http://www.virtualbox.org/
  • Conseil essentiel: installez-le dans son répertoire par défaut, sinon vous aurez des problèmes du type "VERR_FILE_NOT_FOUND", ou plus en détails:
    "VBOX_E_IPRT_ERROR (0x80BB0005)". Je vous signale qu'il s'agit en fait d'un problème de noms de chemin mal interprétés dans "%USERPROFILE%\.VirtualBox\VirtualBox.xml". C'est un problème récurrent dans ce logiciel, quelles que soient les versions.
Il existe d'autres logiciels du même type et gratuits, tels que MS Virtual PC et VMware Server.

Téléchargement et installation d'Ubuntu Server [ Linux ]

  • Téléchargez la version Ubuntu Server Edition.

Rendez-vous sur la page d'accueil d'Ubuntu:
http://www.ubuntu.com/download/server

Vous obtiendrez une image ISO de cdrom.
  • Pourquoi la version Server et pas la Desktop ?
    Certes, la Desktop aurait pour avantage de posséder une interface graphique qui faciliterait énormément la configuration de notre serveur.
    Mais d'un autre côté, le but est de nous placer dans des conditions aussi proches que possible de celles d'un serveur distant.
    Hors, dans un serveur distant, on essaie de placer le minimum de choses dans la machine, de façon à minimiser les failles de sécurité et à consommer le moins de ressources possibles.
  • Commencez à installer Ubuntu dans VirtualBox

Lancez VirtualBox, et créez un nouveau projet, en choisissant bien sûr le type Linux / Ubuntu dans la liste.
Nommez-le ubuntu_serveur.
Une fois le projet prêt, faites un clic droit dessus puis modifiez sa configuration (Settings).
Comme cdrom, sélectionnez l'image d'Ubuntu que vous avez téléchargé tout à l'heure.

Maintenant, assurez-vous que Windows est bien connecté à Internet, puis démarrez la machine virtuelle Ubuntu, et installez le système à partir du cd iso.
  • Partitionnement: qu'est-ce que LVM ? Voir l'explication ici.
    C'est une nouvelle façon de gérer les volumes, pas par partition standard mais par un système plus souple qui permet notamment le redimensionnement et le déplacement des volumes sur le disque.
    Il existe aussi une option pour créer des volumes cryptés. Pour notre ordinateur virtuel, ça ne semble pas utile.
    Pour ma part, je me contenterai d'une partition LVM proposée par défaut: "Assisté - Utiliser un disque entier avec LVM".
Surtout, n'oubliez pas de noter toutes les informations que vous entrez dans la configuration, comme le nom de réseau de la machine, l'identifiant et son mot de passe !

  • Choisissez les logiciels principaux à installer
  • OpenSSH server
    À cocher.
  • DNS server
    À cocher, pour simuler une connexion distante.
  • LAMP - Serveur Linux: Apache, MySQL et PHP.
    À cocher, car on a besoin de tout à part PHP.
  • Mail server
    À vous de voir si votre serveur devra envoyer des mails..
  • PostgreSQL database
    À cocher, ça donne un choix en plus de MySQL.
  • Print server
    Sans doute inutile.
  • Samba file server
    Inutile (et dangereux).
  • Tomcat Java server
    Inutile, on ne va pas programmer en Java servlets.
  • Virtual Machine host
    Au choix. C'est une virtualisation dans Linux utilisant KVM, qui permet de mieux séparer des sites Web hébergés.
    Pour ma part, je n'ai pas envie de m'aventurer là-dedans pour le moment, et ça n'est pas utile à notre scénario.
  • Manual package selection
    Ne cochez pas cette case, sauf si vous savez ce que vous faites, voir la remarque à droite.
Votre choix devrait ressembler à ceci:


aptitude et/ou apt-get ?
Il semble que ces deux outils, qui gèrent les logiciels installés dans des paquets, ne soient pas très compatibles entre eux, notamment parce qu'ils ne gèrent pas de la même façon la mémorisation des paquets installés.
Donc vous devriez faire un choix dès le départ, et vous y tenir définitivement.

Heureusement, aptitude a une syntaxe équivalente à apt-get, dans son mode en ligne de commande.
Par exemple, lorsque vous lisez dans un article "apt-get install xxx", vous pouvez à la place taper "aptitude install xxx".

Pourquoi utiliser aptitude plutôt que apt-get ?
De l'avis général, aptitude gère mieux l'interdépendance entre les paquets.
De plus, il propose en plus (de la ligne de commande) une interface en plein écran.

À noter que la documentation officielle d'Ubuntu utilise aptitude, qui semble être le gestionnaire de paquet soutenu par Ubuntu dans la version 12.04.

Une documentation courte est diponible.
  • Attention, avant de continuer, assurez-vous que votre système hôte (Windows) est bien connecté à Internet, car l'installateur va tenter de télécharger les paquets sélectionnés. Si l'installateur vous indique qu'il n'a pas réussi à se connecter à Internet, vérifiez d'abord l'icône de connexion en bas de de la fenêtre, normalement elle devrait indiquer "Carte 1 NAT : câble connecté".
    De toute façon, en cas d'erreur l'installateur vous ramène à la liste des étapes de l'installation, vous pourrez alors choisir la commande "Détecter le matériel réseau", ce qui permettra de revenir ensuite automatiquement au choix précèdent des modules.
Si vous avez demandé un serveur de messagerie, choisissez le type "Site Internet".
Ensuite créez un nom de domaine, pour notre exemple ce sera "serveur.lan".


Si à l'installation vous n'avez pas coché "LAMP - Serveur Linux: Apache, MySQL et PHP", vous pouvez vous rattraper une fois la ligne de commande accessible, en n'installant qu'Apache et MySQL:
sudo aptitude install apache2 apache2-doc mysql-server

  • Attendez la fin de l'installation de Linux, et redémarrez-le

  • Mettez à jour Ubuntu

Une fois Linux installé et l'ordinateur virtuel redémarré, on le met à jour avec trois commandes:

  1. Mettre à jour la liste des paquets dans aptitude (synchroniser):
    sudo aptitude update
  2. Mettre à jour tous les paquets actuellement installés:
    sudo aptitude full-upgrade
Ça peut prendre un temps assez long, peut-être une demi-heure.
Si l'écran devient noir, ce n'est pas que Linux a planté, c'est qu'il s'est mis en veille !  :)

Corriger l'avertissement "Could not reliably determine.." [ Linux ]

Parfois, au démarrage de Linux, Apache indique une erreur mineure: "apache2 : Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName".
Le problème vient de ce qu'Apache ne sait pas que cette adresse est en fait une adresse locale.

Pour corriger cela, nous allong éditer son fichier (texte) de configuration:
sudo vi /etc/apache2/httpd.conf
du moins, avec l'éditeur de textes vi.
Si vous désirez utiliser jed comme éditeur, installez-le comme indiqué plus bas en remarque, et tapez:
sudo jed /etc/apache2/httpd.conf

Dans ce texte de configuration, vous allez ajouter la ligne:
ServerName localhost
Et je dis bien "ServerName", pas le nom de votre domaine. Entrez ce texte tel quel.

Quelques infos supplémentaires

  • Pour éditer des textes dans Linux.
    Il vaut mieux travailler avec un éditeur que l'on apprécie, plutôt que de s'arracher les cheveux, déjà que bien souvent on utilise l'éditeur pour résoudre des problèmes.
    Si comme moi vous ne vous faites pas à vi (ou vim, ou Emacs), alors vous trouverez des éditeurs plus familiers aux Windowsiens.
    • "pico" est un éditeur simple comportant quelques menus et un navigateur de fichier pour leur ouverture. Il est installé par défaut, dans Ubuntu Server.
    • "jed" est un éditeur à priori plus évolué, dans la veine du bon vieux "Edit" qu'on avait sous Dos, donc avec des menus déroulant, des fenêtres, etc. Toutefois il n'a pas d'explorateur de fichiers, et ses raccourcis-clavier ne sont pas au format Windows.
      Pour l'installer, il faut entrer cette commande:
      sudo aptitude install jed

    Pourtant, pour l'instant je n'ai pas trouvé d'éditeur (en mode console) qui soit aussi simple et ergonomique qu'Edit, c'est à dire avec un menu déroulant, des raccourcis-clavier standard (Ctrl-C, Ctrl-V..), la navigation dans les fichiers, la sélection de texte avec la touche Majuscule, le déplacement mot-à-mot avec la touche Contrôle, la souris, etc.. 
  • Sudo
    Petite explication pour les non Linuxiens: sudo sert à lancer des commandes en mode administrateur.
    C'est l'équivalent de "Éxécuter en tant qu'administrateur" sous Windows Vista, 7 ou 8.
  • Dans le même ordre d'idées, on a également besoin d'un explorateur de fichiers digne de ce nom.
    "mc", alias Midnight Commander est bon. Pour l'installer:
    sudo aptitude install mc
  • Un bon point: dans PuTTY, la souris fonctionne.
  • À noter que pour désinstaller un logiciel, c'est simple aussi:
    Pour mc, par exemple:
    sudo aptituderemove mc

Connexion d'Ubuntu avec l'hôte (Windows) par FTP sécurisé [ Windows ]

Maintenant, on va configurer les deux systèmes pour accéder au serveur à partir de Windows, de la même façon que l'on accédera plus tard au serveur Linux distant.

Redirection de ports


  • Redirigez les ports

Pour l'instant, notre serveur étant dans une machine virtuelle, on ne peut pas utiliser ses ports normaux, par exemple le port HTTP (80).
On doit faire une traduction (translation) de ports, par exemple un port vu par Ubuntu comme 80 sera vu par Windows comme 8888.

  1. Arrêtez votre machine virtuelle en fermant Linux (menus Machine / Fermer par ACPI),
  2. Éditez les paramètres de votre machine virtuelle, dans la partie Réseau.
    Ouvrez la sous-partie "Avancé", et cliquez sur le bouton Redirection de ports.
  3. Entrez ces lignes:

Nom
Protocole
IP hôte
Port hôte
IP invité
Port invité
Apache
TCP

8888

80
SSH
TCP

2222

22
SSL
TCP

8443

443

  1. Relancez votre machine virtuelle pour démarrer Ubuntu.

FTP sécurisé: WinSCP [ Windows ]


  • Installez et configurez un client FTP sécurisé

Si vous n'en avez pas déjà un, installez dans Windows un logiciel de FTP sécurisé, par exemple WinSCP.

Lancez-le et créez une session.
Comment "Nom d'hôte", utilisez l'adresse IP de VirtualBox et le numéro de port SSH traduit par le NAT, soit non 22, mais 2222.
  • Pour connaître l'adresse IP (v4) utilisée par VirtualBox, vous pouvez ouvrir une console de commande dans Windows et taper ceci:
    ipconfig /all|more

    Vous verrez dans le texte une partie de ce genre:

    Carte Ethernet VirtualBox Host-Only Network :

       Suffixe DNS propre à la connexion. . . :
       Description. . . . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter
       Adresse physique . . . . . . . . . . . : XX-XX......
       DHCP activé. . . . . . . . . . . . . . : Non
       Configuration automatique activée. . . : Oui
       Adresse IPv6 de liaison locale. . : xx:xxxx:xxxx....(préféré)
       Adresse IPv4. . . . . . . . . . . : 192.168.56.1(préféré)

    Masque de sous-réseau. . . . . . . . . : 255.255.255.0

       Passerelle par défaut. . . . . . . . . :
       IAID DHCPv6 . . . . . . . . . . . : xxxxxxxxx
       DUID de client DHCPv6. . . . . . . . : xx-xx-xx-xx-xx
       Serveurs DNS. . .  . . . . . . . . . . : fec0:0:0:ffff::1%1
                                           fec0:0:0:ffff::2%1
                                           fec0:0:0:ffff::3%1
       NetBIOS sur Tcpip. . . . . . . . . . . : Activé

    Dans cet exemple, l'adresse est donc 192.168.56.1
Si vous n'avez pas encore de clé, utilisez l'utilitaire livré avec WinSCP:   PuTTY Key Generator (voir dans le menu Démarrer).
Par ailleurs, vos identifiants sont ceux de votre compte utilisateur dans Ubuntu.

Normalement, une fois la session ouverte, vous devriez vous retrouver dans l'explorateur de fichiers de WinSCP, et voir les fichiers d'Ubuntu dans la partie de droite.
Bravo ! Maintenant on a la possibilité de transférer des fichiers d'un système à l'autre.
Et ça nous a permis de vérifier que la connexion fonctionnait.

Shell sécurisé: SSH par PuTTY [ Windows ]

  • Ouvrez une console PuTTY par SSH

Maintenant, utilisez PuTTY (menus Commandes / "Ouvrir avec PuTTY", dans WinSCP), pour obtenir une console de commande distante sécurisée SSH.
Vous remarquerez que vous pouvez lancer PuTTY à partir de WinSCP, dans une session déjà ouverte (Ctrl-P comme raccourci-clavier). C'est très pratique.

  • Si l'écran de PuTTY affiche des caractères bizarres à la place des lettres accentuées ou des dessins de tour de zones, configurez PuTTY:
    • Cliquez sur son icône de fenêtre à gauche, puis sur Change settings. Dans la partie Translation, vous pourrez choisir UTF-8.
    • Puis redémarrez PuTTY ou le logiciel en marche dans son écran.

Allez-y, ouvrez une session WinSCP, puis lancez-y PuTTY, et entrez cette commande dans PuTTY:
ls /

C'est un simple affichage des fichiers à la racine du système de fichiers.
Votre fenêtre devrait ressembler à ceci:



Voila, ainsi nous avons un shell accédant à notre serveur virtuel.
Pour sortir proprement du shell, tapez cette commande:
exit

Serveur de pages: Apache [ Windows ]

  • Testez le serveur HTML

Votre serveur Apache étant installé, nous allons le tester.

Ouvrez un navigateur Internet dans Windows, et entrez l'adresse IP de VirtualBox, suivi par le numéro de port virtuel (8888), c'est à dire celle que nous avons trouvé tout à l'heure avec la commande "ipconfig".
Dans mon cas, j'entre donc comme adresse Internet:
http://192.168.56.1:8888/
  • Si votre navigateur vous dit qu'il n'atteint pas l'adresse, alors cherchez l'erreur:
    • Peut-être le navigateur passe-t-il par un proxy.
          Dans ce cas, il faut désactiver le proxy pour cette adresse IP. Voir le manuel du navigateur.
    • Ubuntu doit être en marche, dans VirtualBox.
          Peu importe qu'une session utilisateur soit ouverte ou non, il suffit qu'Ubuntu soit démarré.
Une fois que ça marche, le navigateur doit afficher une page Web toute simple contenant ce texte: "It works!".
  • Vous pouvez trouver le fichier html de cette page dans Ubuntu, à cet emplacement:
    /var/www

Ajout d'ASP.NET au serveur HTML Apache [ Linux ]

  • Installez les paquets d'ASP.NET à Ubuntu

Bien que ça ne soit pas indispensable à priori (mais j'ai déjà eu des blocages sinon), nous allons d'abord arrêter le serveur Apache, pour la durée de nos ajouts:

sudo /etc/init.d/apache2 stop
  • La console PuTTY a un gros avantage sur la fenêtre de VirtualBox: vous pouvez coller du texte en provenance de Windows.
    Un clic droit sur la fenêtre de PuTTY sert de commande Coller.
  • Si vous rencontrez l'erreur "Could not reliably determine.." lors de l'arrêt d'Apache, suivez la procédure vue précédemment.

Maintenant on installe les paquets nécessaires, dans Linux:
sudo aptitude install mono-common libapache2-mod-mono mono-apache-server2

  • Vous pouvez, au choix, installer tous les paquets en une seule commande, comme ci-dessus, ou bien les installer séparément.
À mon avis, les séparer est plus prudent parce que lorsqu'un problème se pose avec un des paquets, par exemple un nom mal orthographié, les paquets suivants seront installés alors qu'il leur manque peut-être des éléments du paquet précédent.
C'est tellement plus sûr, et suffisamment simple de taper plusieurs commandes:
sudo aptitude install mono-common
sudo aptitude install libapache2-mod-mono
sudo aptitude install mono-apache-server2

Si vous programmez en Visual Basic .Net, ajoutez le module VBNC:
sudo aptitude install mono-vbnc

On a maintenant Mono et son module ASP.NET 2 pour Apache installés.

  • Configurez ASP.NET / Mono

À ce moment, on a le choix entre le mode automatique, qui autorise l'exécution de tout programme ASP.NET dans le serveur, ou bien le mode manuel qui oblige à configurer chaque page contenant du code.
Ici, on va utiliser le mode automatique.

Une commande pour attacher le module Mono à Apache:
sudo a2enmod mod_mono_auto

On configure le module en mode ASP.NET version 2 (sinon on aura des problèmes):
sudo jed /etc/apache2/mods-available/mod_mono.conf
Si nécessaire, on modifie la ligne de configuration en ajoutant "2" en deux endroits, comme ceci:
Include /etc/mono-server2/mono-server2-hosts.conf

Enfin, on termine en relançant Apache:
sudo /etc/init.d/apache2 start

Pour plus de sûreté, allez dans Windows et testez à nouveau le serveur à partir du navigateur internet:
http://192.168.56.1:8888/
Il devrait continuer à nous envoyer son petit texte: "It works !".

Test d'une page ASP.NET [ Linux et Windows ]

  • Rédigez une page ASP.NET de test
Un petit test nous permet de vérifier qu'ASP.NET est bien fonctionnel.
Nous allons créer une page web dynamique toute simple dans un seul fichier texte:
sudo jed /var/www/test.aspx

  • Pour permettre le copier/coller entre Windows et Linux, qui n'est pas géré par VirtualBox en mode console, vous pouvez
    • utiliser SSH dans Windows, avec PuTTY (un clic-droit avec la souris pour coller du texte), ou bien
    • éditer directement le contenu du disque-dur du serveur avec WinSCP (qui comporte un éditeur de texte intégré, mais attention aux permissions Linux).
Code de la page (le texte à copier, tout simplement):
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>ASP Test Page</title>
  </head>
  <body>
        <form id="form1" runat="server">
          <asp:label id="lbl1" runat="server">ASP Test Page</asp:label>
        </form>
  </body>
</html>

Puis  allez dans Windows et  ouvrez le navigateur web, avec cette adresse:
http://192.168.56.1:8888/test.aspx

Vous devriez voir un texte et un bouton dont un clic recharge la page.

Correction de l'erreur "Server Error in '/' Application" [ Linux ]


  • Si nécessaire, faites cette correction

Si dans le test précèdent vous avez eu cette erreur, faites cette vérification:

Allez dans Linux émulé (ou dans une console Putty), et entrez:
cd /usr/bin
ls gmcs*
Cela liste les fichiers dont le nom commence par gmcs.
Si vous avez un fichier gmcs2, et pas de gmcs, alors vous pouvez créer un lien symbolique au nom de gmcs:
sudo ln -s /usr/bin/gmcs2 /usr/bin/gmcs

Essayez ensuite de recharger votre page aspx dans le navigateur Windows. Il est inutile de redémarrer Apache.

Téléchargement, installation et programmation sous Visual Studio Express 2012 pour le Web [ Windows ]

  • Installez Visual Studio Express 2012 pour le Web

Puisque cet article part du principe que vous avez des connaissances en programmation sous Windows, je me contente ici de vous fournir quelques adresses, au cas où vous n'auriez pas déjà installé les logiciels de programmation qui nous seront utiles.

Si vous n'avez pas Visual Studio en version Professionnelle (donc complète), vous pouvez utiliser Visual Studio Express pour le Web 2012, qui est gratuit et qui permet de programmer en C# des sites ASP.NET. À noter que cet IDE est complet, comprenant notamment un débogueur, un éditeur graphique de sites web, et un serveur local avec une base de données.

Voici un lien direct vers Visual Studio Express 2012 pour le Web:
https://www.microsoft.com/visualstudio/fra/downloads#d-express-web

Ou bien vous pouvez choisir les modules qui vous intéressent:
http://www.microsoft.com/express/Downloads/

Voici un lien direct vers Microsoft Visual Studio 2010 Express:
http://download.microsoft.com/download/f/8/9/f897c029-6a6e-4370-86c8-4bd9273cddcf/VS2010ExpressFRA.iso
C'est un paquet complet contenant plusieurs produits.

Si vous désirez travailler avec une ancienne version, ou en .Net 2, vous trouverez Microsoft Visual Studio 2008 Express avec SP1 ici:
http://www.microsoft.com/downloads/details.aspx?FamilyID=3254C868-BCB9-412C-95C6-D100C872EC60&displaylang=fr

Pour connaître les dernières versions des produits Visual Studio Express, voir ici:
http://www.microsoft.com/express/

Utilisation du serveur de bases de données PostgreSQL [ Windows ] Optionnel


  • Installez PostgreSQL dans Windows

Étant donné que sous Linux nous ne pourrons pas utiliser le serveur de bases de données de Microsoft, autant créer dès sous Windows un site qui fonctionne avec un serveur de bases de données multiplateformes: PostgreSQL.

  • PostgreSQL ? MySQL ? Firebird ? Ingres ? Autre ?
    À vous de voir.
    Ce qui nous importe ici, c'est:
    1. Que le serveur de BDD soit multiplateforme.
    2. Qu'il soit compatible à la fois avec Visual Studio et avec MonoDevelop/Mono.
Donc, je vous propose de télécharger et d'installer la version Windows de PostgreSQL:
http://www.postgresql.org/download/windows/

Test du site Web dans la machine virtuelle Linux

  • À vous de programmer !

Vous avez maintenant:

  1. Un environnement de programmation dans Windows pour créer des sites Web ASP.NET.
  2. Un serveur Ubuntu virtuel pour tester la compatibilité de votre site dans un environnement Mono/Linux.

Comme l'objet de cet article est simplement mettre en place ces deux éléments, je vous laisse le soin de réaliser vos sites Web et de les tester sous ces deux systèmes.

Une fois prêt, passez à l'étape suivante: mettre en place un serveur physique distant.

Utiliser un vrai serveur distant pour héberger notre site Web

Je vais détailler la création d'un serveur Web, car ça n'est pas toujours simple au départ, notamment la partie concernant le nom de domaine.

Location d'un serveur dédié Linux distant

  • Choisissez un hébergeur et un type de serveur

À moins de vouloir héberger votre site avec un serveur dans vos locaux, vous allez devoir louer les services d'un hébergeur Web.

  • Différentes formules classiques d'hébergement existent:
  • Colocation: Un serveur contient des dizaines ou des centaines de sites Web. Un seul Linux est installé, chaque client a un compte utilisateur normal (donc limité).
  • VPS (virtual private server): Toujours beaucoup de clients par machine, mais cette fois chacun bénéficie d'un Linux pour lui seul, car la machine fait tourner plusieurs systèmes d'exploitation en parallèle grâce à un système de virtualisation. Chaque client peut donc installer des logiciels, configurer son système. Seul le noyau est en commun entre tous. La liberté est bien plus grande, ainsi que la sécurité, mais les ressources sont toujours partagées.
  • Dédié: Ici, "une machine = un client". Vous êtes responsable de ce que vous faîtes avec votre machine. Vous seul gérez votre système, qui est à votre choix, exactement comme si vous aviez l'ordinateur chez vous.
Évidemment, les prix sont en fonction de la formule. Il est clair qu'une machine dédiée coûte nettement plus cher qu'une autre partagée avec des dizaines d'autres clients, mais le résultat n'est pas du tout le même, ni le risque.

Pour ce qui nous occupe dans cet article, nous sommes quasiment forcés de choisir un serveur dédié, car on ne trouve pas sur le marché de collocation acceptant l'ASP.NET. Du moins je n'en vois jamais (en 2009).De toute façon, un serveur dédié compense son prix un peu plus élevé par la richesse de ses possibilités.

Et puis, il existe aujourd'hui (2013) des serveurs dédiés pas chers, à partir de 10 € HT/mois. Ils peuvent être suffisants au moins pour faire des essais, voire pour mettre en place un site Web à petite fréquentation.
Pour plus de puissance, les prix sont plutôt de l'ordre de 100 à 300 €/mois.

Configuration du serveur

  • Louez un serveur dédié avec Ubuntu Server installé

La situation est un peu différente de notre serveur virtuel, car les hébergeurs de sites proposent des distributions Linux comportant des modifications. Pour des raisons de sécurité et de facilité d'emploi, on trouvera toujours une configuration particulière et des outils de gestion à distance qui dépendent des habitudes de votre hébergeur.

Toutefois, si vous savez installer et gérer votre propre serveur virtuel, vous allez vite retrouver vos marques sur votre serveur distant.

Ici, nous allons considérer que vous avez loué un serveur, et demandé l'installation de Ubuntu Server dessus.

  • Pourquoi Ubuntu server et pas un autre Unix ?
    Une chose me plait: c'est une distribution spécialisée pour les serveurs, ce qui améliore la sécurité et la légèreté du système.
    Ceci dit, vous êtes libres de choisir un autre Unix, la procédure devrait s'appliquer.

Mise à jour et installation

  • Mettez à jour votre serveur

Commencez par accèder à votre serveur distant par SSH, avec WinSCP et/ou PuTTY, grâce aux informations fournies par votre hébergeur de serveur (adresse IP de votre serveur, nom de compte root, mot de passe de ce compte).


Puis mettez à jour votre Linux:
  1. Mettre à jour la liste des paquets dans aptitude (synchroniser):
    sudo aptitude update
  2. Mettre à jour tous les paquets actuellement installés:
    sudo aptitude full-upgrade
  • Ajoutez les logiciels nécessaires

Puis vérifiez que nos logiciels indispensables sont installés:
aptitude install apache2 apache2-doc mysql-server
ou module par module:
aptitude install apache2
aptitude install apache2-doc
aptitude install mysql-server
  • Remarquez qu'avec le compte root, il est inutile d'ajouter sudo devant la commande, car on a déjà tous les droits.

Suivez la procédure du chapitre concernant le serveur virtuel pour installer l'ASP.NET pour Mono.

On installe aussi l'éditeur de textes (Jed) et l'explorateur de fichiers (Mc):
aptitude install jed mc

On en profite pour ordonner un petit redémarrage de la machine, histoire de faciliter sa mise à jour:
shutdown -r now
exit

Configuration d'un site Web avec nom de domaine

À ce stade, nous avons ouvert 3 accès à notre serveur dans Windows:
  • Webmin, par un navigateur Web.
  • WinSCP pour accéder aux fichiers.
  • PuTTY comme console distance.

Avec Webmin

  • Installez Webmin

Webmin est une sorte de serveur Web qui vous permettra de configurer votre serveur à distance au travers de pages Web.
En pratique, ça vous donne une interface graphique pour configurer tout ce qui concerne votre serveur. C'est bien plus pratique qu'avec une console.

Petit problème avec Webmin sous Ubuntu, ce paquet n'est plus soutenu par cette distribution, ce qui fait que son installation est plus compliquée que prévu.

On va ajouter un dépôt, ce qui permettra les mises à jour:
  1. On édite le fichier:
    sudo jed /etc/apt/sources.list
  2. On ajoute à la fin du texte:
    deb http://download.webmin.com/download/repository sarge contrib
  3. Puis on ferme Jed.
  4. On ajoute la clé validant cette source:
    wget http://www.webmin.com/jcameron-key.asc
    apt-key add jcameron-key.asc
    apt-get update
    aptitude update
    
  5. On installe Webmin:
    aptitude install webmin

  • Connectez-vous à Webmin [Windows]

Webmin étant maintenant à l'écoute des appels d'internet, vous pouvez ouvrir un navigateur web dans votre ordinateur local et entrer cette adresse:
https://l_adresse_IP_de_votre_serveur_distant:10000/

Votre navigateur va se plaindre que la connexion n'est pas certifiée, mais passez outre puisque vous avez confiance en votre propre serveur !  ;)
D'autre part, vous devez accepter les cookies et les javascripts de ce site.

Si tout marche bien, vous devriez voir la page d'accueil de votre page de configuration Webmin.

Dans le menu à gauche, la partie Webmin contient un sous-menu Change Language and Theme qui vous permettra de l'afficher en français.


Le contenu

  • Configurez puis copiez les fichiers de votre site Web vers le serveur, avec WinSCP.
  • Voici un exemple pour la notation qui suit:
    • adresse_ip_de_mon_serveur => 100.200.300.400
    • mon_nom_de_domaine_com => mysite_com
    • mon_nom_de_domaine.com => mysite.com
    • dns_de_mon_herbergeur.com => dns.myhosting.com
  • Je vous suggère de copier tout le texte qui suit dans un éditeur de texte (comme OpenOffice) et remplacer tous les noms génériques ici mentionnés par les vrais noms de votre serveur, et ainsi obtenir une notice avec les bons noms.

Sur votre serveur, par exemple avec WinSCP, créez un répertoire:
/var/www/mon_nom_de_domaine_com

Avec WinSCP, copier les fichiers de votre site Web vers le répertoire que vous avez créé (/var/www/mon_nom_de_domaine_com).

Dans Webmin [Windows], ouvrez la partie Serveurs puis Serveur Web Apache.
À droite, choisissez l'onglet Créer un hôte virtuel.
Entrer les informations de votre site Web et de son nom de domaine.

Revenir à la racine de la partie serveur Apache, et cliquer sur Appliquer les changements.

Dans l'éditeur de fichiers de Webmin (ou dans Putty), créez un fichier de configuration:
/etc/apache2/sites-available/mon_nom_de_domaine_com.conf

Et y mettre ceci:
<VirtualHost *:80>
ServerAdmin webadmin@mon_nom_de_domaine.com
ServerName mon_nom_de_domaine.com
ServerAlias *.mon_nom_de_domaine.com
DocumentRoot /var/www/mon_nom_de_domaine_com/
<Directory /var/www/mon_nom_de_domaine_com>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>

Configurer le nom de domaine avec Bind, sous Webmin

  • Configurez votre nom de domaine avec Bind
  • Attention:
    Dans Bind, lorsque vous entrez un nom (et non une adresse IP), comme "mon_serveur.mon_hebergeur.com",
    il faut impérativement ajouter un point à la fin du nom.
    Ça permet à Bind de différencier les noms des adresses.

1) Ouvrez Webmin.

  1. Choisissez l’onglet "Serveurs"
  2. Cliquez sur "Serveur de Noms de Domaine Bind"


2) Créez une nouvelle zone primaire.

  1. Cliquez sur "Créer une zone primaire"
  2. Dans "Nom de domaine / réseau" entrez : "mon_nom_de_domaine.com"
  3. Dans "Serveur primaire" entrez : "adresse_ip_de_mon_serveur"
  4. Dans "Adresse électronique" entrez : votre email pour contact admin de dns
    Attention au SPAM.
  5. Cliquez sur créer.


3) Bloc "Adresse".
Ce sont des renvois à partir de sous-domaines.

  1. Cliquez sur "Adresse" :
  2. Dans "Nom" entrez : "www"
  3. Dans "Adresse" entrez : "adresse_ip_de_mon_serveur"
  4. Cliquez sur créer
  5. Recommencez l’opération x fois en entrant dans nom :
  • "ftp" (si vous en avez besoin),
  • "mail",
  • "pop",
  • "smtp", etc...
  • et une fois en laissant "nom" vide.
  1. Une fois fini cliquez sur "Retourner à Type d’enregistrement".


4) Bloc "Serveur de nom".

  1. Cliquez sur "Serveur de nom"
  2. Dans "Nom de zone" : laissez vide
  3. Dans "Serveur de nom" entrez le dns primaire : "adresse_ip_de_mon_serveur"    -> Si c'est un nom, il faut mettre un point à la fin !
  4. Cliquez sur Créer
  1. Puis encore, dans "Nom de zone" : laissez vide.
  2. Dans "Serveur de nom" entrez le dns secondaire : "dns_de_mon_herbergeur.com." (en fait le serveur de noms de votre hébergeur de serveur)   -> un point à la fin !


Une fois fini cliquez sur "Retourner à aux Types des enregistrements"

5) Bloc "Serveur de courrier".

  • Cliquez sur "serveur de messagerie" :
  • Dans "Nom " : laissez vide
  • Dans "Serveur de courrier" entrez "mail.mon_nom_de_domaine.com." Ne pas oublier de mettre le "." à la fin.

NB : à condition d’avoir crée le sous domaine mail plus haut bien entendu.

-  Dans "Priorité" entrez : "10"
-  Cliquez sur créer
-  Une fois fini cliquez sur "Retourner à Type d’enregistrement"

6) Bind doit être à l'écoute de toute demande sur le port 53

Allez dans Serveurs / Bind / Adresses et topologie

"Ports et adresses sur lesquels écouter":
  • Adresses: any
  • Sauvegarder

Redémarrez Bind :

  1. En haut à droite, Appliquer La Configuration.
  2. En haut à droite, Arrêter Bind.
  3. En haut à droite, Démarrer Bind.
  • On peut aussi redémarrer Bind dans PuTTY:
    /etc/init.d/bind9 restart
  • Ajoutez votre nom de domaine l'adresse IP de votre serveur au serveur DNS de votre hébergeur de serveur

Cette procédure est spécifique à chaque hébergeur.
En général il s'agit d'aller dans son panneau de configuration Web du serveur, sur le site Web de l'hébergeur, et de modifier la section DNS,
et d'y ajouter l'adresse IP de notre serveur en tant que serveur DNS.

  • Vérifiez les réglages de Bind

On peut vérifier les réglages de Bind de bien des façons :


0) Vérification du DNS par des sites Web:

1) Avec les utilitaires de Bind (dans PuTTY):

  • named-checkconf /etc/bind/named.conf
  • named-checkzone mon_nom_de_domaine.com /var/lib/bind/mon_nom_de_domaine.com.hosts

1.1) on regarde les logiciels surveillant les ports ouverts sur le serveur:
sudo netstat -pateun | grep named

Si pour le port 53 le processus "named" écoute que "127.0.0.1", alors ce n'est pas bon car il n'écoute qu'en local.
Dans ce cas, revoir la procédure d'écoute de tout sur le port 53.

1.2) on liste les ports en activités:

  • nmap -p53 localhost
  • nmap -v localhost

  • Configurer le renvoi du nom de domaine

Maintenant qu'on est certain de votre serveur DNS est bien configuré, allez dans le panneau de configuration de votre fournisseur de nom de domaine, et configurez le renvoi de ce nom de domaine vers votre serveur DNS et votre serveur Web.
Le détail de cette procédure dépend de chaque fournisseur.
En principe on ajoute deux DNS: notre serveur et le DNS de notre hébergeur.

  • Attention:
    La diffusion dans Internet du changement de redirection de votre nom de domaine prend du temps, parfois plusieurs jours.
    Inutile donc de s'acharner à entrer votre nom de domaine dans votre navigateur Web, ça ne fonctionnera pas tout de suite.
    Pour vérifier que cette diffusion a atteint votre fournisseur Internet, vous pouvez lancer une analyse du chemin de redirection [dans Windows]:
    ipconfig /flushdns
    tracert nom_de_domaine.com

  • Faire quelques tests supplémentaires

Dans une console de commandes Windows, on entre les commandes:
nslookup
set debug
server 188.165.45.220
mon_nom_de_domaine.com
lookup mon_nom_de_domaine.com

Test de notre site Web

Bien sûr le meilleur test est d'entrer notre nom de domaine dans un navigateur Internet.

Sécuriser le serveur

Configurer le pare-feu, avec netfilter.
Il faudra que je pense à compléter cette section..  ;)

Sources externes - Plus d'informations



Un article très détaillé pour installer Ubuntu Server dans une machine virtuelle

Comme cet article est divisé en plusieurs pages éparpillées dans un blog, voici les liens directs:

Par contre, l'auteur utilise le logiciel serveur Lighttpd au lieu du classique Apache.
À noter qu'il existe une procédure pour installer Mono dans Lighttp, voir ici:
http://www.mono-project.com/FastCGI_Lighttpd

Autres articles

Installation d'Ubuntu dans VirtualBox (en anglais):
http://welltemperedstudio.wordpress.com/2009/01/24/378/

Installation et configuration du module Mono pour Apache, dans Ubuntu (en anglais):
https://help.ubuntu.com/community/ModMono?action=fullsearch&context=180&value=linkto%3A%22ModMono%22

Installation de Webmin sous Ubuntu serveur 12.04:
http://memo-linux.com/installation-de-webmin-sous-ubuntu-serveur-12-04/

Installation de Webmin dans Ubuntu:
http://doc.ubuntu-fr.org/webmin