波斯马BOSSMA Information Technology

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

发布时间:2018年2月25日 / 分类:ASP.NET, DOTNET / 7,097 次浏览 / 评论

.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)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        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时,记得直接访问此站点哦,还可以程序调用,简直太方便了。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《在CentOS7中部署ASP.NET Core Web应用

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论