前言
笔者在毫无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
此时指令会根据代码设定将程序运行在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
如果操作无误,正常的提示如下图所示
4.设置防火墙
如果想要在远程访问服务,需要打开防火墙的5001端口,从而其他计算机才可以远程访问。
打开防火墙的5001端口:
sudo firewall-cmd --add-port=5001/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
如果端口打开正常,则局域网内的计算机可通过地址 ip访问
5.生产系统部署
上例说明了如何在CentOS上配置ASP.NET Core程序,但因为Kestrel是一个很基本的web服务器,所以需要配置性能更好的IIS、Nginx或者Apache。
正式程序可以不做步骤5,即打开防火墙的步骤。在Kestrel前置Apache服务器,Apache可以作为Kestrel的反向代理。
这样可以通过反向代理将部分链接指向ASP.NET Core,而部分代码仍旧使用php或者java,为程序的迁移提供了便利。