GNU/Linux >> Tutoriels Linux >  >> Linux

Publication d'un site Web ASP.NET Core sur un hôte de machine virtuelle Linux bon marché

Une petite machine virtuelle Linux sur Azure coûte environ 13 $ par mois. Vous pouvez obtenir de petites machines Linux partout pour entre 10 et 15 $ par mois. Sur Linode, ils coûtent environ 10 $ par mois, j'ai donc pensé qu'il serait intéressant de configurer un site Web ASP.NET Core fonctionnant sur .NET Core. Comme vous le savez peut-être, .NET Core est gratuit, open source, multiplateforme et fonctionne pratiquement partout.

Étape 0 - Obtenez un hébergeur pas cher

Je suis allé à Linode (ou n'importe où) et j'ai obtenu la machine Linux la moins chère qu'ils proposaient. Dans ce cas, il s'agit d'un profil Ubuntu 14.04 LTS, 64 bits, noyau 4.6.5.

Comme je suis sous Windows mais que je veux me connecter en SSH à cette machine Linux, j'aurai besoin d'un client SSH. Il y a un tas d'options.

  • Si vous disposez de la dernière version de Windows 10, vous pouvez simplement utiliser le shell Bash/Ubuntu qui est intégré à Windows lui-même . C'est ce que j'ai fait. J'ai exécuté bash, puis ssh.
  • Vous pouvez télécharger OpenSSH pour Windows. C'est celui que l'équipe Windows/PowerShell apporte à Windows. C'est un port win32 d'OpenSSH.
  • SmarTTY - Plus agréable que Putty, il s'agit d'un client SSH gratuit à plusieurs onglets qui prend également en charge la copie de fichiers
  • Putty ou Bitvise :les deux sont gratuits et fonctionnent parfaitement

Étape 0.5 - Configurer un utilisateur qui n'est pas root

C'est toujours une bonne idée d'éviter d'être root. Après m'être connecté au système en tant que root, j'ai créé un nouvel utilisateur et lui ai donné sudo (super utilisateur do) :

adduser scott
usermod -aG sudo scott

Ensuite, je me déconnecterai et je reviendrai en tant que Scott.

Étape 1 : Obtenez .NET Core sur votre machine Linux

Rendez-vous sur http://dot.net pour obtenir .NET Core et suivez les instructions. Il y a au moins 8 Linux pris en charge dans 6 saveurs, vous ne devriez donc pas avoir de problème. J'ai suivi les instructions d'Ubuntu.

Pour vous assurer qu'il fonctionne après l'avoir configuré, créez une application de console rapide comme celle-ci et exécutez-la.

mkdir testapp
cd testapp
dotnet new
dotnet restore
dotnet run

S'il fonctionne, vous avez installé .NET Core et vous pouvez passer à la création d'une application Web et l'exposer à Internet.

REMARQUE : Si la "restauration dotnet" échoue avec une erreur de segmentation, vous pouvez rencontrer ce problème avec certains noyaux Linux 64 bits. Voici les commandes pour le réparer qui ont fonctionné pour moi sur Ubuntu 14.04 lorsque j'ai frappé ceci. Le correctif a été publié en tant que NuGet maintenant, mais il sera inclus dans la prochaine version mineure de .NET Core, mais si vous avez besoin de mettre à jour manuellement le CoreCLR, vous le pouvez.

Étape 2 - Créer un site Web ASP.NET Core

Vous pouvez créer un site Web ASP.NET Core très basique et très vide et c'est OK. Vous pouvez également obtenir Yeoman et utiliser les générateurs basés sur yeoman ASP.NET pour obtenir plus de choix. Il y a aussi le grand projet ASP.NET MVC Boilerplate pour Visual Studio.

Ou vous pouvez simplement commencer par :

dotnet new -t web

Aujourd'hui, ce site par défaut utilise npm, gulp et bower pour gérer les dépendances JavaScript et CSS. À l'avenir, il y aura des options qui ne nécessiteront pas autant de choses supplémentaires, mais pour l'instant, afin de restaurer ce site dotnet, j'aurai besoin de npm et ainsi de suite, je le ferai pour obtenir node, npm, etc.

sudo apt-get install npm
sudo npm install gulp
sudo npm install bower

Maintenant, je peux facilement restaurer dotnet et exécuter mon application Web pour tester. Il démarrera généralement sur localhost :5000.

$ dotnet restore
$ dotnet run
scott@ubuntu:~/dotnettest$ dotnet run
Project dotnettest (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[0]
User profile is available. Using '/home/scott/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
Hosting environment: Production
Content root path: /home/scott/dotnettest
Now listening on: http://localhost:5000

Bien sûr, avoir quelque chose de démarrage sur localhost:5000 ne m'aide pas car je suis ici à la maison, donc je ne peux pas tester un site Web local comme celui-ci. Je veux exposer ce site (via un port) au monde extérieur. Je veux quelque chose comme http://mysupermachine -> à l'intérieur de ma machine -> localhost:5000.

Étape 3 :Exposez votre application Web à l'extérieur.

Je pourrais dites à Kestrel - c'est le serveur Web .NET - de s'exposer au port 80, bien que vous habituellement voulez avoir un autre processus entre vous et le monde extérieur.

Vous pouvez le faire de quelques manières . Vous pouvez ouvrir Program.cs ouvert avec un éditeur comme "pico" et ajouter un appel .UseUrls() au WebHostBuilder comme ceci.

var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://*:80")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();

Ici, le * se lie à tous les adaptateurs réseau et écoute sur le port 80. Mettre http://0.0.0.0:80 fonctionne également.

Vous pourriez avoir des problèmes d'autorisation et avoir besoin d'élever le processus dotnet et le serveur Web, ce qui est également un problème, alors gardons-le simplement à un port interne élevé et proxy inverse le trafic avec quelque chose comme Nginx ou Apache. Nous allons extraire le port codé en dur du code et modifier le Program.cs pour utiliser un fichier de configuration .json.

public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.Build();

var host = new WebHostBuilder()
.UseKestrel()
.UseConfiguration(config)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();

host.Run();
}

Le fichier hosting.json est simplement ceci :

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

Nous pouvons également utiliser "AddCommandLine(args) au lieu de "AddJsonFile()" et passer --server.urls=http://*:5123 sur la ligne de commande. C'est à vous de décider. Vous pouvez également utiliser la variable d'environnement ASPNETCORE_URLS .

REMARQUE :Je fais ce travail dans un dossier sous mon dossier personnel ~ ou maintenant. Je compilerai et "publierai" plus tard ce site Web sur quelque chose comme /var/dotnettest quand je veux qu'il soit vu.

Étape 4 - Configurer un proxy inverse comme Nginx

Je suis les instructions détaillées sur le site ASP.NET Core Docs appelé "Publier dans un environnement de production Linux". (Tous les documents sont également sur GitHub)

Je vais faire venir Nginx et le démarrer.

sudo apt-get install nginx
sudo service nginx start

Je vais changer le site Nginx par défaut pour qu'il pointe vers ma (future) application Web ASP.NET Core en cours d'exécution. Je vais ouvrir et modifier /etc/nginx/sites-available/default et le faire ressembler à ceci. Notez le numéro de port. Nginx est BEAUCOUP plus complexe que cela et a beaucoup de nuances, donc lorsque vous êtes prêt à passer à la production super officielle, assurez-vous d'explorer à quoi ressemble le fichier de configuration Nginx parfait et modifiez-le selon vos besoins.

server {
listen 80;
location / {
proxy_pass http://localhost:5123;
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;
}
}

Ensuite, nous le vérifierons et rechargerons la configuration.

sudo nginx -t 
sudo nginx -s reload

Étape 5 - Gardez votre site Web opérationnel

Le site Web n'est pas encore opérationnel sur localhost:5123 (à moins que vous ne l'ayez exécuté vous-même et que vous l'ayez maintenu en cours d'exécution !), nous aurons donc besoin d'une application ou d'un moniteur pour l'exécuter et le faire fonctionner. Il y a une application appelée Supervisor qui est bonne à ça, donc je vais l'ajouter.

