ASP.NET Core教程:ASP.NET Core程序部署到Linux
一、前言
这篇文章我们将讲解如何将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

更新可供安装的产品:
sudo yum update
如下图所示:

最后安装ASP.NET Core 运行时
sudo yum install aspnetcore-runtime-3.1
如下图所示:

这时就比较考验网速了,如果网速比较快,安装就很快。安装完成以后查看当前环境:

参考微软官方文档: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对应的架构的离线包下载:

我们首先在Linux上创建一个目录:
mkdir -p /var/lib/dotnet
如下图所示:

创建完成以后,我们使用Xftp把上面下载的tar.gz离线包上传到刚才创建的目录中:

进入刚才创建的目录,然后把tar.gz文件解压到目录中:
tar zxf aspnetcore-runtime-3.1.1-linux-x64.tar.gz -C /var/lib/dotnet
如下图所示:

然后执行下面的命令设置环境变量:
export DOTNET_ROOT=/var/lib/dotnet
export PATH=$PATH:/var/lib/dotnet
如下图所示:

然后检查环境:

可以看到Runtime已经安装成功了。
注意:这种设置环境变量的方式只对当前会话窗口起作用,在另外的会话窗口就不起作用了,如下图所示:

为了解决这个问题,我们需要创建软链接方式来设置环境变量。
ln -s /var/lib/dotnet/dotnet /usr/local/bin
如下图所示:

创建完软链接以后,就可以在所有会话窗口访问了:

如果是使用在线rpm的方式进行安装,不会出现这种问题,所有的会话窗口都可以访问。
三、上传文件
环境安装完成以后,我们将发布好的文件上传到服务器。
在终端里面新创建一个文件夹,用来存放我们上传的文件:
sudo mkdir /NetCoreDemo
如下图所示:

创建完成以后我们在XFtp里面查看新创建的文件夹:

可以看到文件夹已经创建成功了。接着我们使用Xftp将文件上传到刚才创建的文件夹下面:

接下来我们就可以部署了。
三、部署
1、使用Kestrel启动
我们进入文件夹里面,然后直接使用命令行启动:

可以看到服务以及启动了。我们在网页中浏览:

网页没有任何的输入,这是为什么呢?因为localhost是内网地址,这里要加上--urls参数,
dotnet AspNetCoreDeployDemo.dll --urls http://*:5000
如下图所示:

这时我们在访问网页:

发现还是不能访问,这又是什么原因呢?原来在Linux中防火墙默认是开启的,所以要想外网访问,还需要关闭防火墙或者是把5000端口添加到防火墙中,查看防火墙状态命令:
service firewalld status
如下图所示:

可以看到,现在防火墙是开启的,我们把5000端口添加到防火墙中:
firewall-cmd --zone=public --add-port=5000/tcp --permanent
如下图所示:

permanent:这个参数表示永久存在,否则重启防火墙配置就丢失了。
添加了端口以后需要重启防火墙:
firewall-cmd --reload
如下图所示:

可以看到这时就可以访问了。

我们也可以关闭防火墙:
service firewalld stop
如下图所示:

在生产环境中,不建议关闭防火墙,建议是开启防火墙,然后把相应的端口号添加到防火墙里面。
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
如下图所示:

然后就可以安装Nginx了:
yum install nginx
如下图所示:

安装完以后启动Nginx:
systemctl start nginx
如下图所示:

将Nginx设置为开机启动:
systemctl enable nginx

Nginx默认开启80端口,我们要把80端口添加到防火墙中,添加完以后重启防火墙:
firewall-cmd --zone=public --add-port=80/tcp --permanent
如下图所示:

这时我们在外网访问Nginx:

我们看到这时可以访问Nginx了。接下来我们配置Nginx的反向代理。
首先进入Nginx的安装目录,然后查看所有文件:

如上图所示,nginx.conf是主配置文件,使用vim编辑器打开该文件:

