前言

笔者在毫无Linux部署.net core的经验下,第一次用了15分钟完成部署,第二次在生产环境用了5分钟。下文将说明如何在CentOS7下完成.NetCore2.1的部署,包括如何创建ASP.NET Core项目并将程序持久运行在Kestrel上,如何修改代码和防护墙进而使代码可以远程访问。最后也会提及生产环境使用的不同点。

 

1.安装RunTime

ASP.NET Core在Linux运行的首要条件便是需要安装Runtime。

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7.4/packages-microsoft-prod.rpm
sudo yum update
sudo yum install aspnetcore-runtime-2.1

微软对不同的Linux发行版本(包括RHEL,Ubuntu,Debian,Fedora,CentOS,openSUSE和SLES)提供了相似的解决方案.

如果想要在Linux做 .NET Core的开发和编译工作,那么需要同时安装 Dotnet Core SDK(SDK的安装并不是必须的,可以在开发环境编译后上传到Linux服务器),在CentOS下的指令为:

sudo yum install dotnet-sdk-2.1

 

2.创建并编译

2.1创建MVC工程

使用如下指令创建ASP.NET Core2.1的工程:

dotnet new MVC -o MvcDemoApp

2.2修改代码

默认的情况下ASP.NET Core2.1本地启动会运行在 Kestrel服务器上,如果想要从其他电脑访问网站,则需要修改绑定。

打开新建的工程文件中的 Program.cs 文件,修改代码如下:

1         public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
2             WebHost.CreateDefaultBuilder(args)
3                 .UseUrls("https://0.0.0.0:5001")
4                 .UseStartup<Startup>();

这样绑定的便是服务器上的所有IP,而不只是默认的 localhost。(???)

2.3编译程序

在终端运行如下指令:

dotnet publish --configuration Release

该指令所有的文件放到 /bin/Release/netcoreapp2.1/publish文件夹中。为了方便管理,我们将该目录下的文件放到Linux服务器下的 /home/RunService/MvcDemo 路径下。

 

3.运行Web程序

完成了.NET Core程序的创建和编译后,现在开始程序的部署。

3.1直接运行程序

最简单的是直接进入程序的根目录 /home/RunService/MvcDemo ,然后执行指令:

dotnet CoreMvcApp.dll

CentOS7部署Dotnet Core2.1_分享

此时指令会根据代码设定将程序运行在5001端口(结束程序 Ctrl + C),打开浏览器并输入地址 http://localhost:5001/ 或者 http://0.0.0.0:5001/便可以访问web服务。

3.2作为服务运行

直接运行可以用来测试程序,但是每次服务器重启后,需要手动打开服务。更好的方法是将网站当作服务运行。

创建名为 MvcDemo_Conf 的配置文件:

sudo vi /etc/systemd/system/MvcDemo_Conf.service

将以下命令写入打开的配置文件中

[Unit]
Description=.NET Core Test App

[Service]
WorkingDirectory=/home/long/RunService/MvcDemo
ExecStart=/usr/bin/dotnet /home/long/RunService/MvcDemo/MvcDemoApp.dll
Restart=always
RestartSec=10
SyslogIdentifier=MvcDemoApp
User=long
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

黄色背景的信息需要根据自己的需要修改

 3.3配置文件

 保存服务的配置文件后,使服务可用

sudo systemctl enable MvcDemo_Conf.service

启动服务

sudo systemctl start MvcDemo_Conf.service

检查服务运行状态

sudo systemctl status MvcDemo_Conf.service

如果操作无误,正常的提示如下图所示

CentOS7部署Dotnet Core2.1_分享_02

 

4.设置防火墙

如果想要在远程访问服务,需要打开防火墙的5001端口,从而其他计算机才可以远程访问。

打开防火墙的5001端口:

sudo firewall-cmd --add-port=5001/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

如果端口打开正常,则局域网内的计算机可通过地址 ip访问

CentOS7部署Dotnet Core2.1_分享_03

 

5.生产系统部署

上例说明了如何在CentOS上配置ASP.NET Core程序,但因为Kestrel是一个很基本的web服务器,所以需要配置性能更好的IIS、Nginx或者Apache。

正式程序可以不做步骤5,即打开防火墙的步骤。在Kestrel前置Apache服务器,Apache可以作为Kestrel的反向代理。

这样可以通过反向代理将部分链接指向ASP.NET Core,而部分代码仍旧使用php或者java,为程序的迁移提供了便利。

 

参考

centos安装VsCode