IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Blog de Hinault Romaric (.NET Core, ASP.NET Core, Azure, DevOps)

[Actualité] Déploiement d'une application ASP.NET Core sous Linux en utilisant Nginx comme reverse proxy

Note : 3 votes pour une moyenne de 3,67.
par , 18/02/2017 à 03h33 (13926 Affichages)
Kestrel offre de bonnes performances pour le rendu du contenu dynamique. Mais, c’est un serveur démuni de nombreuses fonctionnalités. Il est essentiellement dédié au développement.


Dans un environnement de production, il doit être couplé avec d’autres serveurs dont IIS, ou Nginx, qui apporteront des fonctionnalités additionnelles. Dans notre cas, nous allons configurer Nginx pour utiliser ce dernier comme reverse proxy, afin d’offrir des fonctionnalités supplémentaires comme le rendu du contenu statique, la mise en cache ou encore la compression des requêtes.

Installation de Nginx

Nous allons commencer par installer le serveur Nginx. Ouvrez le terminal et exécutez la commande suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
sudo apt-get install nginx
Cela fait, vous allez démarrer Nginx en exécutant la commande suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
sudo service nginx start
Configuration de Nginx

Vous devez maintenant configurer Nginx pour qu’il agisse comme reverse proxy pour Kestrel. Nous voulons qu’à chaque requête sur le port 80, Nginx redirige le trafic vers le port 5050 qui sera celui utilisé par notre application.

Pour y parvenir, nous devons éditer le fichier /etc/nginx/sites-available/default . Ouvrez ce dernier en utilisant la commande :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
sudo -i gedit /etc/nginx/sites-available/default
Changez son contenu par le suivant et enregistrez :

Code json : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
location / {
proxy_pass http://localhost:5050;
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;
}
}

Exécutez les deux commandes suivantes pour vous rassurer que le fichier de config est correct et procéder au chargement de ce dernier :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
sudo nginx -t
sudo nginx -s reload
Les projets ASP.NET Core sont configurés pour utiliser par défaut le port 5000. Comme nous souhaitons utiliser le port 5050 pour notre application, nous allons donc apporter quelques modifications à notre application pour prendre cela en compte.

Vous allez dans un premier temps ajouter un nouveau fichier hosting.json à votre projet, avec le contenu suivant :

{
"server.urls": "http://localhost:5050"
}

Éditez ensuite le fichier Program.cs pour prendre en compte le fichier hosting.json. Vous devez l’ajouter au ConfigurationBuilder.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.AddCommandLine(args)
.AddEnvironmentVariables(prefix: "ASPNETCORE_")
.Build();
Vous devez intégrer le fichier hosting.json dans le package de déploiement de votre application. Pour cela, vous devez éditer le fichier project.json et ajouter hosting.json dans publishOptions :

Code json : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
"publishOptions": {
"include": [
"wwwroot",
"Views",
"Areas/**/Views",
"appsettings.json",
"web.config",
"hosting.json"
]
},

Compilez à nouveau votre application et procédez à son exécution :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Dotnet build
Dotnet run
Ouvrez votre navigateur et saisissez http://localhost/ pour lancer votre application. Cette dernière devrait s'afficher dans votre navigateur.

Publication de l’application et configuration du superviseur

A ce stade, pour accéder à l’application depuis le navigateur, vous devez au préalable exécuter la commande dotnet run. De plus, nous n’avons pas publié l’application dans son répertoire de destination.

Pour la suite, nous allons publier notre application et configurer l’outil supervisor. Il s’agit d’un système de contrôle de processus qui va permettre de lancer l’application et maintenir cette dernière en exécution.

Pour commencer vous allez publier l’application :

dotnet publish

Après l’exécution de cette commande, vous obtenez le répertoire dans lequel l’application a été publiée :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
publish: Published to /home/hinault/projects/SampleApp/bin/Debug/netcoreapp1.0/publish

Vous devez ensuite copier cette dernière dans son répertoire de destination (/var/www/sampleapp) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
sudo cp -a /home/hinault/projects/SampleApp/bin/Debug/netcoreapp1.0/publish /var/www/sampleapp
Cela fait, vous devez installer supervisor en utilisant la commande suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
sudo apt-get install supervisor
Ensuite, vous devez créer un nouveau fichier de configuration (sampleapp.conf) dans le dossier src/supervisor/conf.d/ avec le contenu suivant, pour permettre à supervisor de lancer votre application :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
[program:sampleapp]
command=/usr/bin/dotnet /var/www/sampleapp/SampleApp.dll
directory=/var/www/sampleapp/
autostart=true
autorestart=true
stderr_logfile=/var/log/sampleapp.err.log
stdout_logfile=/var/log/sampleapp.out.log
environment=HOME=/var/www/,ASPNETCORE_ENVIRONMENT=Production
user=www-data
stopsignal=INT
stopasgroup=true
killasgroup=true
Pour finir, vous devez exécuter les deux commandes suivantes pour arrêter et relancer supervisor :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
sudo service supervisor stop
sudo service supervisor start
Vous venez de déployer votre application et elle est désormais disponible en tout temps.

Envoyer le billet « Déploiement d'une application ASP.NET Core sous Linux en utilisant Nginx comme reverse proxy » dans le blog Viadeo Envoyer le billet « Déploiement d'une application ASP.NET Core sous Linux en utilisant Nginx comme reverse proxy » dans le blog Twitter Envoyer le billet « Déploiement d'une application ASP.NET Core sous Linux en utilisant Nginx comme reverse proxy » dans le blog Google Envoyer le billet « Déploiement d'une application ASP.NET Core sous Linux en utilisant Nginx comme reverse proxy » dans le blog Facebook Envoyer le billet « Déploiement d'une application ASP.NET Core sous Linux en utilisant Nginx comme reverse proxy » dans le blog Digg Envoyer le billet « Déploiement d'une application ASP.NET Core sous Linux en utilisant Nginx comme reverse proxy » dans le blog Delicious Envoyer le billet « Déploiement d'une application ASP.NET Core sous Linux en utilisant Nginx comme reverse proxy » dans le blog MySpace Envoyer le billet « Déploiement d'une application ASP.NET Core sous Linux en utilisant Nginx comme reverse proxy » dans le blog Yahoo

Mis à jour 25/02/2017 à 16h58 par Hinault Romaric

Catégories
DotNET , C# , ASP.NET , .NET Core , ASP.NET Core

Commentaires

  1. Avatar de François DORIN
    • |
    • permalink
    Merci pour l'article
    Juste une petite coquille, qui fait qu'une balise code ne passe pas : [CODE-json]
  2. Avatar de Hinault Romaric
    • |
    • permalink
    Citation Envoyé par François DORIN
    Merci pour l'article
    Juste une petite coquille, qui fait qu'une balise code ne passe pas : [CODE-json]
    C'est corrigé, merci .