Asp.Net Core部署CentOS 7+Supervisor+Nginx

How to Deploy a .NET Core Web Application on CentOS 7

.NET Core is a redesigned open source cross-platform development framework maintained by Microsoft and the ever-growing .NET community. With the help of .NET Core, developers can easily build modern high-performance applications on all kinds of platforms.

In this article, I will show you how to install .NET Core on a CentOS 7 server instance and then deploy a full functional .NET Core web application.

Prerequisites

· A fresh Vultr CentOS 7 x64 server instance. Say its IP address is 203.0.113.1.

· sudo user.

· The server instance has been updated to the latest stable status using the EPEL YUM repo.

Add the .NET product feed to the system

As a cross-platform development framework, .NET Core provides pre-compiled binaries for various operating systems. On CentOS 7, you can setup an officially signed .NET YUM repo by running the following commands as a sudo user:

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

sudo sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'

Install the latest .NET SDK using YUM

Having the .NET YUM repo in place, install the latest .NET SDK, including .NET Core and other dependencies, on your machine:

sudo yum update -y

sudo yum install libunwind libicu -y

sudo yum install dotnet-sdk-2.1.4 -y

In order to confirm the result, you can create and run a "Hello World" demo .NET Core app:

cd

dotnet new console -o helloworldApp

cd helloworldApp

dotnet run

The dotnet new console -o helloworldApp command will create a directory named helloworldApp in your home directory and then use the console template to generate app files in the newly created directory.

Upon executing the dotnet run command, you will see the Hello World! message in the console.

Create a .NET Core web app

Now, create and run a .NET Core application of type razor. Just remember that "Razor Pages" is a new application template of .NET Core MVC that is designed for page-oriented scenarios:

cd

dotnet new razor -o myfirstwebapp

cd myfirstwebapp

dotnet run

By executing the dotnet run command above, you will start a .NET Core web app listening on: http://localhost:5000.

If you want to confirm that the web app is up and running, although it's on a server instance with no GUI, you can still open a new terminal console and input curl http://localhost:5000 to view the source code of the web app's home page.

Afterwards, you can press CTRL + C to shut down the .NET Core web app.

To materialize your web app, you need to edit files within the app directory. You can learn more details in the official .NET document page.

Having all of the development tasks done, you can use the following commands to publish your web app:

cd ~/myfirstwebapp

dotnet publish

You can find the published web app in the ~/myfirstwebapp/bin/Debug/netcoreapp2.0 directory.

(Optional): Setup Supervisor to keep your .NET Core web app online

Process crashes happen. In order to keep your web app online, it's a good idea to have a process managment tool, such as Supervisor, to monitor and restart the crashed web app processes.

On CentOS 7, you can install Supervisor using YUM:

sudo yum install supervisor -y

Next, you need to setup a dedicated Supervisor config file for your web app:

cd /etc/supervisord.d

sudo vi myfirstwebapp.conf

Populate the file:

[program:myfirstwebapp]

command=dotnet myfirstwebapp.dll

directory=/home/sudouser/myfirstwebapp/bin/Debug/netcoreapp2.0/

environment=ASPNETCORE__ENVIRONMENT=Production

user=root

stopsignal=INT

autostart=true

autorestart=true

startsecs=1

stderr_logfile=/var/log/myfirstwebapp.err.log

stdout_logfile=/var/log/myfirstwebapp.out.log

Save and quit:

:wq!

Next, you need to modify the default supervisord config file to include the config file we've created:

sudo cp /etc/supervisord.conf /etc/supervisord.conf.bak

sudo vi /etc/supervisord.conf

Find the last line:

files = supervisord.d/*.ini

Replace it:

files = supervisord.d/*.conf

Save and quit:

:wq!

Start Supervisor and set it to automatically start at system startup:

sudo systemctl start supervisord.service

sudo systemctl enable supervisord.service

Load the new Supervisor settings:

sudo supervisorctl reread

sudo supervisorctl update

Now, you can use the following command to show the app's status:

sudo supervisorctl status

The output will look like the following:

myfirstwebapp                    RUNNING  pid 3925, uptime 0:08:45

Next, you can try to kill the app's process by specifying the pid 3925:

sudo kill -s 9 3925

Wait for a while, and then check the status again:

sudo supervisorctl status

This time, the output will indicate that the app did break down and automatically started:

myfirstwebapp                    RUNNING  pid 3925, uptime 0:00:06

(Optional): Install Nginx as a reverse proxy

In order to facilitate visitors' access, you can install Nginx as a reverse proxy to pass web traffic to port 5000.

Install Nginx using YUM:

sudo yum install nginx -y

Edit the default Nginx config file as follows:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak

sudo vi /etc/nginx/nginx.conf

Find the following segment within the http {} segment:

location / {

}

Insert six lines of reverse proxy settings between the braces as shown below:

location / {

proxy_pass http://127.0.0.1:5000;

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

}

Save and quit:

:wq!

Start the Nginx service and then set it to start at system startup:

sudo systemctl start nginx.service

sudo systemctl enable nginx.service

Setup firewall rules

Before visitors can access the .NET Core web app on ports 80 and 443, you need to modify firewall rules as shown below:

sudo firewall-cmd --zone=public --permanent --add-service=http

sudo firewall-cmd --zone=public --permanent --add-service=https

sudo firewall-cmd --reload

This completes the application setup. You're now ready to browse your .NET Core web app at http://203.0.113.1.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342