admin 管理员组文章数量: 1184232
2024年1月12日发(作者:java代码ms2加密解密签名验签博客园博客)
目录
第1节.
概述
1
第2节.
环境支持 1
第3节.
安装.NETCORE运行时 2
3.1.
安装源
3.2.
安装运行时
3.3.
检查是否安装运行时
3
4
5
第4节.
发布应用程序 6
4.1.
发布配置
4.2.
测试应用
6
11
第5节.
安装NGINX 14
第6节.
配置NGINX 16
第7节.
守护进程 19
7.1.
概述
7.2.
创建服务文件
19
20
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
7.3.
启用服务 22
第1节. 概述
Core应用程序是跨平台的,可以部署到时下流行的Linux服务器上。
在Linux操作系统上,有一个高性能的HTTP和反向代理web服务器,那就是Nginx。
Nginx相当于Windows操作系统上的IIS,可以做为
Core应用程序访问的反向代理服务器。
这里,我们在Ubuntu20.04平台上安装Nginx,并用来做为 Core的反向代理服务器。
第2节. 环境支持
对于Ubuntu操作系统,并不是所有的版本都支持.NET的。如下是各版本支持.NET的情况:
1 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
图1
Ubuntu20.04是支持.NET Core3.1和.NET 5的,这里我们部署的是.NET Core3.1版本的Web应用程序。
如果是在Ubuntu20.04平台上开发.NET Core应用程序,则需要安装.NET Core SDK。
如果是在Ubuntu20.04平台上做生产机运行.NET Core应用程序,则需要安装.NET Core运行时。
第3节. 安装.NETCore运行时
要在Ubuntu20.04安装对应的.NET Core运行时版本,才能正常运行 Core应用程序。
2 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
3.1. 安装源
使用APT进行安装可通过几个命令来完成。
安装.NET运行时之前,需要运行以下命令,将Microsoft包签名密钥添加到受信任密钥列表,并添加包存储库。
APT(Advanced Packaging Tool)是一个在Debian和Ubuntu中的Shell前端软件包管理器。
在Ubuntu系统中,打开终端,单击Terminal应用程序:
图2
在图2的命令提示符下输入如下命令:
wget oft/config/ubuntu/20.04/ -O
sudo dpkg -i
运行后如下图所示:
3 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
图3
将安装源添加到受信任的列表之后,就可以安装 Core运行时了。
3.2. 安装运行时
通过 Core运行时,可以运行使用.NET开发且未提供运行时的应用。
以下命令将安装 Core 3.1运行时,在终端中,运行以下命令:
sudo apt-get update;
sudo apt-get install -y apt-transport-https &&
sudo apt-get update &&
sudo apt-get install -y aspnetcore-runtime-3.1
运行这些命令会到微软的服务器上下载并安装组件:
4 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
图4
使用命令安装的好处就是速度快。
3.3. 检查是否安装运行时
上面的命令执行完成后,我们最后为了安心,还要检查一下是否在平台上已安装了 Core 3.1运行时。
检查是否已安装运行时的命令如下:
dotnet --list-runtimes
运行后如下:
图5
在图5中,查看到已安装了.NET Core和 Core运行时, 5 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
Core依赖.NET Core。
第4节. 发布应用程序
4.1. 发布配置
这里,将前面我们开发的学生成绩管理系统做为部署的应用程序。
使用VS2019打开解决方案:
图6
在图6中右击Web项目,然后选择“发布”,如图7所示:
6 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
图7
在图7中选择“文件夹”,因为目前,我们是部署到另外一台服务器上,先将项目发布到一个文件夹中,然后再将发布的文件复制到目标服务器上。
点击“下一步”按钮:
图8
在图8中选择一个存储发布文件的位置,这里使用默认的位置,点击“完成”按钮。
7 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
图9
图9的配置说明如下:
(1).目标位置:项目发布后文件存放的位置。
(2).删除现有文件:在发布前删除所有现有文件(目标位置文件夹中中的文件,这里是publish),默认为False。如果设置为True,则在发布项目之前,会先删除掉publish文件夹中的所有文件,然后再发布项目。
(3).配置:是指在VS中代码对Debug还是Release的配置,可以使用预处理命令配置。
(4).目标运行时:也就是应用程序发布后运行在什么样的环境中,是Windows,还是Linux等,默认是“可移植的”跨平台的运行时。
如果要自定义设置,在图9中点击任意一个“”图标:
8 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
图10
在图10中,还可以配置目标框架,本项目是基于.NET Core3.1创建的,所以要选择“netcoreapp3.1”。
另外,还有一个重要的配置:”部署模式“:
图11
9 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
在图11中发布,可选择的部署模式有:框架依赖和独立,区别如下:
(1).框架依赖:简称为FDD部署,也就是发布的应用程序,需要服务器上已经安装了.NET Core框架,否则无法运行。FDD发布的部署包很小,只发布项目和依赖项,无需.NET Core框架本身。
(2).独立部署:简称为SCD部署,发布应用程序时,所有组件(.NET Core库和.NET Core运行时)一起发布,部署包比较大,服务器上无需安装.NET Core框架也可运行。如果服务器上已安装了.NET Core框架,则SCD发布的应用部署时是独立的,与现有的.NET Core框架不冲突,各运行各的。
这里,我们选择框架依赖部署。
配置完成之后,点击”发布“窗体上的”发布“按钮开始发布应用程序。
10 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
图12
图12就是已发布的部分文件,大部分都是*.dll文件,包括应用程序的和依赖的文件。
注意:在发布过的文件中,是找不到*.cshtml视图文件的,被打包到*.文件中了。
4.2. 测试应用
将上面发布的publish文件夹里的全部文件复制到Ubuntu系统的某个文件夹下,这里复制到"Homeyido"文件夹中:
图13
可以通过工具或手动执行复制操作。
对于发布过的 Core应用程序,访问的入口放在了Web应用程序的程序集中,这里是如下程序集:
11 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
下面,在本地测试一下,我们发布的应用程序是否可以在已安装 Core运行时的Ubuntu系统上正常运行。
图14
在图14的”yido“文件夹的菜单中,单击”Open in Terminal“,在当前文件夹下打开终端:
图15
在图15的命令提示符下已经显示出当前的目录,在$后面执行的命令都是在当前文件夹下进行的。
在图15的命令提示符下输入如下命令:
dotnet
12 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
命令输入完成后打回车键:
图16
从图16给出的日志信息得知:
(1).正在监听localhost:5000地址和端口,如果有访问,则就会运行应用程序。
(2).给出了应用程序所在的路径是:/home/parallels/yido,可在属性中查看路径。
现在,在Ubuntu系统中,打开浏览器,这里使用火狐浏览器,并使用localhost:5000访问:
图17
13 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
此时在图17中已经能够正常访问 Core应用程序了,表示我们安装的.NET Core运行时已经成功了。
虽然在图17是可以正常访问 Core应用程序,是因为使用的是自宿主的Kestrel服务器访问的,只提供基本的访问,没有负载均衡、很大的吞吐量等。
第5节. 安装Nginx
e是自宿主的,所以我们需要一个反向代理Web服务器来给Kestrel做反向代理,来实现诸如负载均衡、很大的吞吐量等。
这里,我们使用Nginx做为Kestrel的反向代理服务器。
需要在Ubuntu中安装Nginx服务器。
在终端中输入如下命令安装Nginx:
sudo apt-get install nginx
在运行过程中,需要输入y确认:
14 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
图18
在图18的“Do you want to continue?[y/n]”提示下输入y以确认。
图19
在图19中,命令已经运行完成了。
因为是首次安装 Nginx,通过运行以下命令显式启动:
15 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
sudo service nginx start
启动成功后,无提示信息:
图20
确认Nginx是否安装成功,可以通过如下地址访问首页:
图21
当出现了图21的页面,表示Nginx已经安装并启动成功了。
第6节. 配置Nginx
要想让Nginx能够挂接我们的 Core Web应用程序,还需要对Nginx进行配置,指定主机名、端口号等。
对Nginx的配置,是在一个default的文本文件中进行的。
默认的配置文件在路径为/etc/nginx/sites-available/default文件中。
16 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
在Ubuntu系统中,打开终端(Terminal),并输入如下命令:
cd /etc/nginx/sites-available/
将工作目录切换到/etc/nginx/sites-available/目录:
图22
然后再在当前目录下输入如下命令打开default文件文件:
sudo gedit default
图23
在图23中输入登录密码,密码不会显示,输完密码打回车键,然后将如下内容复制到default文件中:
server {
listen 80;
server_name localhost;
location / {
proxy_pass localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
17 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
这段配置说明如下:
(1).listen指定监听80端口号。
(2).server_name指定服务器的名称,这里使用localhost表示。
(3).proxy_pass指与localhost:5000映射。
也就是在Nginx中使用localhost访问时,实际访问的是Kestrel的localhost:5000。
将default配置保存后,再使用如下命令强制重新加载配置。
sudo nginx -s reload
注意,此命令必须在/etc/nginx/sites-available/目录下执行。
由于,我们还没有安装进程守护程序,所以要想让应用程序能通过Nginx访问,则还要保持命令dotnet run 应用程序集.dll命令行窗口必须开启。
图24
现在,我们来通过Nginx代理服务器访问:
18 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
图25
由于我们在Nginx中,配置的服务器名称为localhost。
所以图25的localhost就是通过Nginx访问的,而如果访问的是localhost:5000,则是通过Kestrel访问的。
第7节. 守护进程
7.1. 概述
虽然在上面,我们手动启动了 Core应用程序,其实就是启动Kestrel服务器,通过Nginx做为反向代理服务器访问。
缺点是启动命令的终端窗口不能关闭,如果服务器出现问题自启了,则Kestrel服务器不会自启,显然 Core应用程序将不可访问。
此时,就需要一个守护程序来监视应用程序,在操作系统出现意外后, Core应用程序能够自动启动并运行。
19 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
这里,我们使用Systemd创建服务文件以启动和监视基础Web应用。
Systemd是一个初始系统,可以提供启动、停止和管理进程的许多强大的功能。
7.2. 创建服务文件
Systemd是通过配置一些服务文件来守护进程的。
创建服务定义文件的命令如下:
sudo nano /etc/systemd/system/e
服务定义的文件名为e。
执行结果如下:
图26
20 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
然后在图26中编写如下配置内容:
[Unit]
Description=YidoWebAPP
[Service]
WorkingDirectory=/home/parallels/yido
ExecStart=/usr/bin/dotnet
/home/parallels/yido/
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-yido
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=
图27
此配置核心说明如下:
21 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
(1).Description指定一个描述内容。
(2).WorkingDirectory指定工作目录,也就是发布的
Core应用程序文件所在的文件夹。
(3).ExecStart指定启动的文件名,这里就是启动应用程序的*.dll文件。
(4).Restart表示出现问题会一直尝试重启应用。
配置内容编辑完成后,保存,并按下control(Ctrl)+X退出编辑。
7.3. 启用服务
服务文件配置完成后,使用如下命令启用服务:
sudo systemctl enable e
图28
注意,在定义服务文件时,文件名必须以*.service为后缀。
启用该服务后,再使用如下命令启动该服务:
sudo systemctl start e
然后再使用如下命令查看一下状态:
22 / 24
一都编程
使用Nginx在Ubuntu20中部署 Core MVC跨平台应用程序
sudo systemctl status e
图29
从图29上看,守护进程服务已经设置完成了。
现在,将终端窗口关闭,使用localhost访问一下:
图30
到现在,Nginx反向代理服务器和Systemd守护进程服务都已经完成了,整个 Core应用程序也就部署完成了。
23 / 24
一都编程
版权声明:本文标题:使用Nginx在Ubuntu中部署ASP.NET Core MVC应用程序 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1705061998a471702.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论