部署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

更新可供安装的产品:

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程序到Linux系统的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • .Net Core WebApi部署在Linux服务器上的方法

    鸽了好久,终于有个时间继续写了,继上一篇之后,又写(水)了一篇,有什么不足之处请大家指出,多谢各位了. 下面有两个需要用到的软件,putty和pscp,我已经上传到博客园了,下载请点击这里. 一.准备服务器 首先和之前一样,先去腾讯云整了个云服务器,选择CentOS的镜像. 然后跟之前一样完成购买,得到公网的IP地址. 接着我们复制下来公网的IP地址,我这里使用了putty进行远程登录. 输入root用户名和你之前设置的密码进行登录. 然后,我们就可以安装.Net Core的运行环境了. 二.安

  • .net core Api 部署到Linux的方法步骤

    一.环境介绍 1..net开发环境:asp.net core 3.1 2.Linux环境:CentOS Linux release 7.9.2009 (Core) 3.Swagger: Swashbuckle.AspNetCore6.0 4.开发工具:VS2019,xShell7,xFtp7 二.搭建API 2.1使用vs2019新建一个API项目 2.2安装Swagger 选择上面的工具-->NuGet包管理器-->管理解决方案的管理包 搜索Swashbuckle.AspNetCore,并安

  • Linux下部署.net core环境的步骤详解

    注意:在Linux上安装.net core 的环境需要64位系统 安装部署如下: 1.把dotnet源新增至apt-get中 Ubuntu 14.04 / Linux Mint 17 sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet-release/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list' sudo

  • 详解Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

    前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署. 目录 新建一个 WebApp 项目 发布到 Linux,Mac OS 使用 Nginx 进行反向代理 新建一个 WebApp 项目 在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序. 以下是我在 Mac 中的截图: 主要是用以下几个命令: mkdir He

  • Linux CentOS下docker部署Asp.Net6 Core

    1.项目设置 设置dockerfile属性为"始终复制", 修改dockerfile文件内容为: FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /web COPY . . EXPOSE 80 EXPOSE 443 FROM base AS final ENTRYPOINT ["dotnet", "OneZhanMVC.dll"] ps:若项目没有dockerfile右键项目,点击

  • NetCore1.1+Linux部署初体验

    NetCore1.1+Linux部署初体验 1.环境准备 Centaos7+Win10 虚拟机 Win10安装VS2017 注意勾选下.Net Core 3.Centaos安装netcore 1.1参见https://www.microsoft.com/net/core sudo yum install libunwind libicu curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=848821 sudo m

  • Asp.net Core 初探(发布和部署Linux)

    前言 俗话说三天不学习,赶不上刘少奇.Asp.net Core更新这么长时间一直观望,周末帝都小雨,宅在家看了下Core Web App,顺便搭建了个HelloWorld环境来尝尝鲜,第一次看到.Net Web运行在Linux上还是有点小激动(只可惜微软走这一步路走的太晚,要不然屌丝们也不会每每遇见Java VS .Net就想辩论个你死我活). 开发环境和部署环境 Windows 10.VS2015 Update3.安装.Net Core SDK.DotNetCore.1.0.1-VS2015T

  • 在MacOS+Linux+Nginx中发布和部署Asp.Net Core

    目录 新建一个 WebApp 项目 发布到 Linux,Mac OS 使用 Nginx 进行反向代理 Mac OS Linux(Ubuntu) 注意事项 新建一个 WebApp 项目 在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序. 以下是我在 Mac 中的截图: 主要是用以下几个命令: mkdir HelloWebApp 这个命令是创建一个名为 HelloWebApp 的文件夹. dotnet new -t W

  • 在Linux+Jexus中发布和部署Asp.Net Core

    目录 安装 Linux DotNet 环境 新建一个 WebApp 项目,并发布 使用 Jexus 进行反向代理 Jexus 介绍 安装 Jexus 配置 Jexus 注意事项 安装 Linux DotNet 环境 安装 dotnet 环境参见官方网站 https://www.microsoft.com/net/core. 新建一个 WebApp 项目,并发布 在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序,然后

  • Linux系统Docker 部署 ASP.NET Core应用的流程分析

    一.系统环境 1.腾讯云轻量应用服务器CentOS7.6 二.操作流程及途中遇到的问题 1.SSH方式远程Linux ssh <username>@<IP address or domain name> 如果遇到下图问题: 出现这个问题的原因:known_hosts是记录远程主机的公钥的文件,之前重装个系统,而保存的公钥还是未重装系统的系统公钥,在ssh链接的时候首先会验证公钥,如果公钥不对,那么就会报错 解决方法:使用shh-keygen 命令ssh-keygen -R IP,执

  • Linux服务器下利用Docker部署.net Core项目的全过程

    发布ASP.NET Core项目 和普通的项目发布一样,将项目发布到目标文件夹中 构建Dockerfile文件 在目标文件根目录新建Dockerfile文件(没有后缀) FROM microsoft/dotnet//基于'microsoft/dotnet' 来构建镜像 COPY . /app //拷贝项目文件夹中的所有文件到docker容器中的app文件夹 这里是两个参数 WORKDIR /app //设置工作目录为 '/app' 文件夹,即容器启动默认的文件夹 EXPOSE 80 //设置Do

随机推荐