sudo apt-get install supervisor

C'est ici que vous/nous/moi/errbody avons besoin d'obtenir les chemins et les noms corrects, alors soyez conscient. Je suis dans ~/testapp ou quelque chose comme ça. J'ai besoin de publier mon site dans un emplacement final, je vais donc exécuter la publication dotnet, puis copier les résultats dans /var/dotnettest où il vivra.

dotnet publish
publish: Published to /home/scott/dotnettest/bin/Debug/netcoreapp1.0/publish
sudo cp -a /home/scott/dotnettest/bin/Debug/netcoreapp1.0/publish /var/dotnettest

Maintenant, je vais créer un fichier (encore une fois, j'utilise pico parce que je ne suis pas aussi génial qu'emacs ou vim) appelé /src/supervisor/conf.d/dotnettest.conf pour démarrer mon application et la faire fonctionner :

[program:dotnettest]
command=/usr/bin/dotnet /var/dotnettest/dotnettest.dll --server.urls:http://*:5123
directory=/var/dotnettest/
autostart=true
autorestart=true
stderr_logfile=/var/log/dotnettest.err.log
stdout_logfile=/var/log/dotnettest.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=www-data
stopsignal=INT

Maintenant, nous démarrons et arrêtons Supervisor et regardons/suivons ses journaux pour voir le démarrage de notre application !

