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,其他系统可自行选择。

图 官方安装指南

具体步骤:

    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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容