Mono et le déploiement d’une application web .NET sous Linux (2/2)

Lors de la première partie de cet article, nous avons vu comment importer et compiler un projet .NET sous Linux grâce à Mono et son interface de développement, MonoDevelop.

Dans cette seconde partie, nous aborderons la migration d'une base de données Microsoft SQL Server (abrégée MS SQL) vers une base PostgreSQL, avant d'effectuer la mise en ligne du projet avec Apache le module adéquat, baptisé « mod_mono ».

Ces exemples permettront de tirer une conclusion ; non seulement sur l'intérêt de Mono, mais également sur la migration d'une application Web provenant d'un environnement Windows vers un environnement Linux.

Migration et adaptation de la base de données vers PostgreSQL

Le choix du SGBD de destination se porte sur PostgreSQL, un outil open-source et gratuit, bénéficiant notamment d'une bonne réputation pour ses performances. Cette partie s'effectuera en deux étapes, puisqu'il faudra dans un premier temps migrer la base, avant de connecter et adapter le projet au nouveau système.

La migration est une étape à part entière qui peut être effectuée grâce à des outils de type ETL, tels que Microsoft SQL Server Integration Services ou encore Talend. Le site de PostgreSQL propose de l'aide à ce sujet. Concrètement, voici par exemple comment convertir une date de type DateTime (MS SQL) vers une date de type Timestamp (PostgreSQL), via l'interface de gestion de MS SQL :

select convert(varchar,CAST (mytable.mydate as datetime), 120)

La seconde partie -la connexion du projet à la base de données est une étape critique, qui peut s'avérer être bloquante. En effet, si votre projet .NET se base sur le framework LINQ to SQL, vous serez dans l'obligation de revoir le système puisque LINQ to SQL n'est compatible qu'avec MS SQL.

Il est ici nécessaire d'utiliser un fournisseur de données dédié à PostgreSQL. Il existe par exemple Npgsql, qui est compatible avec Entity Framework, ou encore psqlODBC, plus ancien, et utilisable avec le type de données DataSet. Malheureusement, Npgsql n'intègre pas à l'heure actuelle de support pour l'assistant de création du « ADO.NET Data Entity Model ». L'acquisition des objets en base doit alors être faite « manuellement ». Par exemple, la fonction de connexion à la base (SQLConnect() pour SqlClient Data Provider) est alors NpgsqlConnection().

La liste des méthodes de connexion n'est pas exhaustive, tout comme celle de la traduction MS SQL vers PostreSQL. Cela résume le fait que cette étape est délicate et qu'une solution simple et efficace ne semble pas exister pour le moment.

Déploiement avec Apache

Jusqu'ici, nous faisions tourner l'application avec le serveur « standalone » de MonoDevelop. Dorénavant, nous allons voir comment utiliser un serveur indépendant tel qu'Apache.

Pour ce faire, il faudra installer le « mod_mono » pour Apache (paquets libapache2-mod-mono et mono-apache-server2). Le mod_mono se positionne comme l'équivalent du moteur ASP.NET, alors qu'Apache remplit le rôle de IIS.

Il reste maintenant à configurer Apache. Dans cet exemple, on créé tout d'abord un fichier .webapp pour les besoins du mod_mono. Par exemple : sudo gedit /etc/mono-server2/localhost.mono.webapp

<apps>
        <web-application>
                <name>MONO</name>
                <vpath>/</vpath>
                <path>/home/myuser/MonoProject</path>
                <vhost>localhost.mono</vhost>
        </web-application>
</apps>

Puis on créé un « vitual host » : sudo gedit /etc/apache2/sites-enabled/mono.conf

<VirtualHost 127.0.0.1:80>
	DocumentRoot	/home/myuser/MonoProject
	ServerName	localhost.mono
	<Directory /home/myuser/MonoProject/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		Allow from all
		SetHandler mono
		DirectoryIndex Default.aspx index.aspx index.html
	</Directory>
</VirtualHost>

On active ce dernier : sudo a2ensite mono.conf

Puis on redémarre Apache : sudo /etc/init.d/apache2 reload

Le site est désormais accessible indépendament de MonoDevelop : http://localhost.mono/

Conclusion

Cette seconde partie permet de mettre en avant les difficultés rencontrées avec la migration de la base de données. : une opération qui peut être chronophage, voire bloquante !

Comme cela avait été évoqué précédemment, l'abandon des services de Microsoft pour des outils gratuits et open-source doit se justifier clairement. L'intérêt de Mono s'illustrerait alors davantage pour diversifier la compatibilité d'un logiciel (originairement dédié à Windows) vers des systèmes d'exploitations tels que Linux ou MAC OS, plutôt que pour la migration d'une application Web.

L'utilisation de Mono dans le cadre du Web n'est pas non plus à enterrer, puisque d'autres projets concernant ce domaine sont à souligner, tel que Moonlight, le projet d'implémentation libre de Silverlight. En espérant que ces travaux en soient pas vains, puisque l'actualité récente au sujet des équipes de développement de Mono est quelque peu mouvementée. (voir cet article).

Site de Mono

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.