GNU/Linux >> Tutoriales Linux >  >> Linux

Publicación de un sitio web ASP.NET Core en un host de máquina virtual Linux económico

Una pequeña máquina virtual Linux en Azure cuesta como $13 al mes. Puede obtener pequeñas máquinas Linux por entre $ 10 y $ 15 por mes. En Linode, cuestan alrededor de $ 10 por mes, así que pensé que sería interesante configurar un sitio web ASP.NET Core que se ejecute en .NET Core. Como sabrá, .NET Core es gratuito, de código abierto, multiplataforma y se ejecuta básicamente en todas partes.

Paso 0 - Consigue un host económico

Fui a Linode (oa cualquier parte) y obtuve la máquina Linux más barata que ofrecían. En este caso se trata de un perfil Ubuntu 14.04 LTS, 64 bits, 4.6.5 Kernel.

Como estoy en Windows pero quiero SSH en esta máquina Linux, necesitaré un cliente SSH. Hay un montón de opciones.

  • Si tiene la versión más reciente de Windows 10, puede utilice el shell de Bash/Ubuntu que está integrado en el mismo Windows . Eso fue lo que hice. Ejecuté bash, luego ssh.
  • Puede descargar OpenSSH para Windows. Este es el que el equipo de Windows/PowerShell trae a Windows. Es un puerto win32 de OpenSSH.
  • SmarTTY:mejor que Putty, este es un cliente SSH gratuito con varias pestañas que también admite la copia de archivos.
  • Putty o Bitvise:ambos son gratuitos y funcionan bien

Paso 0.5:configure un usuario que no sea root

Siempre es una buena idea evitar ser root. Después de iniciar sesión en el sistema como root, creé un nuevo usuario y le di sudo (superusuario do):

adduser scott
usermod -aG sudo scott

Luego me cerraré la sesión y volveré a entrar como scott.

Paso 1:obtenga .NET Core en su máquina Linux

Dirígete a http://dot.net para obtener .NET Core y sigue las instrucciones. Hay al menos 8 Linux compatibles en 6 sabores, por lo que no debería tener problemas. Seguí las instrucciones de Ubuntu.

Para asegurarse de que funciona después de configurarlo, cree una aplicación de consola rápida como esta y ejecútela.

mkdir testapp
cd testapp
dotnet new
dotnet restore
dotnet run

Si se ejecuta, entonces tiene .NET Core instalado y puede pasar a crear una aplicación web y exponerla a Internet.

NOTA: Si la "restauración de dotnet" falla con una falla de segmentación, es posible que tenga este problema con algunos kernels de Linux de 64 bits. Aquí hay comandos para solucionarlo que me funcionaron en Ubuntu 14.04 cuando presioné esto. La corrección se lanzó como NuGet ahora, pero se incluirá con la próxima versión menor de .NET Core, pero si alguna vez necesita actualizar CoreCLR manualmente, puede hacerlo.

Paso 2:Cree un sitio web ASP.NET Core

Puede crear un sitio web de ASP.NET Core que sea muy básico y muy vacío y eso está bien. También puede obtener Yeoman y usar los generadores basados ​​en Yeoman de ASP.NET para obtener más opciones. También está el gran proyecto ASP.NET MVC Boilerplate para Visual Studio.

O simplemente puede comenzar con:

dotnet new -t web

Actualmente, este sitio predeterminado usa npm, gulp y bower para administrar las dependencias de JavaScript y CSS. En el futuro, habrá opciones que no requieran tanto material adicional, pero por ahora, para restaurar este sitio con dotnet, necesitaré npm y otras cosas, así que haré esto para obtener el nodo, npm, etc.

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

Ahora puedo restaurar dotnet fácilmente y ejecutar mi aplicación web para probar. Normalmente se iniciará en 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

Por supuesto, tener algo de inicio en localhost:5000 no me ayuda porque estoy aquí en casa, así que no puedo probar un sitio web local como este. Quiero exponer este sitio (a través de un puerto) al mundo exterior. Quiero algo como http://mysupermachine -> dentro de mi máquina -> localhost:5000.

Paso 3:exponga su aplicación web al exterior.

Yo podría decirle a Kestrel, que es el servidor web .NET, que se exponga al puerto 80, aunque normalmente quiere tener otro proceso entre usted y el mundo exterior.

Puedes hacer esto de varias maneras . Puede abrir Program.cs con un editor como "pico" y agregar una llamada .UseUrls() a WebHostBuilder de esta manera.

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

Aquí el * se une a todos los adaptadores de red y escucha en el puerto 80. Poner http://0.0.0.0:80 también funciona.

Es posible que tenga problemas de permisos al hacer esto y necesite elevar el proceso dotnet y el servidor web, lo que también es un problema, así que manténgalo en un puerto interno alto y proxy inverso el tráfico con algo como Nginx o Apache. Extraeremos el puerto codificado del código y cambiaremos Program.cs para usar un archivo de configuración .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();
}

