部署ASP.NET|部署ASP.NET Core程序到Linux系统
目录
- 一、前言
- 二、安装运行时环境
- 1、在线安装
- 2、离线包安装
- 三、上传文件
- 四、部署
- 1、使用Kestrel启动
- 2、使用Nginx作为反向代理
一、前言 这篇文章我们将讲解如何将ASP.NET Core 程序部署到Linux。这里我们使用的是虚拟机里面安装的Centos7。这里的ASP.NET Core程序,以上篇文章中发布的框架依赖文件为例进行讲解。
二、安装运行时环境
1、在线安装
我们只是在Linux系统上面部署应用程序,所以只需要安装ASP.NET Core Runtime即可。在安装.NET之前,我们需要先注册Microsoft密钥和源,在终端里面执行下面的命令:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/15a368a9df284821abf26053c0834ecc.jpg)
文章图片
更新可供安装的产品:
sudo yum update
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/231c2a5e3ee74d6a97abf566c7b77884.jpg)
文章图片
最后安装ASP.NET Core 运行时
sudo yum install aspnetcore-runtime-3.1
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/686805f3bc1a4c75ae2a700079eb4f3e.jpg)
文章图片
这时就比较考验网速了,如果网速比较快,安装就很快。安装完成以后查看当前环境:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/7f954f7ab50e440d887eb4ecbe4b2e3e.jpg)
文章图片
参考微软官方文档:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-centos7
2、离线包安装
如果Linux虚拟机可以连接外网,建议使用上面的方式直接进行安装,如果是在生产环境下该如何安装Runtime呢?下面我们使用微软提供的离线安装包进行安装。首先下载tar.gz的离线包,下载网址:
https://dotnet.microsoft.com/download/dotnet-core/3.1
这里选择Linux对应的架构的离线包下载:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/bb08dc705ba34af09e5947db58e9e95e.jpg)
文章图片
我们首先在Linux上创建一个目录:
mkdir -p /var/lib/dotnet
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/b23366abebc344b2a2ea7686dd4a27f3.jpg)
文章图片
创建完成以后,我们使用Xftp把上面下载的tar.gz离线包上传到刚才创建的目录中:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/4f19a01d62554e8fa03219eafdacc1ff.jpg)
文章图片
进入刚才创建的目录,然后把tar.gz文件解压到目录中:
tar zxf aspnetcore-runtime-3.1.1-linux-x64.tar.gz -C /var/lib/dotnet
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/3cb2a4abd07d4a19a725f73809dbf45e.jpg)
文章图片
然后执行下面的命令设置环境变量:
export DOTNET_ROOT=/var/lib/dotnetexport PATH=$PATH:/var/lib/dotnet
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/201ffbe2107c40b5ad209c3b4929cc56.jpg)
文章图片
然后检查环境:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/a92060816de942b8bdeee64afbb29f05.jpg)
文章图片
可以看到Runtime已经安装成功了。
注意:这种设置环境变量的方式只对当前会话窗口起作用,在另外的会话窗口就不起作用了,如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/ce2c4503e9294c2e8d21e6b27e229c9f.jpg)
文章图片
为了解决这个问题,我们需要创建软链接方式来设置环境变量。
ln -s /var/lib/dotnet/dotnet /usr/local/bin
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/423564637c73485b9d2e3d1a34db8d89.jpg)
文章图片
创建完软链接以后,就可以在所有会话窗口访问了:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/a288608fc7444c43a6e1e2622779a4ad.jpg)
文章图片
如果是使用在线rpm的方式进行安装,不会出现这种问题,所有的会话窗口都可以访问。
三、上传文件 环境安装完成以后,我们将发布好的文件上传到服务器。
在终端里面新创建一个文件夹,用来存放我们上传的文件:
sudo mkdir /NetCoreDemo
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/609404881032486ca1add06cdb525aa1.jpg)
文章图片
创建完成以后我们在XFtp里面查看新创建的文件夹:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/1cce0c47ccea464ca911435b050132cf.jpg)
文章图片
可以看到文件夹已经创建成功了。接着我们使用Xftp将文件上传到刚才创建的文件夹下面:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/657c51361063489ab746fd2096b5428a.jpg)
文章图片
接下来我们就可以部署了。
四、部署
1、使用Kestrel启动
我们进入文件夹里面,然后直接使用命令行启动:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/c18dac4091754ea491cb8fbe9e5c658e.jpg)
文章图片
可以看到服务以及启动了。我们在网页中浏览:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/0040df39ee484b4a88bab09284f890cc.jpg)
文章图片
网页没有任何的输入,这是为什么呢?因为localhost是内网地址,这里要加上--urls参数,
dotnet AspNetCoreDeployDemo.dll --urls http://*:5000
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/9c941224ea14419589eb56e3dc320113.jpg)
文章图片
这时我们在访问网页:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/0040df39ee484b4a88bab09284f890cc.jpg)
文章图片
发现还是不能访问,这又是什么原因呢?原来在Linux中防火墙默认是开启的,所以要想外网访问,还需要关闭防火墙或者是把5000端口添加到防火墙中,查看防火墙状态命令:
service firewalld status
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/6a7e4f94cffc4c1a85d3ece925f3ef8d.jpg)
文章图片
可以看到,现在防火墙是开启的,我们把5000端口添加到防火墙中:
firewall-cmd --zone=public --add-port=5000/tcp --permanent
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/8dfaaed599d04c7ea0cf31c66526b678.jpg)
文章图片
【部署ASP.NET|部署ASP.NET Core程序到Linux系统】permanent:这个参数表示永久存在,否则重启防火墙配置就丢失了。添加了端口以后需要重启防火墙:
firewall-cmd --reload
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/65bfcb103ac54ae781e212d12face518.jpg)
文章图片
可以看到这时就可以访问了。
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/c94be7341b564521bc87363f658d268f.jpg)
文章图片
我们也可以关闭防火墙:
service firewalld stop
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/688fe49e34614fb087d48cd9dbed4253.jpg)
文章图片
在生产环境中,不建议关闭防火墙,建议是开启防火墙,然后把相应的端口号添加到防火墙里面。
2、使用Nginx作为反向代理
上面我们是使用的控制台的方式启动的,这种方式不能处理反向代理,负载均衡等,所以我们建议在Linux上面使用Nginx作为反向代理服务器。我们安装Nginx。
因为默认情况下,Nginx不在CentOS的资源库中,首先要执行下面的命令将Nginx添加到资源库中:
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/dfc4219823df4c99a6dea8a42808831c.jpg)
文章图片
然后就可以安装Nginx了:
yum install nginx
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/9d33e7ff67cd4ed4a15d36104f8339cf.jpg)
文章图片
安装完以后启动Nginx:
systemctl start nginx
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/08343b5776084f7b97d86766806b396b.jpg)
文章图片
将Nginx设置为开机启动:
systemctl enable nginx
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/634f466a7d154553bf07a3f35ca9849f.jpg)
文章图片
Nginx默认开启80端口,我们要把80端口添加到防火墙中,添加完以后重启防火墙:
firewall-cmd --zone=public --add-port=80/tcp --permanent
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/963852b8b3594b88bd874a449bc68773.jpg)
文章图片
这时我们在外网访问Nginx:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/fa7985f158e54d3c8bba0c94f54fd3f2.jpg)
文章图片
我们看到这时可以访问Nginx了。接下来我们配置Nginx的反向代理。
首先进入Nginx的安装目录,然后查看所有文件:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/166d6351ffeb477cb05397b055e252f9.jpg)
文章图片
如上图所示,nginx.conf是主配置文件,使用vim编辑器打开该文件:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/10df73719e024610a225f2d569438b83.jpg)
文章图片
在上图中可以发现:下面有一句include /etc/nginx/conf.d/*.conf,这说明还有一些配置在conf.d目录里面,而我们配置反向代理,主要就是在conf.d文件里面,使用下面的命令进入conf.d命令:
cd conf.d
然后查看所有文件:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/6d4727e3fcc94b93afd750b58b59e992.jpg)
文章图片
发现里面有一个default.conf的文件,使用Vim编辑器打开该文件,然后修改如下:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/1b36e4a09f6745faa1b36641e894317f.jpg)
文章图片
listen表示监听的端口,这里是80端口。proxy_pass用来设置代理的地址。注意这里不要忘记最后的“; ”。保存以后使用下面的命令检查修改是否正确:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/5500ab10b8f44a0f97485317a27a9147.jpg)
文章图片
这说明修改的文件没有错误。配置成功以后,我们需要重启Nginx服务:
nginx -s reload
如下图所示:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/29aadb656c834e06870f4ebd5dad5f1a.jpg)
文章图片
重启之后我们访问:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/455049415cf54cc38f8f975c24402d2c.jpg)
文章图片
这说明有错误,提示信息告诉我们查看Nginx日志,我们在nginx.conf里面查看日志路径:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/57fce38b97714780aea48a3bedc50aa0.jpg)
文章图片
然后我们进入该路径,查看下面的所有文件:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/d9152326f8e84f3ea6e316ea5884a0e9.jpg)
文章图片
发现这下面有两个日志,我们先查看error.log:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/ae8f2511df33442da25083cf91114b00.jpg)
文章图片
使用下面的命令解决:
setsebool -P httpd_can_network_connect 1
我们重新访问:
![部署ASP.NET|部署ASP.NET Core程序到Linux系统](https://img.it610.com/image/info11/02d2306a23f84f949975771819b5d2fa.jpg)
文章图片
这就可以访问了。我们在Linux上面部署就成功了。
到此这篇关于部署ASP.NET Core程序到Linux系统的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- docker部署访问postgres数据库的实现方法
- ASP.NET|ASP.NET Core框架探索之Authorization
- .Net|.Net Core应用增强型跨平台串口类库CustomSerialPort()详解
- 博三|24 - srsRAN安装部署(已支持5G NSA, 原srsLTE)
- ansible管理工具的环境及部署安装
- PXE|PXE kickstart自动化部署系统安装
- Nginx服务LNMP之WordPress部署流程步骤
- 小白也可以完成的0基础部署Nginx服务
- 2022最新IntellJ|2022最新IntellJ IDEA的mall开发部署文档
- 服务器部署|服务器部署(保姆级教程)