sudo service supervisor stop
sudo service supervisor start
sudo tail -f /var/log/supervisor/supervisord.log
#and the application logs if you like
sudo tail -f /var/log/dotnettest.out.log

Si tout a fonctionné (si ce n'est pas le cas, ce sera un nom ou un chemin, alors continuez d'essayer !), vous verrez le journal du superviseur avec le démarrage de dotnet, exécutant votre application.

Souvenez-vous des relations.

  • Dotnet :gère votre site Web
  • Nginx ou Apache :écoute sur le port 80 et transfère les appels HTTP vers votre site Web
  • Superviseur – Assure le fonctionnement de votre application

Ensuite, je souhaiterai peut-être configurer une version d'intégration continue ou SCP/SFTP pour gérer le déploiement de mon application. De cette façon, je peux développer localement et pousser jusqu'à ma machine Linux.

Bien sûr, il existe une douzaine d'autres façons de publier un site ASP.NET Core, sans parler de Docker. Je publierai sur Docker une autre fois, mais pour l'instant, j'ai pu publier mon site Web ASP.NET Core sur un hôte bon marché à 10 $ en moins d'une heure. Vous pouvez utiliser les mêmes outils pour gérer un site .NET Core que vous utilisez pour gérer n'importe quel site, que ce soit PHP, nodejs, Ruby ou tout ce qui vous rend heureux.

Parrain : Aspose crée des API de programmation pour travailler avec des fichiers, tels que :DOC, XLS, PPT, PDF et d'innombrables autres. Les développeurs peuvent utiliser leurs produits pour créer, convertir, modifier ou gérer des fichiers de presque n'importe quelle manière. Aspose est une bonne entreprise et propose des produits solides. Découvrez-les et téléchargez une évaluation gratuite.


Linux
  1. Exécuter ASP.NET Core sur l'hébergement Linux partagé le moins cher de GoDaddy - N'essayez pas ceci à la maison

  2. C# dans un environnement Linux

  3. Visual Basic .Net sous Linux

  4. Comment supprimer les versions précédentes de .NET Core de Linux (CentOS 7.1)

  5. Comment écrire un démon Linux avec .Net Core

Comment changer la version ASP.NET sur votre site Web

Explorer ASP.NET Core avec Docker dans les conteneurs Linux et Windows

Publication d'une application ASP.NET 5 sur Docker sous Linux avec Visual Studio

Déplacement d'un ASP.NET Core d'Azure App Service sur Windows vers Linux en testant d'abord dans WSL et Docker

Essayer .NET Core sur Linux avec juste une archive tar (sans apt-get)

Comment installer (.NET Core) Dotnet Core sur les distributions Linux