ASP.Net Core 应用 Linux 安装部署

在 .net core 发布之后,基于 .Net 开发的 Web 应用(AspNet.Core)可以平滑的部署到Linux系统上,抛弃了坑爹的IIS后,应用的稳定性也大大提升。这里总结一下如何在 Linux 上部署 .net core 开发的应用。

总的来说,发布 ASP.Net Core  应用,一般需要以下步骤:

1)从Visual Stuido中 发布(Publish)到服务器的某个目录
2)设置进程管理
3)设置反向代理

1、服务器运行环境设置

以下部署,基于CentOS 7.2 完成,其他系统可参考 https://www.microsoft.com/net/learn/get-started-with-dotnet-tutorial

按如图位置选择,可查看具体步骤,本文中都使用 CentOS,其他系统可自行选择。

ASP.Net Core 应用 Linux 安装部署_第1张图片
图 官方安装指南

具体步骤:

    1)进入Centos系统,命令行下执行下面的命令,加入 dotnet 产品源

sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm

    2)安装 .net SDK 或 runtime

sudo yum updatesudo
yum install dotnet-sdk-2.1 

# 如果只需要运行环境,可不用安装 dotnet-sdk-2.1,直接安装 dotnet-runtime-2.1即可
yum install dotnet-runtime-2.1  

    3)测试安装,输入下面的命令查看 版本信息

dotnet --version


2、安装 Nginx

ASP.NET Core 应用是一个控制台程序,需要用到一个服务管理软件来进行管理,在服务器启动时启动应用,在崩溃时重启该应用。ASP.NET Core 应用常见部署环境有以下:

    Window:IIS,Windows Service
    Linux: Nginx, Apache

本例中,我们采用Nginx进行反向代理。

CENTOS 7.2 中安装Nginx 可使用以下命令

yum install nginx

3、配置 Systemd 服务

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。CentOS上可用Systemd来进行服务管理。

具体步骤

1)上传 ASP.NET Core应用到指定目录。本例中,将应用部署到 /data/www/website,并将该目录owner设置为nginx:nginx

cd /data/www
chown -R nginx:nginx /data/www/website

2)假设应用启动文件为  WebApplication1.dll,创建 app1.service 配置文件

cd /etc/systemd/system
vim app1.service

app1.service 文件内容如下

[Unit]
Description=WebApplication1

[Service]
WorkingDirectory=/data/www/website 
ExecStart=/usr/bin/dotnet /data/www/website/WebApplication1.dll
Restart=always
RestartSec=30
SyslogIdentifier=Web Application 1
User=nginx
Environment=ASPNETCORE_ENVIROMENT=Production
Environment=ASPNETCORE_URLS=http://127.0.0.1:5002

[Install]
WantedBy=multi-user.target

其中粗斜体内容,可根据实际情况进行修改

3)启动该服务

systemctl enable app1.service
systemctl start app1.service

4)查看服务状态

systemctl status app1.service

如果显示为 active=running ,则表明服务已正确启动,如果显示错误,可使用 journalctl -xe 命令查看完整的错误日志进行排查

4、配置Nginx

在第三步,我们配置的APP的服务 ,是在 127.0.0.1 的 5002 端口上监听,外网是无法访问的,这里我们需要用到 nginx 进行反向代理。反向代理nginx的介绍,就不在这里赘述了。

ASP.NET Core 默认是用 Kestrel 来运行服务,Kestrel 是一个精简的http服务,有较高的性能,但多个服务无法共享同一个IP和端口,不能通过Http中的Host来区分不同的服务,因此这时候就需要用到反向代理服务。

使用反向代理服务,可以减少应用对外暴露更多细节,提供额外的配置层与防御,可以与已有架构集成得更好,简化负载均衡与SSL配置,只需要在反向代理服务器上配置SSL证书。

配置步骤如下,这里我们演示使用虚拟服务器的方式来进行配置

1)创建Nginx虚拟配置文件

cd /etc/nginx/conf.d
vim app1.test.com.conf

2)配置文件内容如下:

server
{
    listen 80;
    server_name app1.test.com;
    root /data/www/website;    
    access_log /var/log/www/app1.test.com.log main;
    error_log /var/log/www/app1.test.com_error.log;
    location / {
        proxy_pass http://localhost:5002;
        proxy_http_version 1.1;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        client_max_body_size 8m;
    }
}

3)检查配置文件

nginx -t

显示如下,表示nginx配置文件没有语法错误

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

4)重启nginx

systemctl restart nginx


至此,部署步骤完毕,将app1.test.com 域名解析到服务器地址,或者使用hosts文件 进行配置 之后,即可通过 app1.test.com 访问到已部署的 ASP.NET Core服务。

参考:

【1】https://www.microsoft.com/net/learn/get-started-with-dotnet-tutorial

【2】https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.1&tabs=aspnetcore2x#when-to-use-kestrel-with-a-reverse-proxy

【3】https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-2.1&tabs=aspnetcore2x

你可能感兴趣的:(ASP.Net Core 应用 Linux 安装部署)