Skip to main content

Bringing together DotNet Core, Nginx and Supervisor on a linux server

We going to look at a simple tutorial on how to have your .net core site run on a linux server and make use of supervisor to start up and monitor the site. First we going to assume you have supervisor installed on the box, with nginx already running.

Configure supervisor

  1. firstly browse to the folder /etc/supervisor/conf.d
  2. Inside this folder create a .conf file for example dotnettest.conf
  3. Open the dotnettest.conf and insert the following lines

[program:dotnettest]
command=/usr/bin/dotnet  /home/testapp/bin/Debug/netcoreapp2.2/publish/testapp.dll
directory=/home/testapp/bin/Debug/netcoreapp2.2/publish/
autostart=true
autorestart=true
stderr_logfile=/var/log/dotnettest.err.log
stdout_logfile=/var/log/dotnettest.out.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT



For the explanation of the above
  • you specify the name of your site by placing "program:" in front of it
  • command you use to specify that you want dotnet which is located in /usr/bin/dotnet of your server to run your application and you provide the full path to your application's dll, in my case it is "/home/testapp/bin/Debug/netcoreapp2.2/publish/testapp.dll"
  • directory is used to specify the directory folder of your application
every thing else is more or less standard

Configure Nginx

  1. browse to /etc/nginx/sites-available
  2. Open the file default
  3. Scroll down to the section just below "# Default server configuration" 
  4. Edit it so it looks like below


server {
    listen        80;
listen [::]:80;
   # server_name   example.com *.example.com;
    location / {
        proxy_pass         http://localhost:5000;
        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;
        #proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        #proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

The most important thing from the above is the proxy_pass section. In this part you tell nginx to point to the localhost port in which your site is running under. In my case it it localhost:5000

and thus basically it.

restart start supervisor
service supervisor restart
To check the status of supervisor

service supervisor status

Comments

Post a Comment

Popular posts from this blog

Messaging through a service Bus using MassTansit with Asp.Net Core 2.2 tutorial

Today we going to look at a quick tutorial on how to use MassTransit as a messaging bus for your Asp.Net core 2.2 application. I have uploaded the sample project on GitHub , if you want to follow along Spin up new project To begin spin up a new Api project, I am using Visual Studio 2019, I also added 2 nuget packages listed below.     <PackageReference Include="MassTransit.AspNetCore" Version="5.5.5" />     <PackageReference Include="MassTransit.RabbitMQ" Version="5.5.5" /> Startup.cs  In your Startup.cs file public void ConfigureServices(IServiceCollection services)         {             //Register your message consumer             services.AddScoped<OrderConsumer>();             // Register MassTransit             services.AddMassTransit(x =>             {                 x.AddConsumer<OrderConsumer>();                 x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>

Adding File logging into .net Core 2.0 application

Will be making use of Serilog to log for our application. To get started we need the following Nuget packages. Serilog.AspNetCore Serilog.Settings.Configuration Serilog.Sinks.Console Serilog.Sinks.RollingFile StartUp.cs using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Serilog; namespace MyBlog {     public class Startup     {         public Startup(IConfiguration configuration)         {             Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(configuration).CreateLogger(); // <-- add for logging             Configuration = configuration;         }         public IConfiguration Configuration { get; }         public void ConfigureServices(IServiceCollection services)         {             services.AddLogging(loggingBuilder => loggingBuilder.AddSerilog(dispose: true)); //<