在CentOS7中部署ASP.NET Core Web应用

2018-02-27 10:49:06来源:http://blog.bossma.cn/dotnet/centos7-deploy-asp-net-core-web作者:BOSSMA'S BLOG人点击

分享

.NET Core发展速度很快,特别是2.0发布后,越来越多的项目开始使用。网上关于ASP.NET Core的文章也已经很多了,但是因为版本升级较快,有些已经过时。这篇文章将基于当前最新的.NET Core 2.0.5运行时,说明在CentOS中部署的详细过程。


要部署的是一个Web应用,提供生成Guid的服务,只有一个页面,每次访问都生成一个新的Guid。


Web服务器使用默认的Kestrel ,同时使用Nginx做反向代理(Nginx比Kestrel功能更加丰富更加专业)。


这里使用了阿里云虚拟机,因为.NET Core 2x不支持CentOS 6,所以操作系统选择了64位 CentOS7.4,关于.NET Core 2x支持的linux发行版见: https://docs.microsoft.com/zh-cn/dotnet/core/linux-prerequisites?tabs=netcore2x


1、创建ASP.NET Core Web应用

首先在Visual Studio 2017中创建一个ASP.NET Core Web应用程序,采用 Razor页面技术 (本质还是MVC技术)。



去掉没用的代码,只保留必要的Index.cshtml和_ViewImports.cshtml。



编写Index.cshtml代码:


@page
@model IndexModel
@Model.Message

编写Index.cshtml.cs代码:


public class IndexModel : PageModel
{
public string Message { get; set; }
public void OnGet()
{
Message = Guid.NewGuid().ToString().ToLower();
}
}

然后发布项目到某个本地目录,备用。


2、安装Nginx

为了省事,这里直接使用了一键安装包: lnmp ,它提供的脚本会把nginx、mysql、php都安装好,虽然这个项目暂时用不上mysql和php。


具体安装流程见: https://lnmp.org/install.html


由于安装lnmp需要进行编译生成,如果机器性能不好可能需要较长时间。


安装成功后通过相关命令创建一个Web站点,比如这里是 guid.fireflysoft.net,此站点根目录在/home/wwwroot/guid.fireflysoft.net。


3、安装.NET Core SDK

因为默认的项目发布方式是便携发布,用于 依赖框架的部署 ,并不会携带.NET Core的基础运行环境,需要在Linux系统中安装运行时。


首先将.NET产品包源添加到系统安装来源中:


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'

然后安装.NET SDK


sudo yum update
sudo yum install libunwind libicu
sudo yum install dotnet-sdk-2.1.4

请注意查看安装结果,安装成功后执行 dotnet –info 应该可以显示.NET Core的相关信息:


.NET Command Line Tools (2.1.4)
Product Information:
Version:2.1.4
Commit SHA-1 hash:5e8add2190
Runtime Environment:
OS Name: centos
OS Version:7
OS Platform: Linux
RID: centos.7-x64
Base Path: /usr/share/dotnet/sdk/2.1.4/
Microsoft .NET Core Shared Framework Host
Version: 2.0.5
Build: 17373eb129b3b05aa18ece963f8795d65ef8ea54

4、启动ASP.NET Core应用程序

将步骤1中生成的应用发布文件上传到Nginx新建的站点guid.fireflysoft.net目录下。


通过命令启动它:


/usr/bin/dotnet /home/wwwroot/guid.fireflysoft.net/GetGuidWeb.dll

这时候将为此应用分配一个默认的5000端口,如果防火墙开放了此端口,通过IP:5000应该可以访问此站点了。


5、监控应用状态

使用步骤4中的命令已经启动了应用,但是如果退出shell,则应用进程会自动关闭。这显然不是我们想要的,也不能应用于生产环境。


systemd 可以创建服务用来启动和监视应用的状态,并自动启动被关闭的程序。


这里在目录/etc/systemd/system/下创建一个名为kestrel-guid-fireflysoft-net.service的服务,服务内容:


[Unit]
Description=GUID.FIREFLYSOFT.NET DOTNETCORE APP
[Service]
WorkingDirectory=/home/wwwroot/guid.fireflysoft.net
ExecStart=/usr/bin/dotnet /home/wwwroot/guid.fireflysoft.net/GetGuidWeb.dll
Restart=always
RestartSec=10
SyslogIdentifier=GUID-FIREFLYSOFT-NET
User=www
[Install]
WantedBy=multi-user.target

相关配置请自行研究。


然后启用和启动该服务,并查看服务状态:


systemctl enable kestrel-guid-fireflysoft-net.service
systemctl start kestrel-guid-fireflysoft-net.service
systemctl status kestrel-guid-fireflysoft-net.service

如果出现如下字样,则表明服务启动成功:


Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

6、配置反向代理

修改Nginx下站点guid.fireflysoft.net的配置文件:


server
{
listen 80;
server_name guid.fireflysoft.net ;
index index.html index.htm default.html default.htm;
root/home/wwwroot/guid.fireflysoft.net;
location ~ .*/.(gif|jpg|jpeg|png|bmp|swf)$
{
expires30d;
}
location ~ .*/.(js|css)?$
{
expires12h;
}
location ~ /.well-known {
allow all;
}
location ~ //.
{
deny all;
}

# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
add_header X-XSS-Protection 1;
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;

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 $http_host;
proxy_cache_bypass $http_upgrade;
}
access_log off;
}

最后的location / { … } 是反向代理的相关配置,将对此站点的访问转发到本地5000端口。


7、演示站点

现在通过 http://guid.fireflysoft.net 就可以访问ASP.NET Core应用了。页面上只有一个Guid值,十分清爽:



以后需要生成一个Guid时,记得直接访问此站点哦,还可以程序调用,简直太方便了。


最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台