在上图中可以发现:下面有一句include /etc/nginx/conf.d/*.conf,这说明还有一些配置在conf.d目录里面,而我们配置反向代理,主要就是在conf.d文件里面,使用下面的命令进入conf.d命令:
cd conf.d
然后查看所有文件:

发现里面有一个default.conf的文件,使用Vim编辑器打开该文件,然后修改如下:

listen表示监听的端口,这里是80端口。proxy_pass用来设置代理的地址。注意这里不要忘记最后的“;”。
保存以后使用下面的命令检查修改是否正确:

这说明修改的文件没有错误。配置成功以后,我们需要重启Nginx服务:
nginx -s reload
如下图所示:

重启之后我们访问:

这说明有错误,提示信息告诉我们查看Nginx日志,我们在nginx.conf里面查看日志路径:

然后我们进入该路径,查看下面的所有文件:

发现这下面有两个日志,我们先查看error.log:

使用下面的命令解决:
setsebool -P httpd_can_network_connect 1
我们重新访问:

这就可以访问了。我们在Linux上面部署就成功了。
ASP.NET Core教程:ASP.NET Core程序部署到Linux的更多相关文章
- Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署
运行环境 照例,先亮环境:软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境] 腾讯云 centos:7.2 ...
- Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署
运行环境 照例,先亮底 centos:7.2 cpu:1核 2G内存 1M带宽 辅助工具:xshell xftp 搭建.net core运行环境 .net core 的运行环境我单独写了一篇,请看我的 ...
- 使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台
使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台. 前面讲解了VSCode开发调试 .NET Core.都只是在windows下运行. .NET Core真正的核心是跨平 ...
- Windows下docker的安装,将ASP.NET Core程序部署在Linux和Docker中
参考文章: https://www.cnblogs.com/jRoger/p/aspnet-core-deploy-to-docker.html docker for windows下载连接: htt ...
- 如何将.Net Core应用程序部署在Linux操作系统上运行
.Net Core简介 跨平台: 可以在 Windows.macOS 和 Linux 操作系统上运行. 跨体系结构保持一致: 在多个体系结构(包括 x64.x86 和 ARM)上以相同的行为运行代码. ...
- Visual Studio编译Core程序部署到linux
一.背景 随着微软拥抱开源,推出Net Core框架,目前已经支持跨平台,能部署到Linux.MacOS.Windows等系统上. 下面我们就来分享一下Visual Studio编译好的代码部署到Li ...
- 记第一次使用NET CORE 2.2 完成的DEMO部署在LINUX并且上线
.NET CORE 这么久了一直没有成功打通过,今天花了点儿时间做了一个小DEMO,首次完成并且部署上线.记录一下. DEMO中只是测试了一下从MSSQL中获取数据,并且显示在页面上,涉及到了数据库连 ...
- [问题解决] 程序部署到Linux服务器乱码
错误: 在windows下开发的eclipse项目需要用java mail发送邮件,在将整个项目部署到linux服务器之后发送的邮件出现了乱码. 发生场景: Linux服务器下的Java mail程序 ...
- VisualStudioCode创建的asp.net core控制台程序部署到linux
1.asp.net core控制台程序 static void Main(string[] args) { ; ) { Console.WriteLine("Hello World!&quo ...
随机推荐
- jconsole和jstack
1.jconsole jconsole是jdk自带的一个可视化的jvm监控工具,可以监控本地的jvm,也可以监控远程jvm 打开本地jdk安装目录下的bin目录下的jconsole.exe 2.jst ...
- lombok之@Data
在实体类的编写过程中,常常需要应用大量的get.set方法,需要写大量的重复代码,即有的工具有自动生成功能,当时也会使实体类中产生大量冗余代码,使得代码变,springboot为我们提供了相应注解可以 ...
- 前端之html基础演示
1.本地服务:下载淘宝镜像node.js :https://npm.taobao.org/mirrors/npm :本次下载的版本是 v10.0.0 2.下载成功后,到cmd窗口输入 node -v, ...
- 足不出户,一探古今,打造线上3D数字博物馆!
随着3D技术的不断革新,为了让更多的用户领略历史之美,越来越多的博物馆开始举办线上展览.通过模拟不同的环境.灯光投影.360°无死角放大缩小展品,观众可以享受到身临其境的沉浸体验.不仅如此,给展品加上 ...
- CF1214E Petya and Construction Set题解
原来这就叫构造题,了 这道题的做法,我自己诌了一个形象的名字--"挂葡萄"法( 首先,"搭葡萄架":考虑到每个距离 \(d_i\) 只与 \(2i-1,2i\) ...
- [编译] 8、在Linux下搭建 stm8 单片机的开发烧写环境(makefile版)
目录 一.SDCC(Small Device C Compiler)编译环境搭建 1.1.下载 1.2.编译 1.3.测试 二.Hex2Bin+命令行烧写工具配置使用 2.1.下载工具安装配置 2.2 ...
- Python脚本:批量将.doc文件转化为.docx文件
将.doc转换为.docx文件有几种常用的方法: Microsoft Word 和 WPS 自带.doc转换.docx功能,但只能一个文件一个文件转换,批量转换要会员 在线网页 Office-Conv ...
- 使用javah 给.class类编译jni_helloworld.h文件头
第一步,在idea中,编写java文件,并且编译 package jni; public class HelloWorld { static { System.loadLibrary("He ...
- vue点击复制功能
复制功能,选中复制或者点击复制(不使用插件的情况下) 1.选中复制 这个比点击复制简单点 <template> <div> <el-button type=& ...
- GC相关问题
为什么会有新生代? 如果不分代,所有对象全部在一个区域,每次GC都需要对全堆进行扫描,存在效率问题.分代后,可分别控制回收频率,并采用不同的回收算法,确保GC性能全局最优. 为什么新生代会采用复制算法 ...