El archivo hosting.json es solo esto:

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

También podemos usar "AddCommandLine(args) en lugar de "AddJsonFile()" y pasar --server.urls=http://*:5123 en la línea de comando. Depende de usted. También puede usar la variable de entorno ASPNETCORE_URLS .

NOTA:estoy haciendo este trabajo en una carpeta debajo de mi carpeta de inicio ~ o ahora. Más tarde compilaré y "publicaré" este sitio web en algo como /var/dotnettest cuando quiera que se vea.

Paso 4:configure un proxy inverso como Nginx

Estoy siguiendo las instrucciones detalladas en el sitio ASP.NET Core Docs llamado "Publicar en un entorno de producción de Linux". (Todos los documentos también están en GitHub)

Voy a traer Nginx y comenzarlo.

sudo apt-get install nginx
sudo service nginx start

Voy a cambiar el sitio Nginx predeterminado para que apunte a mi (futura) aplicación web ASP.NET Core en ejecución. Abriré y cambiaré /etc/nginx/sites-disponible/default y haré que se vea así. Anote el número de puerto. Nginx es MUCHO más complejo que esto y tiene muchos matices, así que cuando esté listo para pasar a la producción súper oficial, asegúrese de explorar cómo se ve el archivo de configuración de Nginx perfecto y cámbielo según sus necesidades.

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;
}
}

Luego lo revisaremos y recargaremos la configuración.

sudo nginx -t 
sudo nginx -s reload

Paso 5:mantenga su sitio web en funcionamiento

El sitio web aún no está funcionando en localhost:5123 (a menos que lo haya ejecutado usted mismo y lo haya mantenido en funcionamiento), por lo que necesitaremos una aplicación o un monitor para ejecutarlo y mantenerlo en funcionamiento. Hay una aplicación llamada Supervisor que es buena para eso, así que la agregaré.

sudo apt-get install supervisor

Aquí es donde usted/nosotros/yo/errbody necesita obtener las rutas y los nombres correctos, así que tenga cuidado. Estoy en ~/testapp o algo así. Necesito publicar mi sitio en una ubicación final, así que voy a ejecutar dotnet Publish, luego copiar los resultados en /var/dotnettest donde vivirá.

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

Ahora voy a crear un archivo (nuevamente, uso pico porque no soy tan increíble como emacs o vim) llamado /src/supervisor/conf.d/dotnettest.conf para iniciar mi aplicación y mantenerla funcionando:

[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

¡Ahora iniciamos y detenemos Supervisor y miramos/seguimos sus registros para ver el inicio de nuestra aplicación!

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 todo salió bien (si no fue así, será un nombre o una ruta, ¡así que siga intentándolo!), Verá el registro del supervisor con dotnet iniciándose y ejecutando su aplicación.

Recuerda las relaciones.

  • Dotnet:ejecuta su sitio web
  • Nginx o Apache:escucha en el puerto 80 y reenvía llamadas HTTP a su sitio web
  • Supervisor:mantiene su aplicación en funcionamiento

A continuación, es posible que desee configurar una compilación de integración continua o SCP/SFTP para manejar la implementación de mi aplicación. De esa manera puedo desarrollar localmente y subir a mi máquina Linux.

Por supuesto, hay una docena de otras formas de publicar un sitio ASP.NET Core, sin mencionar Docker. Publicaré sobre Docker en otro momento, pero por ahora, pude publicar mi sitio web ASP.NET Core en un host económico de $ 10 en menos de una hora. Puede usar las mismas herramientas para administrar un sitio .NET Core que usa para administrar cualquier sitio, ya sea PHP, nodejs, Ruby o lo que sea que lo haga feliz.

Patrocinador: Aspose crea API de programación para trabajar con archivos, como:DOC, XLS, PPT, PDF y muchos más. Los desarrolladores pueden usar sus productos para crear, convertir, modificar o administrar archivos de casi cualquier forma. Aspose es una buena empresa y ofrece productos sólidos. Échales un vistazo y descarga una evaluación gratuita.


Linux
  1. C# en entorno linux

  2. Visual Basic .Net en Linux

  3. Ejecución de una aplicación ASP.NET Core autónoma en Ubuntu

  4. Cómo escribir un demonio de Linux con .Net Core

  5. NuGet para .NET Core en Linux

Cómo cambiar la versión de ASP.NET en su sitio web

Exploración de ASP.NET Core con Docker en contenedores de Linux y Windows

Publicación de una aplicación ASP.NET 5 en Docker en Linux con Visual Studio

Mover un ASP.NET Core de Azure App Service en Windows a Linux probando primero en WSL y Docker

Probar .NET Core en Linux con solo un tarball (sin apt-get)

Cómo instalar (.NET Core) Dotnet Core en distribuciones de Linux